1

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

现在步入hadoop 3.0。
使用纠删码,正如 Hadoop 所说,它提供了相同的持久性和 50% 的存储效率。并且基于 Reed-Solomon 方法的工作原理(即对于 k 个数据块和 n 个奇偶校验块,至少应可访问 (k+n) 个块中的 k 个,以使文件可恢复/可读)
所以对于上面的同一个文件——有10个数据块,为了将数据效率保持在50%,可以添加5个奇偶校验块。因此,从 10+5 个块中,至少有 10 个块应该可供文件访问。而在 100 个节点的集群上,如果 15 个块中的每一个都存储在一个单独的节点上,那么如您所见,总共 5 个节点故障是可以接受的。现在在 1000 个节点的集群上存储相同的文件(即 15 个块)不会对可接受的节点故障的数量产生任何影响 - 它仍然是 5。
但这里有趣的部分是 - 如果相同的文件(或另一个文件)被分割分成 20 个块,然后添加 10 个奇偶校验块,然后在 100 个节点的集群上总共保存 30 个块,可接受的节点故障数为 10。

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

但是在 hadoop 3 中,假设存储效率固定为 50%,那么对于不同的文件来说,可接受的节点故障数似乎是不同的,具体取决于它被分成的块数。

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

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

编辑: 这个问题是我对 EC 提出的一系列问题的一部分 - 其他问题如下 -
Hadoop 3.0 擦除编码:对 MR 作业性能的影响?

4

1 回答 1

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 个节点)。

对于集群范围的视图,如果超过 nk 个节点发生故障,则无论节点数量如何,都可能发生故障,因为一组数据和奇偶校验块有可能碰巧包含所有故障节点。为了避免这种情况,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 个块的文件,仍然需要 nk 个奇偶校验块,以确保在发生故障之前需要超过 nk 个节点才能发生故障。对于 Reed Solomon 编码,这可以通过模拟“缺失”块的前导零块来完成。


我想我会添加一些概率与集群中节点的数量。

假设节点故障率为 1%。

15 个节点,10 个用于数据,5 个用于奇偶校验,一次使用 comb(a,b) 组合 a 事物 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

于 2018-05-17T15:31:50.830 回答