Hadoop:调用getFsStatistics时出现NullPointerException

时间:2015-03-27 17:30:22

标签: java hadoop permissions mapreduce hdfs

我在运行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帖子具有相同的异常/跟踪:NullPointerException with MR2 in windows

总结帖子:此异常是由于hadoop作为与MR作业不同的用户运行而引起的。

我尝试过以下方法:

  • chmod - 将HDFS中的所有文件和目录转换为777(仅用于实验)
  • 使用sudo
  • 运行hadoop作业

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

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

我是否误解了这个例外?还有什么我应该尝试的吗?谢谢。

1 个答案:

答案 0 :(得分:0)

最后,它是我自己的FileSplit子类导致问题。我没有正确地(de)序列化FileSplit的Path,因此当通过网络发送时,该字段变为null。 Hadoop在空路径上调用getFsStatistics,导致NullPointerException