Слышал ли про erasure coding в HDFS?

Ответ

Да, Erasure Coding (EC) — это метод обеспечения отказоустойчивости в HDFS, альтернативный классической репликации. Вместо хранения полных копий данных (реплик) EC разбивает данные на фрагменты, кодирует их с добавлением избыточных блоков четности. Это позволяет восстановить данные при потере части блоков.

Сравнение с репликацией (factor=3):

  • Репликация: Хранит 3 полные копии. Эффективность использования диска: 33%.
  • Erasure Coding (схема RS-6-3): Разбивает данные на 6 блоков, добавляет 3 блока четности. Позволяет пережить потерю любых 3 блоков. Эффективность использования диска: 6/(6+3) = 67%.

Преимущества EC:

  • Значительная экономия дискового пространства (часто в 2 раза и более) при сопоставимом уровне отказоустойчивости.
  • Идеально подходит для холодных или редко читаемых данных (архивы, бэкапы, большие наборы данных для ML).

Недостатки / Ограничения EC:

  • Вычислительные накладные расходы: Кодирование и декодирование требуют CPU.
  • Латентность: Восстановление данных при отказе и чтение (особенно при деградации) медленнее, чем при чтении локальной реплики.
  • Не подходит для горячих данных или файлов, которые часто перезаписываются (EC в HDFS поддерживает только append).

Настройка в HDFS:

# Установка политики EC для директории
hdfs ec -setPolicy -policy RS-6-3-1024k -path /data/archive

Ответ 18+ 🔞

Блин, слушай, про эту вашу магию с Erasure Coding (EC) в HDFS. Ну это ж просто ёперный театр, если честно. Вместо того чтобы тупо плодить копии файлов, как кроликов, они данные на куски режут, потом ещё какую-то математическую хуйню с чётностью добавляют. И если часть блоков накрылась медным тазом, данные всё равно можно собрать обратно, как конструктор. Умно, чё.

Если сравнивать с классикой, где реплик три штуки:

  • Репликация (factor=3): Хранишь три полных клона одного и того же файла. Эффективность по дискам — просто пиздец какая низкая, 33%. Остальное — избыточность. Жрёт место, как не в себя.
  • Erasure Coding (схема RS-6-3): А тут берут данные, дробят на 6 кусков, и сверху ещё 3 блока этой самой «чётности» лепят. Потеряй хоть три любых блока — всё равно соберёшь. А места жрёт уже 67%. Почти в два раза экономичнее! Ни хуя себе, да?

Чем это, блядь, хорошо:

  • Экономия дисков — овердохуища. Серьёзно, в два, а то и больше раз. При этом надёжность почти такая же.
  • Идеальная фишка для холодного барахла, которое лежит мёртвым грузом. Архивы, бэкапы, какие-нибудь датасеты для ML, которые раз в год достают. Для этого — самое то.

Но и подводных камней, ёпта, хватает:

  • Процессор грузит по чёрному. Чтобы эту всю ебушки-воробушки с кодированием и раскодированием провернуть, нужны вычислительные мощности. Не просто так файлы перекладывать.
  • Тормозит конкретно. Если блоки посыпались и надо данные восстанавливать — это не быстро. Да и просто читать файл, когда кластер уже немного кривой, будет медленнее, чем взять готовую реплику с ближайшей машины.
  • Для горячих данных — полная хуйня. Если файлы постоянно перезаписываешь, EC — не твой вариант. В HDFS он в основном только для добавления данных работает (append). Так что, чувак, думай головой, куда это применять.

Как воткнуть эту дичь в HDFS:

# Установка политики EC для директории
hdfs ec -setPolicy -policy RS-6-3-1024k -path /data/archive

Вот и вся настройка. Сказал системе: «Всё, что в /data/archive кладёшь — кодируй по такой-то схеме». И пошло-поехало. Главное — не нагородить там, где скорость критична, а то волнение ебать потом будет, когда запросы висеть начнут.