Hadoop 3.0纠删码:可接受节点故障数的判定及推论验证
Hadoop 2.0 vs 3.0 节点故障容忍能力对比
咱们来好好梳理下Hadoop两个版本在节点故障容忍上的差异,以及你提出的推论是否准确:
Hadoop 2.0的故障容忍逻辑
- 默认复制因子为3,因此可接受的节点故障数为复制因子减1,也就是2个
- 举个实际场景:100节点的集群里,某个文件被分成10个块,复制因子设为3的话,总共需要存储30个块。如果存储某块及其所有3个副本的节点全部故障,这个文件就彻底无法恢复了
- 划重点:这个故障容忍数是集群级属性——不管集群规模多大、文件分多少块,只要复制因子固定,可接受的故障数就是
ReplicationFactor-1
Hadoop 3.0的纠删码(EC)故障容忍逻辑
Hadoop 3.0引入了基于Reed-Solomon算法的纠删码(EC)技术,官方称能在50%存储效率下达到和复制模式同等的数据持久性,这里的故障容忍逻辑和2.0完全不同:
- 纠删码的核心是把文件拆成
k个数据块,搭配n个校验块,只要至少k个块(数据块或校验块均可)处于可用状态,就能完整恢复文件 - 给你举两个直观例子:
- 如果文件分成10个数据块,搭配5个校验块(总共15块),且每个块都存在不同节点上,那最多能接受5个节点故障,而且这个数值和集群规模无关
- 如果文件分成20个数据块,搭配10个校验块,那可接受的节点故障数就提升到了10个
- 划重点:在固定50%存储效率的前提下,不同分块数的文件对应不同的可接受节点故障数,这个数值等于校验块的数量
推论验证与故障数判定方式
现在来验证你提出的推论:
- Hadoop 2.0:可接受节点故障数为
ReplicationFactor-1,属于集群级属性——这个推论完全正确。复制模式下,每个块的副本分散在不同节点,只要不是某个块的所有副本节点都故障,数据就安全;而可容忍的最大故障数由全局复制配置决定,和单个文件的分块数无关。 - Hadoop 3.0(固定50%存储效率):不同分块数的文件对应不同的可接受节点故障数——这个推论也正确。因为50%存储效率下,校验块的数量会随数据块数的增加而成比例增加,而可容忍的节点故障数就等于校验块的数量,所以不同分块数的文件能容忍的故障数自然不同。
注:本文未讨论单块文件的边缘情况,不过推测算法可通过复制或补充校验数据的方式保证数据持久性。
内容的提问来源于stack exchange,提问作者samshers




