我在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;在配置文件中的任何位置解决此问题?
由于
答案 0 :(得分:0)
问题是hadoop服务是从不同的用户[在我的情况下为SYSTEM]启动的,mapreduce示例是从我的本地用户提交的。因此,这将通过将[本地用户]的FileSystem统计信息返回为Null来解决问题。
一旦我从本地用户启动Hadoop,上述问题就会得到解决。