使用hdfsjavaapi从hdfs读取文件

o4tp2gmn  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(333)

嗨,我正在尝试使用javaapi从hdfs读取一个文件。
连接到hdfs并列出文件工作正常。
但是在尝试读取一个文件时,我得到了以下异常
函数调用:fs.copytolocalfile(path,dpath);

java.io.IOException: Could not obtain block: blk_-747325769320762541_16269493 file=/user/s3t.txt
    at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.chooseDataNode(DFSClient.java:2266)
    at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.blockSeekTo(DFSClient.java:2060)
    at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.read(DFSClient.java:2221)
    at java.io.DataInputStream.read(Unknown Source)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:68)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:47)
    at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:100)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:230)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:163)
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1222)
    at org.apache.hadoop.fs.FileSystem.copyToLocalFile(FileSystem.java:1203)
    at Access.main(Access.java:59)

注意:我可以使用fs.createnewfile(mypath)创建新文件;

hrirmatl

hrirmatl1#

https://stackoverflow.com/a/37661092/5797400 -这也许会有帮助。这是我解决问题的办法 could not obtain block: BlockMissingException .
以下是链接的要点:
namenode不直接读取或写入数据。
客户机(使用直接访问hdfs的java程序)与namenode交互以更新hdfs名称空间并检索块位置以进行读/写。
客户机直接与datanode交互以读取/写入数据。

pnwntuvh

pnwntuvh2#

你可以用两种方法来检查。
检查文件的权限、文件的用户和组以及您的用户和组,您必须具有访问文件的权限。
在远程访问文件时,可能是网络路径问题。
请两者都检查一下。

相关问题