作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在 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”的文件夹,在 root 下,即/localhost:9000 并放置“/5”代码将运行,但在这种情况下,数据是从 hadoop 外部获取的,就像我根本不使用 hadoop 一样。那么这是编程中的错误吗,即我应该使用 hadoop io 包而不是 java io 包来处理 hdfs 而不是本地文件系统,或者这是另一个问题。?
最佳答案
你的hdfs的默认目录是/localhost:9000/,hadoop在那里找不到你的输入文件;刚刚在/localhost:9000/中通过它:
$hadoop fs -put $LOCAL_PATH_OF_INPUT_FILE:/5 /localhost:9000/
$hadoop jar hipi.jar "/5" "/processWOH" 1
祝你好运!
关于java - 如何在 Hadoop 的 java/terminal 中指定文件的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43006608/
我是一名优秀的程序员,十分优秀!