NameNode 如何管理故障 DataNode 上的数据块?
DataNode 一段时间(默认是 10.5 分钟)没有心跳则被认为是 dead 。
接下来 NameNode 按照如下步骤来维持副本数(默认是 3 ):
- NameNode 识别哪些块在故障 DataNode 上;
- NameNode 定位其他拥有这些块备份的 DataNode ;
- 具有块副本的 DataNode 被指示将这些块复制到其他 DataNode 以维持副本数。
处理 dead DataNode 注意一下几点:
- 如果 DataNode 故障源自磁盘故障,参考磁盘更换流程
- 如果 DataNode 由于磁盘故障以外的原因无法进行心跳检测,则需要重新调试(recommissioned)以将其添加回集群。
- 如果 DataNode 重新加入集群,则可能出现该 DataNode 上存在多余副本的情况,NameNode 将遵循 Rack-Awareness 策略随机删除多余副本。
Rack-Awareness: 机架感知确保对副本的读/写请求被放置到最近的机架或同一个机架。
该如何处理?
因为副本会自动迁移,所以不用额外处理,等故障机器修好重新上线后,加入集群即可。