在Windows中使用MR2的NullPointerException

时间:2014-05-19 09:40:11

标签: c# hadoop mapreduce hadoop-streaming

我在Windows中安装了Hadoop 2.3.0,并且能够成功执行MR作业。但是在尝试使用C#[使用HadoopSDK的.Net程序集]中的流式采样时,应用程序以以下异常结束

14/05/16 18:21:06 INFO mapreduce.Job: Task Id : attempt_1400239892040_0003_r_000000_0, Status : FAILED
Error: java.lang.NullPointerException
at org.apache.hadoop.mapred.Task.getFsStatistics(Task.java:347)
at org.apache.hadoop.mapred.ReduceTask$OldTrackingRecordWriter.<init>(ReduceTask.java:478)
at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:414)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:392)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)

更新

我能够深入研究问题并发现在以下行中引发了异常

 matchedStats = getFsStatistics(FileOutputFormat.getOutputPath(job), job);

at org.apache.hadoop.mapred.ReduceTask$OldTrackingRecordWriter.<init>(ReduceTask.java:478)

在上面,&#39; FileOutputFormat.getOutputPath(job)&#39;返回null,抛出空指针异常。以下是getOutputPath()函数的代码。

public static final String OUTDIR = "mapreduce.output.fileoutputformat.outputdir";

  public static Path getOutputPath(JobConf conf) {
  String name = conf.get(org.apache.hadoop.mapreduce.lib.output.
  FileOutputFormat.OUTDIR);
  return name == null ? null: new Path(name);
  }

那么是否需要为属性设置值&#34; mapreduce.output.fileoutputformat.outputdir&#34;在配置文件中的任何位置解决此问题?

由于

1 个答案:

答案 0 :(得分:0)

问题是hadoop服务是从不同的用户[在我的情况下为SYSTEM]启动的,mapreduce示例是从我的本地用户提交的。因此,这将通过将[本地用户]的FileSystem统计信息返回为Null来解决问题。

一旦我从本地用户启动Hadoop,上述问题就会得到解决。