您好,我尝试使用Java API从HDFS读取文件。使用HDFS从HDFS读取文件Java API
连接到HDFS并列出文件工作正常。
但在尝试读取文件我得到后续的例外
函数调用:fs.copyToLocalFile(路径,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中)新文件;
你可以使用'hadoop dfs -get'获取文件吗?我认为该块已损坏。 –
是的,我可以使用“hadoop dfs -get”获取文件。 – dnivra
这很奇怪,因为'dfs -get'使用完全相同的API。你可以重新检查,如果你正在访问相同的文件?你是否以同一个用户的身份运行java程序? –