运行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 post具有相同的异常/跟踪:windows中的nullpointerexception with mr2。
总结一下帖子:这个异常是由于hadoop作为不同于mr作业的用户运行造成的。
我试过以下方法: chmod
-正在将hdfs中的所有文件和目录绑定到777(只是为了实验)
使用运行hadoop作业 sudo
但这两种方法都没有取得任何成果。
我正在本地主机上运行所有hadoop进程(“伪分布式模式”)。我开始使用hadoop start-yarn.sh
以及 start-dfs.sh
我的普通本地用户。我正在用同一个用户运行hadoop作业。我还设置了 dfs.datanode.data.dir
以及 dfs.namenode.name.dir
到本地计算机上我有权与本地用户读/写的路径。我已经准备好了 dfs.permissions.enabled
至 false
.
我是不是误解了这个例外?还有什么我应该试试的吗?谢谢您。
1条答案
按热度按时间disho6za1#
最后,它是我自己的
FileSplit
导致问题的子类。我没有正确地(反)序列化filesplit的Path
,所以当通过电线发送时,这个字段就变成了null
. hadoop调用getFsStatistics
在空路径上,导致NullPointerException
.