一、大致流程
Datanode宕机了后,如果是短暂的宕机,可以实现写好脚本监控,将它启动起来。如果是长时间宕机了,那么datanode上的数据应该已经被备份到其他机器了,那这台datanode就是一台新的datanode了,删除他的所有数据文件和状态文件,重新启动。
二、详细流程
总体上涉及了心跳检测、副本移除线程、副本恢复线程。当datanode发生宕机或者datanode中的某个storage(如一块硬盘)发生的错误时。
1、namenode会根据datanode发送的心跳进行检测;
2、但namenode并没有在心跳检测的汇报中进行即时反应,而是先记录对应的心跳信息,由另一个定期检测线程移除DatanodeManager和BlockManager中对应的block信息,并记录需要恢复的数据;
3、对于数据的恢复,又新建了一个线程进行定期扫描,分配恢复副本需要的源数据节点(副本节点)和目标数据节点(新的存储节点),在datanode的下一轮心跳检测中转换为对应的命令返回给datanode;
源码解读详情可以访问https://extendswind.top/posts/technical/hadoop_datanode_failure_processing/