Hadoop 3.0擦除编码 - 确定可接受的节点故障数量?

时间:2018-05-17 14:19:41

标签: hdfs hadoop2 reed-solomon hadoop3 erasure-code

在hadoop 2.0中,默认复制因子为3. 可接受的节点故障数为3-1 = 2.
因此,如果一个文件被分成10个部分(块),那么在一个100节点集群上,复制因子为3,所需的总存储块为30.如果包含块X及其副本的任何3个节点都失败,则该文件为不可恢复即使群集有1000个节点或文件被分成20个部分,群集上3个节点的故障对于该文件仍然是灾难性的。

现在进入hadoop 3.0。
通过擦除编码,Hadoop表示它提供了相同的耐用性,50%的存储效率。并且基于Reed-Solomon方法如何工作(即对于k个数据块和n个奇偶校验块,至少k个(k + n)块应该是可访问的,以使文件可恢复/可读)
因此,对于上面的相同文件 - 有10个数据块并且为了将数据效率保持在50%,可以添加5个奇偶校验块。因此,从10 + 5块开始,至少应该有10个块可供文件访问。在100节点集群上,如果15个块中的每一个都存储在一个单独的节点上,那么正如您所看到的,总共可以接受5个节点故障。现在在1000节点集群上存储相同的文件(即15个块)与w.r.t可接受的节点故障数量没有任何区别 - 它仍然是5.
但这里有趣的部分是 - 如果将相同的文件(或另一个文件)划分为20个块然后添加10个奇偶校验块,那么在100个节点集群上总共保存30个块,可接受的节点数失败是10.

我想在这里提出的观点是 -
在hadoop 2中,可接受的节点故障数是ReplicationFactor-1,并且显然基于复制因子。这是一个集群范围的财产。

但是在hadoop 3中,假设存储效率固定为50%,则根据分割的块数,不同文件的可接受节点故障数似乎不同。

如果上述推断是正确的,那么有人会评论吗?以及如何确定任何群集可接受的节点故障?

(而且我不想让它复杂化,所以没有讨论只有一个块的文件的边缘情况。但是我猜这个算法将足够聪明,可以按原样或使用奇偶校验数据进行复制这样可以保证数据持久性设置。)

修改 这个问题是我对EC的一系列问题的一部分 - 其他问题如下 -
Hadoop 3.0 erasure coding: impact on MR jobs performance?

1 个答案:

答案 0 :(得分:1)

将您的数字用于Hadoop 2.0,每个数据块都存储在3个不同的节点上。只要3个节点中的任何一个未能读取特定块,该数据块就可以恢复。

再次使用您的数字,对于Hadoop 3.0,每组10个数据块和5个奇偶校验块存储在15个不同的节点上。因此,数据空间需求减少到50%开销,但数据和奇偶校验写入的节点数量增加了5倍,从Hadoop 2.0的3个节点增加到Hadoop 3.0的15个节点。由于冗余基于Reed Solomon擦除校正,因此只要15个节点中的任何10个节点都未能读取特定的一组块,那么这组块就可以恢复(一组块的最大允许故障是5个节点) )。如果它是20个数据块和10个奇偶校验块,那么数据和奇偶校验块分布在30个不同的节点上(一组块的最大允许故障是10个节点)。

对于群集范围的视图,如果超过n-k个节点发生故障,则无论节点数量多少都会发生故障,因为一组数据和奇偶校验块可能会包含所有故障节点。为避免这种情况,应该增加n以及集群中的节点数。对于100个节点,每组可以是80个数据块,20个奇偶校验块(25%冗余)。注意100个节点会异常大。该网页的示例是14个节点RS(14,10)(每组:10个数据块,4个奇偶校验块)。

https://hadoop.apache.org/docs/r3.0.0

使用您的号码,群集大小将是15(10 + 5)或30(20 + 10)个节点。

对于具有1个块或少于k个块的文件,仍然需要n-k个奇偶校验块以确保在发生故障之前需要多于n-k个节点失败。对于Reed Solomon编码,可以通过为“缺失”块模拟前导零块来完成。

我以为我会在群集中添加一些概率与节点数。

假设节点故障率为1%。

15个节点,10个用于数据,5个用于奇偶校验,使用梳子(a,b)进行一次b的组合:

x个节点失败的可能性是:

6 => ((.01)^6) ((.99)^9) (comb(15,6)) ~= 4.572 × 10^-9
7 => ((.01)^7) ((.99)^8) (comb(15,7)) ~= 5.938 × 10^-11
8 => ((.01)^8) ((.99)^7) (comb(15,8)) ~= 5.998 × 10^-13
...

6次或更多次失败的概率〜= 4.632×10 ^ -9

30个节点,20个用于数据,10个用于奇偶校验

x个节点失败的可能性是:

11 => ((.01)^11) ((.99)^19) (comb(30,11)) ~= 4.513 × 10^-15
12 => ((.01)^12) ((.99)^18) (comb(30,12)) ~= 7.218 × 10^-17
13 => ((.01)^13) ((.99)^17) (comb(30,13)) ~= 1.010 × 10^-18
14 => ((.01)^14) ((.99)^16) (comb(30,14)) ~= 1.238 × 10^-20

11次或更多次失败的概率〜= 4.586×10 ^ -15

为了表明奇偶校验开销的需求随着节点数量的增加而减少,考虑100个节点的极端情况,80个数据,20个节点(25%冗余):

x个节点失败的可能性是:

21 => ((.01)^21) ((.99)^79) (comb(100,21)) ~= 9.230 × 10^-22
22 => ((.01)^22) ((.99)^78) (comb(100,22)) ~= 3.348 × 10^-23
23 => ((.01)^23) ((.99)^77) (comb(100,23)) ~= 1.147 × 10^-24

21次或更多次失败的概率〜= 9.577×10 ^ -22