Hadoop 3.0 纠删码 - 确定可接受的节点故障数



在Hadoop2.0中,默认复制因子为3。可接受的节点故障数为 3-1=2。
因此,在 100 节点的群集上,如果将文件划分为 10 个部分(块),则复制因子为 3 时,所需的总存储块为 30。如果包含块 X 及其副本的任何 3 个节点出现故障,则该文件不可恢复。即使群集有 1000 个节点或文件拆分为 20 个部分,群集上 3 个节点的故障对文件来说仍然是灾难性的。

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

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

但是在Hadoop 3中,假设存储效率固定为50%,那么根据它被划分到的块数,不同文件的可接受节点故障数量似乎有所不同。

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

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

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

使用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 个用于奇偶校验,使用 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

相关内容

  • 没有找到相关文章

最新更新