hadoop Requested data length 86483783 is longer than maximum configured RPC length
解决
修改NameNode的hdfs-site.xml配置文件,添加以下配置:
<property><name>ipc.maximum.data.length</name><value>134217728</value>
</property>
允许ipc通讯最大的数据包为128MB,默认配置为64MB。
最后平滑重启NameNode,在重启异常的DataNode解决。
总结
出问题的集群规模比较小,但是小文件数量特别多。
从日志看是内存不足导致DataNode跪了,然后随即的重启,DataNode要给NameNode上报block信息,由于block信息较多,ipc通信的数据包超过了64MB,NameNode返回异常了,导致DataNode这边出现EOFException
的异常,由于这个异常,DataNode没能把block信息上报给NameNode,NameNode就认为block丢失了。
这次的问题是由于block数量较多导致,也分析了下block数量与资源消耗的关系,针对单个DataNode上有500W个左右的block,大概消耗如下:
- DataNode内存6GB左右
- 一次性向NameNode汇报block的ipc数据包大小约为64MB
今后维护HDFS可以根据block的数量信息分配合理的内存和ipc.maximum.data.length
大小了。
参考:
https://zhuanlan.zhihu.com/p/44018321