【发布时间】:2013-10-21 12:49:19
【问题描述】:
您好,我正在尝试使用 Java API 从 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);
创建新文件【问题讨论】:
-
你能用
hadoop dfs -get获取文件吗?我认为该块已损坏。 -
是的,我可以使用“hadoop dfs -get”获取文件。
-
这很奇怪,因为
dfs -get使用完全相同的 API。你可以重新检查你是否访问了同一个文件吗?您是否以同一用户身份运行 java 程序? -
是的,正在访问同一个文件。实际上我正在尝试访问远程 HDFS,但我没有以任何特定用户身份运行。这会是个问题吗?