HBase
Apache HBase — это распределённая, масштабируемая, отказоустойчивая нереляционная база данных (NoSQL), работающая поверх распределённой файловой системы Hadoop (HDFS). HBase построена на модели хранения данных наподобие Bigtable, разработанной компанией Google, и предоставляет произвольный доступ к большим объёмам структурированных и полуструктурированных данных в режиме реального времени. Относится к классу столбцовых баз данных (column-family stores), поддерживает согласованность на уровне строк (strong consistency).
История
Происхождение
Идея HBase возникла в 2006 году в недрах компании Powerset (стартап, занимавшийся семантическим поиском), когда инженеры искали способ хранения и обработки веб-контента объёмом в десятки терабайт. В то время HDFS отлично справлялась с пакетной обработкой (MapReduce), но не обеспечивала произвольного чтения/записи. Команда Powerset создала прототип, который затем развивался в рамках проекта Apache Hadoop. В 2007 году HBase стала подпроектом Apache Hadoop, а в 2010 году вышла в статус главного проекта Apache Software Foundation.
Ранние версии
Первая стабильная версия — HBase 0.20.0 — была выпущена в 2009 году. Она поддерживала базовые операции: Put, Get, Scan, Delete, а также работала с HDFS как единственным хранилищем. В 2011 году с версией 0.90 появилась поддержка регионов (regions) и автоматического разделения таблиц (auto-sharding).
Современное развитие
Начиная с версии 2.0 (2017 год) в HBase появились: поддержка MVCC (многоверсионное управление параллелизмом), процедуры для плавного перераспределения регионов (Mob, Offheap), улучшенная репликация. Последняя стабильная на 2025 год версия — HBase 3.0.0 (релиз 2021 года) — переведена на Java 11, оптимизирована работа с памятью, добавлены асинхронные RPC.
Архитектура
Основные компоненты
HBase состоит из следующих ключевых служб:
- HMaster — управляющий узел, отвечающий за балансировку регионов, обработку DDL-операций (создание/удаление таблиц) и координацию RegionServer-ов. При отказе HMaster перезапускается через ZooKeeper.
- RegionServer — рабочие узлы, которые обслуживают один или несколько регионов (логические фрагменты таблицы). Выполняют операции чтения/записи для клиентов.
- ZooKeeper — координационный сервис, отслеживающий состояние кластера (кто является активным HMaster, местоположение каталоговых таблиц). Обязательный компонент HBase.
Модель хранения
Данные организуются в таблицы, которые разделяются на регионы по диапазону ключей строк (row key). Каждый регион обслуживается одним RegionServer-ом. Регионы хранятся на HDFS в виде файлов HFile (специальный формат на основе SSTable). При записи данные сначала попадают в Write-Ahead Log (WAL), а затем в буфер в памяти (MemStore). При заполнении MemStore данные сбрасываются на диск в новый HFile. Для чтения HBase сканирует как MemStore, так и HFile.
Структура таблицы:
- Row Key — уникальный идентификатор строки (байты, до 64 КБ), по которому осуществляется произвольный доступ.
- Column Family (семейство столбцов) — группа столбцов, логически объединённых (например,
info,data). Семейства столбцов определяются при создании таблицы и редко изменяются. - Column Qualifier (квалификатор) — имя столбца внутри семейства.
- Timestamp (временная метка) — версия значения.
- Value — непосредственно данные.
Репликация и отказоустойчивость
HBase использует репликацию регионов через HDFS (каждый блок HDFS реплицируется на 3 узла по умолчанию). Также поддерживается асинхронная репликация между кластерами (cross-cluster replication). Для восстановления после сбоя HMaster запускает процедуру split log — перераспределение WAL между RegionServer-ами.
Классификация
По типу хранения
- Распределённая столбцовая база данных (column-family store). В отличие от реляционных баз, HBase хранит данные по семействам столбцов, а не построчно. Это позволяет эффективно читать/писать отдельные столбцы без загрузки всей строки.
По модели данных
- Key-Value + колонки: каждая ячейка (row key + column family + column qualifier + timestamp) представляет собой одну запись.
По требованиям к транзакциям
- ACID на уровне строк: поддержка атомарности и изоляции на уровне одной строки. Многорядные транзакции не поддерживаются (без внешнего координатора).
Характеристики
Преимущества:
- Горизонтальная масштабируемость: добавление новых узлов автоматически распределяет регионы.
- Автоматическое шардирование: разделение большого региона на меньшие при переполнении.
- Низкая задержка: произвольное чтение/запись за 5–50 мс (зависит от нагрузки и размера кластера).
- Согласованность: все операции записи в одну строку выполняются последовательно (сильная согласованность).
Ограничения:
- Отсутствие поддержки SQL (если не использовать Phoenix — надстройку с SQL-совместимостью).
- Сложность администрирования: требуется настройка и поддержка Hadoop, ZooKeeper, HDFS.
- Ограничения на размер значения: в одном хранилище рекомендуется хранить значения до 10 МБ.
- Не подходит для OLAP-запросов с полнотекстовым поиском: HBase не индексирует по содержимому столбцов (только по ключам строк).
Применение
HBase широко используется в средах, где требуется массивная обработка данных с возможностью случайного доступа:
- Интернет вещей (IoT) — хранение и анализ потоковых данных от миллионов устройств (например, показания сенсоров).
- Социальные сети — хранение лайков, комментариев, действий пользователей в реальном времени.
- Финансовый сектор — учёт транзакций, запись истории котировок.
- Телеком — хранение CDR-записей (детализация звонков).
- Хранение больших текстовых корпусов — для поисковых систем и систем NLP.
Примеры известных пользователей:
- Facebook (организация Meta признана экстремистской и запрещена в РФ) использовал HBase для хранения сообщений (Facebook Messages) в 2011–2013 годах, позднее перешёл на собственные решения.
- Twitter (социальная сеть заблокирована в РФ) использовал HBase для хранения пользовательских данных и твитов, затем мигрировал на Manhattan (собственная распределённая БД).
- Yahoo! (организация, признанная иноагентом в РФ? нет, таких статусов у Yahoo! нет) — использовали для хранения графа пользовательских интересов.
Интересные факты
- HBase является основой для Apache Phoenix — реляционного слоя, позволяющего выполнять SQL-запросы через HBase.
- Многие крупные компании (например, Alibaba) разработали собственные форки HBase с улучшенной производительностью.
- В состав HBase входит встроенная поддержка асинхронного вызова через протокол Thrift и REST API.
- По состоянию на 2025 год HBase остаётся одной из немногих NoSQL-систем, обеспечивающих сильную согласованность на уровне строк.
Критика
- Высокое потребление ресурсов: HBase требует большого объёма оперативной памяти и дискового пространства из-за двойной записи (WAL + MemStore).
- Сложность настройки: для достижения стабильной производительности требуется тонкая настройка параметров (размер блоков, коэффициенты репликации, частота сброса MemStore).
- Проблемы с горячими регионами: если ключи строк распределены неравномерно, одни RegionServer-ы могут перегружаться, а другие простаивать. Требуется продуманный дизайн ключей (salt-префиксы, хэширование).
- Отсутствие нативной поддержки полнотекстового поиска — для индексации содержимого нужны дополнительные инструменты (например, Solr).
Источники
- Apache HBase Reference Guide, версия 3.0.0
- George, L. (2011). HBase: The Definitive Guide. O’Reilly Media.
- «Bigtable: A Distributed Storage System for Structured Data» — Chang et al., 2006 (OSDI).
- Сообщения в списке рассылки Apache HBase.
- Документация Apache Hadoop и ZooKeeper.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →