我正在尝试实现Eclipse文档中给出的简单字数统计。
相同的程序可以在终端上运行,但是当我尝试在Eclipse中运行时,我从运行配置中传递了参数

论据是:

/home/rachit/wordcount/input /home/rachit/wordcount/output

Got this exception:

Exception in thread "main" java.lang.NullPointerException
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getBlockIndex(FileInputFormat.java:442)
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:411)
    at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:302)
    at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:319)
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:197)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1297)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1294)
    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:1656)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1294)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1315)

然后我改变了这个
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));


FileInputFormat.setInputPaths(job,new Path("hdfs://localhost:9000/home/rachit/wordcount/input"));
FileOutputFormat.setOutputPath(job, new Path("hdfs://localhost:9000/home/rachit/wordcount/output"));

需要注意的一点:dfs端口号是9000并且已连接,我可以在eclipse中从map_reduce透 View 浏览文件结构,然后从那里上传文件。
setInputPaths(..)文档:


addInputPaths(..)文档:



b / w setInputPaths(..)addInputPaths(..)有什么区别?
为什么会有所作为?

最佳答案

一项作业可以有多个输入路径。假设您在工作中有5条想要的路径。您可以执行以下操作:

  • 五个操作中一对一添加它们
  • 同时将所有五个设置在一起
  • 添加其中两个,然后添加另外三个。

  • 因此,addInputPath允许您将单个路径添加到现有路径列表中。
    addInputPaths允许您向现有列表添加多个路径。如果作业有两个路径,并且您使用addInputPaths再添加三个,则作业中将有五个路径。
    setInputPaths允许您设置多个替换现有列表的路径。因此,如果您有两个路径,并且使用setInputPaths设置了三个路径,那么最后会有三个路径。

    区别在于添加(到现有路径列表)并替换它。

    您收到的错误可能是由于args[0]中没有正确的路径,或者作业在显示的部分代码之前存在现有的不良路径。如果您是从一个具有空路径列表的作业开始,那么使用add和使用set之间应该没有什么区别。

    08-07 22:45