block missing问题排查流程
当集群出现block missing异常时,一般的排查流程如下:
- 首先检查是否有datanode处于dead或Decommissioned状态,如果是,尝试恢复datanode,一般block missing会自行消失
- 如果所有datanode都处于健康状态,则查看是否有datanode的block-report存在问题,有的话分析对应日志,排查原因
block-report出现问题的一个常见原因:ipc.maximum.data.length的参数值设置的比较小,同时datanode管理的block快太多,导致datanode向namenode汇报时的报文大小超过了该参数值的设置。发生超长时,datanode会报如下异常,同时,datanode的gc会非常频繁: - 如果上述情况都不符,则需要排查是否直接操作过hdfs文件,导致数据发生了丢失,是的话,需要分情况进行处理
如果没有出现【corrupted block】,则让集群自己恢复即可,namenode会进行recovery操作,保证block的副本数达到设定值
如果出现了【corrupted block】,并且长时间无法恢复,则说明block的所有副本都丢失了,此时只能通过fask命令删除坏块儿,再尝试补数据了