Что общего у Apache HBase с Google Bigtable, чем они отличаются и какую NoSQL-СУБД выбирать для практического использования.
Чем похожи NoSQL-хранилища для больших данных
Apache HBase часто называют Google BigTable для Hadoop, поскольку она обеспечивает аналогичные возможности и использует многие концепции этой облачной NoSQL-СУБД. В частности, именно Bigtable был выпущен в 2005 году, хотя был недоступен широкой публике до 2015 года. Apache HBase создан в 2008 году на основе публикации Google Bigtable: A Distributed Storage System for Structured Data. Из ключевых сходств между этими нереляционными СУБД можно отметить следующие:
- они обе относятся к категории NoSQL, не в полной мере поддерживая все ACID-требования к транзакциям, соединения и строгую типизацию столбцы. Впрочем, говорить о том, что HBase исключает возможность соединять таблицы и транзакционность, не совсем корректно. В частности, здесь мы писали про реализацию ACID, здесь – про соединения таблиц, а здесь – про регулярные выражения в Apache HBase. Для этого вместо стандартных SQL-запросов при работе с HBase приходится писать MapReduce-функции на Java или использовать инструменты стека SQL-on-Hadoop, такие как Apache Hive и Phoenix. Впрочем, Google Bigtable тоже не поддерживает язык запросов SQL.
- Обе СУБД могут обрабатывать значительные объемы данных в масштабе петабайт за счет поддержки линейного горизонтального масштабирования, а также обеспечивают высокую доступность за счет репликации данных и управление версиями.
- Будучи нереляционными СУБД, Apache HBase и Google Bigtable не содержат схемы данных, реализуя принцип «схема при чтении», а не «схема при записи», о чем мы говорили в этой статье.
- HBase и Bigtable предоставляют Java API, а также поддерживают ряд популярных языков программирования (Java, Python, C#, C++). Хотя полный список поддерживаемых языков отличается и HBase-подобный Java API в Bigtable тоже не полностью совпадает с оригиналом.
Несмотря на эти сходства, не стоит считать HBase полным аналогом Google BigTable для Hadoop: эти нереляционные СУБД имеют ряд отличий, что мы и рассмотрим далее.
Отличия Apache HBase от Google Bigtable
Хотя HBase можно рассматривать как своего рода Java-реализацию BigTable, которая добавляет аналогичную функциональные возможности в ядро Hadoop, эти СУБД имеют ряд специфических отличий. Прежде всего, Apache HBase является проектом с открытым исходным кодом, а Bigtable – это коммерческая разработка корпорации Google. Apache HBase бесплатен, а Bigtable — нет.
HBase реализует модель «семейство колонок» (wide column), тогда как Bigtable также поддерживает подход key-value подобно базе данных Redis, о которой мы говорили здесь.
HBase можно установить в любой среде с распределенной файловой системой Apache Hadoop (HDFS) в качестве базового хранилища данных, а Bigtable доступен только в виде облачного сервиса от Google. Изначально Bigtable был создан этой компанией для собственных нужд и до сих пор активно используется во многих сервисах Google, включая Search, Analytics, Maps и Gmail. Bigtable поддерживает обновленную технологию удаленного вызова процедур gRPC, а Apache HBase – нет, но зато имеет API Thrift и REST.
Хотя BigTable как полностью управляемая облачная NoSQL-СУБД имеет совместимый с HBase клиент, на практике при создании семейства столбцов нельзя настроить размер блока или метод сжатия ни с помощью оболочки HBase, ни с помощью API этой NoSQL-СУБД. BigTable управляет размером блока и сжатием автоматически, используя собственные методы сжатия для всех данных. Также BigTable требует, чтобы имена семейств столбцов следовали регулярному выражению [_a-zA-Z0-9] [-_. A-zA-Z0-9] *. Поэтому при импорте данных в BigTable из HBase, нужно сначала изменить имена семейств, чтобы следовать этому шаблону. Также некоторые методы, доступные в HBase, не поддерживаются в BigTable. В частности, возможно удаление определенной версии конкретного столбца на основе его временной метки, но удаление всех значений с определенной временной меткой в заданном семействе столбцов или строке не поддерживается. Зато операции добавления в Bigtable полностью атомарны как для чтения, так и для записи: клиент никогда не прочитает частично примененную операцию Append. Bigtable хранит временные метки в микросекундах, а HBase — в миллисекундах.
HBase удаляет маскированные put-операции, а Bigtable не делает этого после удаления, когда put-запросы отправляются после delete-запросов. Это означает, что в Bigtable запрос на запись, отправленный в ячейку, не зависит от ранее отправленного запроса на удаление в ту же ячейку.
Apache HBase поддерживает скрипты на стороне сервера, например, триггеры, и, благодаря открытому исходному коду, предоставляет больше возможностей для расширений. Bigtable не поддерживает сопроцессоры и распределенные процедуры.
Вместо концепции регионов для распределения табличных данных Bigtable использует планшеты (tablet) и управляет ими автоматически. Apache HBase обеспечивает немедленную согласованность данных и согласованность в конечном счете (eventual consistency), тогда как Bigtable – немедленную согласованность только для одного кластера, и согласованность в конечном счете для двух или более реплицированных кластеров.
Наконец, рассматриваемые СУБД используют различные модели обеспечения безопасности: в HBase есть ACL-списки и другие методы, а Bigtable работает с IAM-сервисом идентификации и управления доступом от Google Cloud (Identity and Access Management).
Администрирование кластера HBase
Код курса
HBASE
Ближайшая дата курса
18 ноября, 2024
Продолжительность
32 ак.часов
Стоимость обучения
96 000 руб.
Подводя итог сравнению рассматриваемых NoSQL-хранилищ данных, оценим их по следующим критериям:
- краткое описание;
- модель хранения данных;
- зрелость (год выпуска);
- открытость исходного кода;
- язык реализации;
- поддерживаемые операционные системы;
- поддерживаемые языки разработки;
- схема и типизация данных;
- поддержка ANSI SQL;
- язык запросов, API и протоколы доступа к данным;
- поддержка хранимых процедур и триггеров;
- методы партиционирования и репликации данных;
- поддержка вычислительной модели MapReduce;
- поддержка внешних ключей;
- индексация данных;
- поддержка ACID-требованиям к транзакциям и методы обеспечения консистентности данных;
- хранение данных в оперативной памяти;
- политики безопасности;
- варианты использования.
Оформим это сравнение в виде таблицы.
Критерий |
Apache HBase |
Google Bigtable |
краткое описание |
Проект фонда Apache Software Foundation, колоночно-ориентированная NoSQL-СУБД, которая работает поверх HDFS и обеспечивает возможности Google BigTable для Hadoop |
Сервис СУБД для больших данных от Google |
модель хранения данных |
Wide column store |
· Key-value store · Wide column store |
зрелость (год выпуска) |
2008 |
Существует с 2005 года, для общего доступа с 2015 |
открытость исходного кода |
Открытый исходный код (лицензия open source от Apache 2.0) |
Нет, коммерческий продукт |
язык реализации |
Java |
неизвестен |
поддерживаемые операционные системы |
Linux, Unix и Windows с Cygwin (UNIX-подобная среда и CLI для интеграции приложений, данных и ресурсов Windows с приложениями, данными и ресурсами UNIX) |
Операционные системы в Google Cloud |
поддерживаемые языки разработки |
C, C#, C++, Groovy, Java, PHP, Python, Scala |
C#, C++, Go, Java, JavaScript (Node.js), Python |
схема и типизация данных |
Изначально нет схемы, возможна поддержка пользовательской схемы данных. Можно реализовать собственные типы данных и AVRO (бинарный строковый формат) |
Изначально нет схемы |
поддержка ANSI SQL |
нет |
нет |
язык запросов, API и протоколы доступа к данным |
Собственный язык запросов, Java API, RESTful HTTP API, Thrift |
gRPC, HappyBase (Python-библиотека), Java API совместимый с HBase |
поддержка хранимых процедур и триггеров |
Да, хранимые процедуры в виде Java-сопроцессоров |
Нет |
методы партиционирования и репликации данных |
Шардирование, репликация с несколькими источниками и репликация источник-реплика |
Шардирование, внутренняя репликация в Colossus и региональная репликация между двумя кластерами в разных зонах |
поддержка вычислительной модели MapReduce |
Да |
Да |
поддержка внешних ключей |
нет |
|
индексация данных |
Нет вторичной индексации |
|
поддержка ACID-требованиям к транзакциям и методы обеспечения консистентности данных |
Согласованность данных в конечном счете, ACID на уровне строки (в миллионах столбцов) |
Немедленная согласованность для одного кластера, согласованность в конечном счете для двух или более реплицированных кластеров |
хранение данных в оперативной памяти |
поддерживается |
нет |
политики безопасности |
Права доступа для пользователей, групп и ролей на основе Google IAM |
|
варианты использования |
Управление системами обмена сообщениями, хранение огромных объемов быстро изменяющихся данных. Подходит для аналитики больших данных в реальном времени |
Аналитика больших данных в реальном времени с использованием других сервисов Google Cloud |
Таким образом, выбор между Apache HBase и Google BigTable сводится к поиску компромисса между стоимостью развертывания и эксплуатации: коммерческую облачную СУБД легче взять в работу, переложив заботы об администрировании кластера на плечи Cloud-провайдера. Пример такого сценария мы рассматривали в этом кейсе. Однако, если необходимы специфические расширения и тонкая настройка хранилища данных в своей инфраструктуре с возможностью выполнить это силами собственных ИТ-специалистов, HBase будет более оптимальным вариантом.
Узнайте больше подробностей про администрирование и эксплуатацию Apache HBase и других компонентов экосистемы Hadoop для хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники