Архитектура HBase

Компоненты

В основе архитектуры HBase лежат следующие компоненты:

  • Region Server. Обслуживает один или несколько регионов (Regions). Регион — это диапазон записей, которые хранятся вместе. Каждый регион обслуживается только одним Region-сервером. Region-сервер также называют HRegionServer. Region-сервер содержит несколько компонентов, некоторые из них работают поверх HDFS, используя последний как хранилище данных.

  • Master server. Основной сервер, отвечающий за управление HBase-кластером. По своим функциям Master-сервер схож с NameNode в HDFS. Master-сервер управляет распределением регионов между Region-серверами, осуществляет регистрацию регионов, и так далее. Master-сервер также называется HMaster. Вы можете развернуть несколько Master-серверов в кластере: один активный и один или более резервных (standby).

  • ZooKeeper. Специальный сервис для управления конфигурациями и синхронизации сервисов. Используется для координации действий между сервисами HBase.

Высокоуровневая архитектура HBase представлена на следующей схеме.

arch main dark
Архитектура HBase
arch main light
Архитектура HBase

Region Server

Region-сервер обслуживает несколько регионов (Regions), которые работают поверх HDFS. Каждый регион содержит строки, где ключи из одного диапазона принадлежат данному региону. Строки отсортированы в алфавитном порядке по ключам. Каждый регион имеет размер по умолчанию 256 МБ, а каждый Region-сервер может содержать примерно 1000 регионов.

ПРИМЕЧАНИЕ
Каждый регион определяется диапазоном ключей строк. Первый регион таблицы имеет диапазон, который начинается с пустого значения. Последний регион таблицы имеет диапазон, заканчивающийся пустым значением.
arch regions dark
Пример распределения ключей между регионами
arch regions light
Пример распределения ключей между регионами

Region-сервер управляет несколькими регионами и выполняет операции чтения/записи. Каждый Region-сервер включает следующие компоненты:

  • HFiles — основное хранилище данных в HBase. Данные физически хранятся на HDFS в специальном формате HFile и отсортированы по RowKey. Одной паре <Region, Column family> соответствует как минимум один HFIle.

  • MemStore — буфер на запись в памяти. Так как данные хранятся в HFile в отсортированном порядке, обновление HFile для каждой операции записи довольно дорого. Вместо этого данные при записи попадают в специальную область памяти MemStore, где накапливаются некоторое время. При наполнении MemStore до критического значения данные записываются в новый HFile. Данные сортируются в лексикографическом порядке перед сохранением в HFile.

    Один MemStore соответствует одной группе колонок (column family). По этой причине один регион может содержать несколько MemStore-буферов, так как каждый регион может содержать несколько групп колонок. Совокупность MemStore-буферов и всех HFiles, которые содержат данные одной группы колонок, называют хранилищем (Store).

  • BlockCache — кеш на чтение, который хранит часто читаемые данные в памяти, тем самым позволяя ускорить операции чтения. Данные, которые не используются долгое время, удаляются из BlockCache.

  • Write Ahead Log (WAL) — специальный лог-файл (также именуемый HLog), хранящийся в HDFS и прикрепленный к каждому Region-серверу. Данный файл используется, чтобы предотвратить возможные потери данных при сбоях MemStore. Все входящие операции записываются в данный файл перед выполнением. WAL-файл содержит данные, которые еще не были сохранены в перманентное хранилище, что позволяет восстановить данные после сбоя.

arch regionserver dark
Компоненты Region Server
arch regionserver light
Компоненты Region Server

Master server

Master server занимается мониторингом всех Region-серверов и следит за всеми изменениями метаданных в HBase-кластере. Его основные функции описаны ниже:

  • Управляет распределением регионов по Region-серверам и переопределяет их при восстановлении данных или во время процессов балансирования нагрузки.

  • Координирует работу Region-серверов аналогично тому, как NameNode управляет DataNode в HDFS.

  • Выполняет DDL-операции, позволяя создавать, удалять и обновлять таблицы.

  • Выполняет мониторинг всех Region-серверов в кластере, а также обеспечивает восстановление данных после сбоя с помощью ZooKeeper.

ZooKeeper

ZooKeeper координирует взаимодействие компонентов в HBase-кластере и выполняет следующие функции:

  • Проверяет доступность Region-серверов, получая от них heartbeat-сигналы. Если Region-сервер не посылает heartbeat-сигнал в ожидаемый интервал времени, Master-сервер получает уведомление и запускает автоматический процесс восстановления данных.

  • Обеспечивает резервные Master-сервера информацией о состоянии активного Master-сервера. Если активный Master-сервер не посылает heartbeat-сигнал для ZooKeeper, один из резервных Master-серверов получает соответствующее уведомление и становится активным.

  • Хранит расположение таблицы-каталога hbase:meta (прежнее название — .META.), где хранится список всех регионов в системе. Эта таблица хранит информацию о регионах в виде пар ключ/значение, где ключ — это комбинация полей <имя таблицы, начальный ключ региона, ID региона>, а значение — полная информация о данном регионе, включая путь к Region-серверу, где содержится данный регион.

Операции с данными

Препроцессинг

Когда клиент отправляет запрос на запись/чтение к HBase, клиенту необходимо получить адрес Region-сервера, который содержит регион с необходимыми данными. Все операции с данными в HBase начинаются со следующих шагов.

  1. Клиент получает расположение таблицы hbase:meta от ZooKeeper и сохраняет ее в собственный кеш.

  2. Из таблицы hbase:meta клиент запрашивает локацию Region-сервера, который содержит блок данных с определенными ключами строк. Эту информацию клиент также сохраняет в кеш.

  3. Клиент запрашивает необходимую информацию из полученного Region-сервера.

