Блеск и нищета Erasure Coding в Apache Hadoop 3: опыт Одноклассников c HDFS

обучение Apache Hadoop курсы примеры, Apache Hadoop для инженеров данных, дата-инженер Apache Hadoop HDFS, администрирование Apache Hadoop HDFS, Erasure Coding HDFS примеры, обучение большим данным, администрирование кластера Hadoop, обучение администратор Hadoop, Школа Больших Данных Учебный Центр Коммерсант

Мы уже писали, что Apache Hadoop 3.3.1 поддерживает технологию кодирования со стиранием (Erasure Coding, EC), которая экономит место на жестком диске по сравнению с репликацией. Однако, беспечное применение этой новой фичи может обернуться настоящей катастрофой. Кейс соцсети «Одноклассники» от ведущего разработчика Дениса Ефарова, представленный на конференции Smart Data для инженеров данных в октябре 2021 года.

Что такое Erasure Coding и зачем это нужно

Напомним, кодирование со стиранием для HDFS, введенное в Apache Hadoop 3.3.1 снижает накладные расходы на хранение данных до 50% независимо от коэффициента репликации. Это достигается с помощью алгоритма Рида-Соломона, позволяющего чередовать и разделять логически последовательные данные файла на более мелкие блоки, сохраняя их на разных дисках недорогого RAID-массива. 

Из-за особенностей этой технологии, экономия места в HDFS повышает расходы на кластер Apache Hadoop по следующим причинам:

  • дополнительное потребление ресурсов ЦП на кодирование/декодирование данных на клиентах HDFS и узлах Hadoop-кластера;
  • увеличение нагрузки на сеть из-за передачи данных;
  • зависимость количества узлов данных в кластере Hadoop от ширины полосы EC, равной числу блоков файловой системы;
  • избыточность количество стоек в кластере, чтобы в среднем каждая из них содержала количество блоков не больше числа блоков четности EC, чтобы обеспечить отказоустойчивость при чтении и записи файлов, выполняемых вне стойки. 

По сути, все эти недостатки устраняются дополнительными вложениями в кластер Apache Hadoop. Поэтому если инвестиции в инфраструктуру – не проблема, Erasure Coding – отличный способ сэкономить место на жестких дисках. Именно так размышляла команда дата-инженеров соцсети Одноклассники, когда в первой половине 2019 года произошел резкий скачок увеличения количества данных: +10% за 2 месяца. Чтобы существующая инфраструктура Hadoop могла обрабатывать десятки ТБ в день и хранить 150 петабайт исторических данных за 10 лет в Apache Hadoop, дата-инженеры Одноклассников (ОК) решили использовать Erasure Coding. Что из этого вышло, мы рассмотрим далее.

EC в Одноклассниках: настоящие проблемы и их последствия

Внедрив в июне 2019 года Erasure Coding в свои кластера Apache Hadoop, дата-инженеры ОК отметили первые успехи этой технологии, которая позволяла экономить около 5 ТБ в сутки. Однако, в ноябре 2019 года впервые возникла проблема с чтение файла формата Parquet из HDFS: обрыв записи, ошибка в методе org.apache.parquet.hadoop.ParquetFileReader.readFooter(). Исправив эту единичную проблему вручную, ровно через 6 месяцев дата-инженеры ОК столкнулись с ней снова. После сканирования папков и файлов, стало понятно подобные баги характерны только для Parquet-файлов в Hadoop 3, которые отличаются EC-полосой размером 1 МБ и идут ровно через 6 блоков.

Суть ошибки оказалась связана с алгоритмом Рида-Соломона при восстановлении поврежденных блоков, которая зависит от порядка индексов. Обнаружить этот баг оказалось непросто из-за отсутствия исключений при ошибке в методе org.apache.hadoop.io.erasurecode.rawcoder.RSRawDecoder.generateDecodeMatrix(int[] erasedIndexes). Из-за несоответствия индексов блок B0′ выглядит как результат валидного восстановления блока B0 по размеру и соответствию другим блоками, но не является им!

HDFS Erasure Coding Hadoop 3
Кодирование и декодирование Erasure Coding в Hadoop 3

Эта проблема связана с главным достоинством EC – экономией места в HDFS. При кодировании размер данных уменьшается. Но при декодировании, т.е. восстановлении данных – наоборот, растет! Но места больше не становится, напротив, его не хватает. Поэтому при декодировании в EC следует, прежде всего, проверить корректность оригинала. Для этого дата-инженеры ОК вручную реализовали восстановление данных по алгоритму Рида-Соломона с помощью Java API, который позволяет получить отдельные блоки. На восстановление поврежденных данных ушел почти год, с августа 2020 по сентябрь 2021.

Так из-за неаккуратного применения Erasure Coding для хранения данных повреждено оказалось больше 4 000 000 файлов, 10% из которых имели поврежденные резервные копии. Из них удалось восстановить 9.9%, 0.1% (40 000 файлов) оказались утеряны навсегда. Общие потери данных составили около 115 ТБ. Поэтому золотое правило каждого администратора насчет бэкапов остается неизменным: они должны быть. Всегда. Причем в максимально простой форме, без вычислений и в другой физически и алгоритмически системе. Желательно в структурированных форматах, которые легче проверить на корректность.

Узнайте больше про администрирование и эксплуатацию Apache Hadoop для аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://smartdataconf.ru/person/denis-efarov/
  2. https://assets.ctfassets.net/oxjq45e8ilak/3vPN1K82TYTSaEqpXMpMt7/6332940cb1f21efc6cd7cb3bf88dbd6d/Hadoop_3-_Erasure_Coding_Catastrophe.pdf
  3. https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html
  4. https://karthiksharma1227.medium.com/hdfs-erasure-coding-ec-4ef151367bb5
Поиск по сайту