在 HDFS 中执行读取时出现 java.lang.NullPointerException

在 HDFS 中执行读取时出现 java.lang.NullPointerException

过去 4 个月,我已安装并运行了一个 10 节点 HBase 集群。该集群是在我无法控制的公司环境中的虚拟机上设置的,但一切运行良好……直到今天。

今天,系统的每个部分都崩溃了。我重启了系统,一切都恢复了一段时间,但之后又崩溃了(特别是 HBase……但我认为这是因为以下问题)。

HDFS 日志中存在以下错误:

HdfsCanaryCdh4{hdfs://hbase-1.internal:8020} for hdfs://hbase-1.internal:8020: Failed to read /tmp/.cloudera_health_monitoring_canary_files/.canary_file_2014_04_15-17_39_25. Error: org.apache.hadoop.ipc.RemoteException(java.lang.NullPointerException): java.lang.NullPointerException
    at org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager.sortLocatedBlocks(DatanodeManager.java:334)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocations(FSNamesystem.java:1343)
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getBlockLocations(NameNodeRpcServer.java:413)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getBlockLocations(ClientNamenodeProtocolServerSideTranslatorPB.java:172)
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44938)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1002)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1752)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1748)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1438)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1746)

当我跳到名称节点并运行时:

sudo -u hdfs hdfs dfs -cat /tmp/.cloudera_health_monitoring_canary_files/.canary_file_2014_04_15-17_39_25

我收到一行回复:cat: java.lang.NullPointerException

我还仔细检查了磁盘是否已满(它们确实没有满)以及我是否有连接(一切看起来都很正常 - 没有人触碰过这个系统,因为我是唯一有访问权限的人)。

我完全搞不懂这里发生了什么。如果需要,我可以提供更多详细信息,但我甚至不知道接下来该怎么做。

更新

根据评论中马克的要求,输出:

sudo -u hdfs hdfs dfs -lsr /tmp/

drwxrwxrwx   - hdfs supergroup          0 2014-04-16 09:48 /tmp/.cloudera_health_monitoring_canary_files
-rw-rw-rw-   3 hdfs supergroup         56 2014-04-15 16:59 /tmp/.cloudera_health_monitoring_canary_files/.canary_file_2014_04_15-16_59_24
[continues like this for all the files in the directory]

相关内容