xiaokissoo
发布于

4.4. cannot fetch block locations

➢ 问题
执行查询 select count(*) from partitioned_table 时报错:cannot fetch block locations: DETAIL: HdfsIoException: Unexpected:when unwrap the rpc remote exception "java.lang.ArrayIndexOutBoundException",java.lang.ArrayIndexOutOfBoundException in /hawq/depends/libhdfs3/src/server/NamenodeImpl.cpp: 77'
➢ 分析
当 HDFS datanode 上出现 currupt block 上报给 namenode 时,namenode 内存中 blockmap 和 corruptReplicas 中有几率信息不同步,这个客户端获取 block 信息时出现数组越界情况导致获取 block location 信息失败。Datenode 上 currupt block 后续会被自动清理
➢ 解答
该问题是 HDFS 的 bug(https://issues.apache.org/jira/browse/HDFS-11445),在高版本 hadoop(2.8.2, 2.9.0)中被修复。
临时解决方案是 TRUNCATE TABLE 或者重建表。
目前版本解决方案是在各 datanode 节点执行 hdfs dfsadmin -triggerBlockReport

评论
    test