我已经在windows中安装了hadoop2.3.0,并且能够成功地执行mr-jobs。但是,当尝试在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)
在上面的例子中,'fileoutputformat.getoutputpath(job)'的结果返回null,这会引发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);
}
因此,是否需要在配置文件中的任意位置设置属性“mapreduce.output.fileoutputformat.outputdir”的值来解决此问题?
谢谢
1条答案
按热度按时间efzxgjgh1#
问题是hadoop服务是从不同的用户(在我的例子中是系统)启动的,mapreduce示例是从本地用户提交的。因此,通过将[本地用户的]文件系统统计信息返回为null,这就产生了问题。
一旦我从本地用户启动hadoop,上面的问题就解决了。