Hadoop:调用getFsStatistics时出现NullPointerException



在运行MapReduce作业时遇到以下异常,该作业将存储在HDFS上的文件作为输入:

15/03/27 17:18:12 INFO mapreduce.Job: Task Id : attempt_1427398929405_0005_m_000005_2, Status : FAILED
Error: java.lang.NullPointerException
    at org.apache.hadoop.mapred.Task.getFsStatistics(Task.java:347)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.<init>(MapTask.java:486)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:735)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167)
    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:1556)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

我自己并不清楚这意味着什么,除了这看起来可能与文件权限有关。我还发现了以下其他StackOverflow帖子,其中包含相同的Exception/trace:在windows中使用MR2的NullPointerException。

总结一下这篇文章:这个异常是由于hadoop运行的用户与MR作业的用户不同。

我试过以下几种:

  • chmod-将HDFS中的所有文件和目录复制到777(只是为了实验)
  • 使用sudo运行hadoop作业

但这两种方法都没有产生任何结果。

我在localhost上运行所有Hadoop进程("伪分布式模式")。我和我的普通本地用户一起使用start-yarn.shstart-dfs.sh启动了hadoop。我正在使用同一个用户运行hadoop作业。我还将dfs.datanode.data.dirdfs.namenode.name.dir设置为本地计算机上的路径,我有权与本地用户一起读/写这些路径。我已将dfs.permissions.enabled设置为false

我是不是误解了这个例外?还有什么我应该试试的吗?非常感谢。

最终,是我自己的FileSplit子类造成了问题。我没有正确地(反)序列化FileSplit的Path,所以当通过连线发送时,这个字段变成了null。Hadoop在空路径上调用getFsStatistics,导致NullPointerException

相关内容

  • 没有找到相关文章

最新更新