Hadoop:调用 getFsStatistics 时出现 NullPointerException
Hadoop: NullPointerException when calling getFsStatistics
当运行使用存储在 HDFS 上的文件作为输入的 MapReduce 作业时,我遇到以下异常:
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.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)
我自己不太明白这意味着什么,除了这看起来可能与文件权限有关。我还发现了以下具有相同 Exception/trace 的其他 Whosebug post:NullPointerException with MR2 in windows.
总结 post:此异常是由于 hadoop 运行 与 MR 作业的用户不同。
我试过以下方法:
chmod
-ing HDFS 中的所有文件和目录到 777(只是为了实验)
- 运行使用
sudo
连接 hadoop 作业
但这两种方法都没有产生任何结果。
我 运行 在本地主机 ("pseudo-distributed mode") 上运行所有 Hadoop 进程。我使用普通本地用户使用 start-yarn.sh
和 start-dfs.sh
启动了 hadoop。我正在 运行 与同一个用户一起处理 hadoop 作业。我还将 dfs.datanode.data.dir
和 dfs.namenode.name.dir
设置为本地计算机上我有权使用本地用户 read/write 访问的路径。我已将 dfs.permissions.enabled
设置为 false
。
我是否误解了这个异常?还有什么我应该尝试的吗?谢谢。
最后,是我自己的 FileSplit
子类导致了问题。我没有正确(反)序列化 FileSplit 的 Path
,所以当通过网络发送时,这个字段变成了 null
。 Hadoop 在空路径上调用 getFsStatistics
,导致 NullPointerException
.
当运行使用存储在 HDFS 上的文件作为输入的 MapReduce 作业时,我遇到以下异常:
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.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)
我自己不太明白这意味着什么,除了这看起来可能与文件权限有关。我还发现了以下具有相同 Exception/trace 的其他 Whosebug post:NullPointerException with MR2 in windows.
总结 post:此异常是由于 hadoop 运行 与 MR 作业的用户不同。
我试过以下方法:
chmod
-ing HDFS 中的所有文件和目录到 777(只是为了实验)- 运行使用
sudo
连接 hadoop 作业
但这两种方法都没有产生任何结果。
我 运行 在本地主机 ("pseudo-distributed mode") 上运行所有 Hadoop 进程。我使用普通本地用户使用 start-yarn.sh
和 start-dfs.sh
启动了 hadoop。我正在 运行 与同一个用户一起处理 hadoop 作业。我还将 dfs.datanode.data.dir
和 dfs.namenode.name.dir
设置为本地计算机上我有权使用本地用户 read/write 访问的路径。我已将 dfs.permissions.enabled
设置为 false
。
我是否误解了这个异常?还有什么我应该尝试的吗?谢谢。
最后,是我自己的 FileSplit
子类导致了问题。我没有正确(反)序列化 FileSplit 的 Path
,所以当通过网络发送时,这个字段变成了 null
。 Hadoop 在空路径上调用 getFsStatistics
,导致 NullPointerException
.