Массовая загрузка данных в HBase
В HBase типовая последовательность записи данных включает следующие шаги: WAL → MemStore → HFiles. Это работает хорошо в обычном режиме, но при загрузке очень большого объема данных такая последовательность ведет к значительному снижению производительности. К основным проблемами относятся следующие:
-
Повышенные требования к объему области памяти MemStore и журнала WAL.
-
Увеличение очередей на операции сжатия (compaction) и очистки (flush).
-
Как следствие, увеличенная задержка, приводящая к нарушению договоренностей о качестве обслуживания (SLA).
Массовая загрузка (bulk loading) направлена на решение этих проблем. Она представляет собой процесс подготовки и загрузки данных напрямую в файлы HFiles в системе HDFS, избегая стандартные стадии записи. Такой способ позволяет вносить в базу большие объемы данных гораздо быстрее. Он может быть полезен при загрузке данных из внешних источников или для последовательной загрузки партий данных, образуемых в процессе выполнения длительных автоматических ночных задач.
Массовая загрузка — это процесс ETL, включающий следующие три основные стадии:
-
Извлечение (Extract). На этой стадии процесс извлекает данные из внешнего источника и сохраняет его в HDFS. Источниками могут быть содержимое другой базы данных (database dump) или файлы журналов в формате простого текста, CSV или другого формата. HBase не управляет этой частью процесса.
-
Преобразование (Transform). На этой стадии процесс преобразует данные в формат HFile в соответствие со структурой предварительно созданной таблицы HBase: в каждом регионе он создает один HFile. Данные отсортированы в алфавитном порядке и разделены по файлам с помощью заданных точек деления (split points). Этот шаг обычно требует запуска задания MapReduce, которое и выполняет разделение данных на партиции, сортировку, генерацию класса вида ключ/значение, обеспечение требований к формату HFile и другие операции.
-
Загрузка (Load). На этой стадии процесс перемещает данные в таблицу HBase, обеспечивая загрузку каждого файла в соответствующий регион с помощью Region Server, который обслуживает этот регион.
Существует много способов настройки массовой загрузки данных в HBase, включая использование встроенных задач MapReduce, собственных (custom) задач MapReduce, Spark и других.