我已经创建了一个用户“ hduser”,该用户是我的hadoop用户
hduser@chenna:~$ hadoop fs -mkdir /work1
在我的“ / work”目录中,我有WordCout.jar和mapredinput.txt
hduser@chenna:~$ hadoop fs -ls /work1
WordCout.jar
mapredinput.txt
hduser@chenna:~$ hadoop jar WorCount.jar com.hadoop.wc.WordCount mapredinput.txt /work2
现在我得到了例外:
15/08/15 21:43:25 INFO mapreduce.JobSubmitter:清理临时区域/tmp/hadoop-yarn/staging/hduser/.staging/job_1534349563620_0001 线程“主”中的异常org.apache.hadoop.mapreduce.lib.input.InvalidInputException:输入路径不存在:hdfs:// localhost:9000 / user / hduser / mapredinput.txt 在org.apache.hadoop.mapreduce.lib.input.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:323)
在org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:265)
在org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:387)
在org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:301)
在org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:318)
在org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196)
在org.apache.hadoop.mapreduce.Job $ 10.run(Job.java:1290)
在org.apache.hadoop.mapreduce.Job $ 10.run(Job.java:1287)
在java.security.AccessController.doPrivileged(本机方法)
在javax.security.auth.Subject.doAs(Subject.java:422)
在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1758)
在org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
在org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1308)
在com.hadoop.wc.WordCount.main(WordCount.java:66)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:498)
在org.apache.hadoop.util.RunJar.run(RunJar.java:221)
在org.apache.hadoop.util.RunJar.main(RunJar.java:136)
是什么导致此错误?
答案 0 :(得分:1)
我可以猜到WordCount类期望使用绝对路径,该路径应该存在于HDFS中。因为您为mapredinput.txt提供了相对路径,所以该类的实现正在用户'/ user / hduser'的主目录中查找文件。 您有两种选择:
无论如何,如果jar是从hadoop示例中获取的,那么很可能只需要指示目录即可;文本文件应存在的输入目录和不应存在的输出目录,即e。:
hduser@chenna:~$ hadoop jar WorCount.jar com.hadoop.wc.WordCount /absolute/path/with_files /absolute/path/not_exist
与您的配置配合使用的是:
hduser@chenna:~$ hadoop jar WorCount.jar com.hadoop.wc.WordCount /work1 /work1/output1
在很大程度上取决于WordCount类的实现方式来传递参数。