Для дальнейших обращений, клиент использует собственный кеш для получения местонахождения таблицы hbase:meta и пути к Region-серверу, используя ключи строк, считанные ранее. Клиент не обращается к таблице hbase:meta до тех пор, пока в таблице не обнаружены недостающие данные из-за перемещения или удаления региона. В этом случае клиент запрашивает информацию из таблицы hbase:meta и обновляет кеш.

Запись

После определения необходимого Region-сервера, типичные шаги при операциях записи в HBase выглядят следующим образом:

  1. HBase записывает данные в WAL (Write Ahead Log), функция которого — обеспечение отказоустойчивости.

  2. Данные копируются в MemStore, который служит оперативной памятью для HDFS DataNode. Выбор MemStore зависит от группы колонок, указанной в запросе.

  3. После помещения данных в WAL и MemStore, клиент получает подтверждение (ACK) о выполнении задачи.

  4. Далее при заполнении MemStore, HBase записывает все данные в HFile в сортированном виде.

ПРИМЕЧАНИЕ
Клиентские приложения не взаимодействуют напрямую с HFile, которые хранятся в HDFS.
write dark
Типичная операция записи
write light
Типичная операция записи

Чтение

После определения необходимого Region-сервера, типичные шаги при операциях чтения из HBase выглядят следующим образом:

  1. Выполняется поиск необходимых данных в BlockСache — пространство, где хранятся все недавно считанные пары ключ/значение.

  2. Если данные не найдены в BlockСache, поиск выполняется в MemStore, который хранит недавно записанные файлы, но которые еще не были записаны в HFiles.

  3. Если данные не найдены в MemStore, поиск выполняется в HFiles, которые хранятся в HDFS.

    ПРИМЕЧАНИЕ
    Так как каждый HFile содержит MemStore-снепшот, созданный в момент записи в HFile, данные всей запрашиваемой строки могут храниться в нескольких HFile. Таким образом, чтобы собрать данные всей строки, HBase считывает все HFile, которые могут содержать данные из запрашиваемой строки. Использование Bloom-фильтров помогает упростить этот процесс.
  4. После того, как поиск выполнен (вне зависимости, на каком из этапов был найден результат), данные записываются в BlockCache и возвращаются клиенту вместе с подтверждением (ACK) о выполнении задачи.

read dark
Типичная операция чтения
read light
Типичная операция чтения

Повышение производительности

Region split

Когда данные в регионе вырастают до некоторого критического размера, HBase выполняет разделения региона (Region split) — специальную процедуру, которая разделяет исходный регион на два дочерних. Затем об изменениях сообщается в Master-сервер.

Новые регионы управляются тем же Region-сервером до тех пор, пока Master-сервер не присвоит им новый Region-сервер (для балансировки нагрузки).

РЕКОМЕНДАЦИЯ
Чтобы избежать частых разделений регионов, можно установить границы регионов и увеличить их максимальный размер.
region split dark
Разделение регионов
region split light
Разделение регионов

HFile compaction

Поскольку данные в одном регионе могут храниться в нескольких HFile, HBase периодически объединяет их вместе, чтобы уменьшить количество обращений к диску, необходимое для одной операции чтения, и ускорить работу. Данная операция называется сжатием (compaction). Cуществует 2 типа сжатия:

  • Частичное сжатие (Minor compaction) — HBase выбирает несколько HFile и записывает их содержимое в один большой HFile. Это помогает оптимизировать использование дискового пространства. Данный процесс стартует автоматически и выполняется в фоновом режиме с низким приоритетом по сравнению с другими HBase-процессами. Для частичного сжатия HFile выбираются эвристическим методом.

    minor dark
    Частичное сжатие
    minor light
    Частичное сжатие
  • Полное сжатие (Major compaction) — HBase переписывает все HFile определенного Region-хранилища в один большой HFile. При этом также выполняется физическое удаление устаревших данных и данных, отмеченным флагом tombstone, что положительно сказывается на производительности при чтении.

    Полное сжатие запускается вручную или при срабатывании определенных условий (например, по таймеру). Этот тип имеет высокий приоритет и может значительно замедлить работу кластера, так как диски ввода-вывода и сетевой трафик могут быть перегружены. Таким образом, этот тип сжатия следует планировать во время низких пиковых нагрузок.

    major dark
    Полное сжатие
    major light
    Полное сжатие

Восстановление данных

HBase поддерживает автоматическое восстановление данных после различных сбоев. Типичный процесс восстановления включает следующие шаги:

  1. Если какой-либо из Region-серверов выходит из строя, ZooKeeper уведомляет об этом Master-сервер.

  2. Master-сервер распределяет все регионы вышедшего из строя Region-сервера между активными Region-серверами. При этом Master-сервер также распределяет WAL вышедшего из строя Region-сервера, который хранится в HDFS. Это необходимо для восстановления данных с вышедших из строя MemStore (которые более недоступны).

  3. Каждый Region-сервер обрабатывает WAL-файл, чтобы восстановить MemStore для каждой группы колонок из вышедшего из строя Region-сервера. Так как все данные записываются в WAL-файл в хронологическом порядке, обработка записей позволяет воссоздать все необходимые изменения, сохраненные в MemStores.

  4. Регионы продолжают работать с активными Region-серверами.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней