Hadoop WordCount示例不起作用

时间:2018-08-15 16:16:28

标签: exception

我已经创建了一个用户“ 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)

是什么导致此错误?

1 个答案:

答案 0 :(得分:1)

我可以猜到WordCount类期望使用绝对路径,该路径应该存在于HDFS中。因为您为mapredinput.txt提供了相对路径,所以该类的实现正在用户'/ user / hduser'的主目录中查找文件。 您有两种选择:

  • 将文件移动到/ user / hduser
  • 将参数更改为绝对路径/work1/mapredinput.txt

无论如何,如果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类的实现方式来传递参数。