【发布时间】:2017-03-24 18:21:36
【问题描述】:
我在 Hadoop2 上运行一个任务:
$hadoop jar hipi.jar "/5" "/processWOH" 1
hipi.jar:jar文件名
“/5”:输入文件夹名称
"/processWOH": 输出文件夹名称
我收到关于路径 /localhost:9000/5/LC814000.tif: 的异常:
Error: java.io.FileNotFoundException: /localhost:9000/5/LC814000.tif (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at ProcessWithoutHIPI.ProcessRecordReaderWOH.getCurrentKey(ProcessRecordReaderWOH.java:81)
at ProcessWithoutHIPI.ProcessRecordReaderWOH.getCurrentKey(ProcessRecordReaderWOH.java:1)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.getCurrentKey(MapTask.java:507)
at org.apache.hadoop.mapreduce.task.MapContextImpl.getCurrentKey(MapContextImpl.java:70)
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.getCurrentKey(WrappedMapper.java:81)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
我认为(我不确定)添加到路径中的额外“/localhost:9000”的问题,但我不知道它是如何添加的(通过 hadoop,java 代码,...)。
注意:这个 jar 文件在 hadoop 之外运行良好,但在 hadoop (hdfs) 中却不是
感谢任何帮助
更新: 正如我后来发现的那样,“/5”文件夹是在本地系统中搜索的,而不是在 hdfs 中,如果我在本地文件系统中创建一个名为“localhost:9000”的文件夹,在根目录下,即 /localhost:9000 并放入“/5”代码将运行,但在这种情况下,数据是从 hadoop 外部获取的,就像我根本不使用 hadoop 一样。 那么这是编程中的一个错误,即我应该使用hadoop io包而不是java io包来处理hdfs而不是本地文件系统,还是另一个问题。?
【问题讨论】:
-
前缀/localhost:9000是关于hdfs的路径;请执行以下命令并传递结果:$hadoop fs -ls /localhost:9000/
-
@Imi.Cino 谢谢。我现在明天早上不在办公室,我会运行它并提交结果。
-
/localhost:9000 不是floder; 9000是你的hdfs的端口!您可以在 core-site.xml 中看到它。请出示你的 core-site.xml 和你的 mapreduce 程序
-
@Imi.Cino 对于正确的情况确实如此,但在我的情况下,它从本地系统而不是 hdfs 获取所有路径,我不知道为什么。正因为如此,我在本地系统中创建了一个文件夹 /localhost:9000/ 并且它工作但现在所有数据都在 Hadoop 之外获取和写入!!
-
@Imi.Cino
配置>fs.default.name hdfs://localhost:9000
标签: java hadoop jar terminal path