Используя ваши номера для Hadoop 2.0, каждый блок данных хранится на 3 разных узлах. Пока любой из 3 узлов не смог прочитать конкретный блок, этот блок данных можно восстановить.
Опять же, используя ваши номера, для Hadoop 3.0 каждый набор из 10 блоков данных и 5 блоков четностей хранится на 15 различных узлах. Таким образом, требования к пространству данных сокращаются до 50%, но количество узлов, для которых записываются данные и четности, увеличилось в 5 раз, с 3 узлов для Hadoop 2.0 до 15 узлов для Hadoop 3.0. Поскольку избыточность основана на коррекции стирания Рида-Соломона, то, пока любые 10 из 15 узлов не смогли прочитать определенный набор блоков, этот набор блоков можно восстановить (максимально допустимый сбой для набора блоков составляет 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 узлов, прежде чем произойдет сбой. Для кодирования Рида-Соломона это можно сделать, эмулируя нулевые начальные блоки для «пропущенных» блоков.
Я думал, что добавлю некоторую вероятность к числу узлов в кластере.
Предположим, что частота отказов узлов составляет 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