Apache HBase

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:18, 29 декабря 2018.
Apache HBase
Hbase logo with orca.png
Разработчики: Apache Software Foundation
Выпущена: 28 марта 2008 года
Постоянный выпуск: 1.1.0.1 / 21 мая 2015 год
Состояние разработки: Активный
Написана на: Java
Операционная система: Кросс-платформенное
Платформа: Java Virtual Machine
Тип ПО: распределенная БД
Лицензия: Apache License 2.0
Веб-сайт hbase.apache.org

Apache HВase — это нереляционная, распределенная база данных с открытым исходным кодом, созданная по аналогии с BigTable от Google и написаная на Java[Источник 1]. Она разработана как часть проекта Hadoop (входящего в состав Apache Software Foundation) и запускается на кластере HDFS (Hadoop Distributed Filesystem), предоставляя схожие с BigTable возможности. То есть, она обеспечивает отказоустойчивый способ хранения больших объемов разреженных данных.

HBase линейно масштабируется для обработки огромных наборов данных с миллиардами строк и миллионов столбцов и легко объединяет источники данных, которые используют множество различных структур и схем. HBase интегрирован с Hadoop и без проблем работает вместе с другими механизмами доступа к данным через YARN.
BigTable - это дизайн для таблиц, для которых существует 2 принципа:

  1. Принцип 1 - на всю таблицу есть одно индексное поле, называемое row key (аналог primary key).
  2. Принцип 2 - данные во всех остальных полях не индексируются, таблица может иметь сколько угодно полей, добавление нового поля - затрагивает только отдельные row.


История

Проект HBase был запущен двумя работниками компании Powerset, Чедом Уолтерсом и Джимом Келлерманом, для обработки больших объёмов данных для создания поисковой системы на естественном языке[Источник 2]. Для начала Майк Кафарелла, в феврале 2007 года, написал заготовку кода системы, а дальнейшей разработкой которой занимался Джим Келлерман. Первая версия HBase была включена в поставку Hadoop 0.15.0 в октябре 2007 года. А уже в мае 2010 года система HBase перешла из категории подпроектов Hadoop в категорию проектов верхнего уровня, а именно, Apache. К числу постоянных пользователей HBase относятся Adobe, StumbleUpon, Twitter, группы Yahoo! и также Facebook (в ноябре 2007 года) для создания новой платформы обмена сообщениями.
На сегодняшний день проект имеет большой приоритет в Apache и вызывает значительный интерес.

Описание

Apache HВase имеет такие свойства[Источник 3], как:

  • HBase построен на платформe Apache Hadoop;
  • для хранения данных используется HDFS;
  • Map Reduce процессы могут быть использованы для загрузки большого объема данных;
  • на этапе Reduce выполняется загрузка данных в таблицу;
  • Reduce процесс выполняется на соответствующем region server — происходит исключительно локальная запись данных;
  • парадигму BigTable, развивающийся в рамках Apache Hadoop, реализует HBase;
  • данные хранятся в Hadoop Distributed File System.

Работа в Apache Hbase

Apache HBase обеспечивает случайный доступ в реальном времени к данным в Hadoop[Источник 4]. Он был создан для размещения очень больших таблиц, что делает его отличным выбором для хранения многостраничных или разреженных данных. Пользователи могут запрашивать HBase в определенный момент времени, делая запросы «воспоминания» возможными. Эти следующие характеристики (см. таблица 1) делают HBase отличным выбором для хранения полуструктурированных данных, таких как данные журнала, а затем очень быстро предоставляют эти данные пользователям или приложениям, интегрированным с HBase.

Таблица 1. Характеристика Apache HВase.
Характеристика Выгода
Отказоустойчивость
  • репликация через центр обработки данных;
  • атомные и согласованные операции на уровне строк;
  • высокая доступность благодаря автоматическому отказоустойчивости;
  • автоматическая балансировка и балансировка таблиц.
Быстрота
  • поиск в реальном времени;
  • кэширование в памяти через кеш-память блока и фильтры;
  • обработка на стороне сервера через фильтры и сопроцессоры.
Годность к потреблению
  • модель данных поддерживает широкий спектр вариантов использования;
  • экспорт показателей через плагины File и Ganglia;
  • легкий API Java, а также API-интерфейс шлюза и REST-шлюза.

Предприятия используют хранилище с низкой задержкой Apache HBase для сценариев, которые требуют анализа в реальном времени и табличных данных для приложений пользователя. Одна компания, предоставляющая услуги веб-безопасности, поддерживает систему, ежедневно принимающую миллиарды трасс событий и журналов активности с настольных компьютеров своих клиентов. А программисты компании могут тесно интегрировать свои решения безопасности с HBase. Другая компания предоставляет данные по запасам на фондовом рынке, которые пользователи запрашивают более 30 000 раз в секунду, при этом SLA составляет всего несколько миллисекунд. Apache HBase обеспечивает сверхбыстрый доступ к огромному быстро изменяющемуся хранилищу данных.

Как работает Apache HВase

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

Серверы ZooKeeper и HMaster предоставляют информацию о топологии кластера, доступной для клиентов. Клиенты подключаются к ним и загружают список RegionServers, то есть список регионов, содержащихся в RegionServers, и диапазонах ключей, размещенных в регионах. Клиенты знают, где какая-то часть данных находится в HBase и могут напрямую связываться с RegionServer без центрального координатора.

RegionServers включают memstore для кэширования часто используемых строк в памяти. При желании пользователи могут хранить строки вне кучи, кэшируя гигабайты данных и сводя к минимуму время для сбора лишних и ненужных данных.

Apache HBase обеспечивает высокую доступность несколькими способами:

  • высокодоступная информация топологии кластера через производственные развертывания с несколькими экземплярами HMaster и ZooKeeper;
  • распределение данных по многим узлам означает, что потеря одного узла влияет только на данные, хранящиеся на этом узле;
  • высокодоступная HBase позволяет хранить данные с гарантией, что потеря одного узла не приведет к потере доступности данных;
  • формат HFile хранит данные непосредственно в HDFS. HFile можно читать или записывать с помощью Apache Hive, Apache Pig, MapReduce и Apache Tez, позволяя глубокую аналитику на HBase без перемещения данных.

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

Производительность Apache Hbase заключается в:

  • 7 server cluster (16Gb RAM, 8x core CPU, 10K RPM HD);
  • таблица из 3 миллиардов rows, от 1 до 5 колонок;
  • размер каждого row — около 300 байт;
  • 300 параллельных запросов;
  • средняя скорость чтения 18ms, записи - 8ms.

Для примера возьмем простой кластер из семи нодов, нода — это 16Гб оперативной памяти, 10К RPM (RPM (Rounds Per Minute - "обороты в минуту")- это скорость вращения шпинделя жесткого диска; 10К - это скорость жесткого диска, т.е. 10К - 10.000 оборотов в минуту и чем выше скорость диска, тем быстрее будет работать вся система в целом). Таблица из трех миллиардов записей, каждая запись это, к примеру, 3-5 полей. И если запустить тест на 300 запросов в секунду на запись и на чтение, чтение будет занимать примерно 18 миллисекунд, запись —— быстрее, примерно 8 миллисекунд. Такой производительности на, например, MySQLе добиться невозможно. В HBase это работает.

Модели данных

Приложения хранят данные в таблицах, состоящих из строк и столбцов (см. рисунок 1). Для ячеек таблицы (пересечения строк и столбцов) действует контроль версии[Источник 5]. По умолчанию в качестве версии используется временная метка, автоматически назначаемая HBase на момент вставки. Содержимое ячейки представляет собой неинтерпретируемый массив байтов.

Hbase — это распределенная, колоночно-ориентированная, мультиверсионная база типа «ключ-значение». Данные организованы в таблицы, проиндексированные первичным ключом, который в Hbase называется RowKey. Для каждого RowKey ключа может храниться неограниченны набор атрибутов (или колонок)[Источник 6].

Колонки организованны в группы колонок, называемые Column Family. Как правило в одну Column Family объединяют колонки, для которых одинаковы паттерн использования и хранения.

Для каждого атрибута может храниться несколько различных версий. Разные версии имеют разный timestamp.

Записи физически хранятся в отсортированном по RowKey порядке. При этом данные соответствующие разным Column Family хранятся отдельно, что позволяет при необходимости читать данные только из нужного семейства колонок.

При удалении определённого атрибута физически он сразу не удаляется, а лишь маркируется специальным флажком tombstone. Физическое удаление данных произойдет позже, при выполнении операции Major Compaction.

Атрибуты, принадлежащие одной группе колонок и соответствующие одному ключу физически хранятся как отсортированный список. Любой атрибут может отсутствовать или присутствовать для каждого ключа, при этом если атрибут отсутствует — это не вызывает накладных расходов на хранение пустых значений.

Список и названия групп колонок фиксирован и имеет четкую схему. На уровне группы колонок задаются такие параметры как time to live (TTL) и максимальное количество хранимых версий. Если разница между timestamp для определенно версии и текущим временем больше TTL — запись помечается к удалению. Если количество версий для определённого атрибута превысило максимальное количество версий — запись также помечается к удалению.

Рисунок 1 – Модель данных

Модель данных Hbase можно запомнить как соответствие ключ значение:
<table, RowKey, Column Family, Column, timestamp> -> Value

Поддерживаемые операции

Список поддерживаемых операций в HBase весьма прост. Поддерживаются 4 основные операции:

  1. Put: добавить новую запись в HBase . Timestamp этой записи может быть задан руками, в противном случае он будет установлен автоматически как текущее время.
  2. Get: получить данные по определенному RowKey. Можно указать Column Family, из которой будем брать данные и количество версий которые хотим прочитать.
  3. Scan: читать записи по очереди. Можно указать запись с которой начинаем читать, запись до которой читать, количество записей которые необходимо считать, Column Family из которой будет производиться чтение и максимальное количество версий для каждой записи.
  4. Delete: пометить определенную версию к удалению. Физического удаления при этом не произойдет, оно будет отложено до следующего Major Compaction.

Недостатки и достоинства Apache HBase

Недостатки Apache HBase

  • около 1% запросов работают больше среднего (порядка 300ms);
  • возможность индексировать только по одному полю (row key);
  • нестабильность: в последней самой производительной версии возможна потеря данных.

Достоинства Apache HBase

  • HBase поддерживает лексикографическое упорядочение данных по ключам строк, при этом диапазон строк для таблицы динамически секционируется, наличие всегда отсортированных ключей строк может служить аналогом индекса первичного ключа, применяемого в реляционных базах данных;
  • HBase может иметь неограниченное число столбцов, сгруппированных в наборы под названные column families (семейства столбцов): данные хранятся по столбцам, при этом нет необходимости хранить значения, если они равны нулю, поэтому HBase хорошо подходит для разреженных наборов данных.;
  • HBase предоставляет обширный набор API-функций, таких как функция Delete, удаляющая значение атрибута любого ключа, функция DeleteColumn, удаляющая весь столбец, и функция DeleteFamily, удаляющая все семейство столбцов, включая все содержащиеся в нем столбцы. Кроме того, имеется набор пакетных функций Put, Get и Delete, и результирующие операции сканирования;
  • высокое быстродействие при любом масштабе - база данных Apache HBase рассчитана на поддержание высокой производительности при увеличении масштаба до сотен узлов для работы с миллиардами строк и миллионами столбцов. Она использует Amazon S3(с EMRFS) или распределенную файловую систему Hadoop (HDFS) в качестве отказоустойчивого хранилища данных. Сервис Amazon EMR поддерживает множество типов инстансов и томов Amazon EBS, что позволяет индивидуально настраивать аппаратное обеспечение кластера для оптимизации затрат и производительности. Можно также использовать Apache Phoenix для отправки SQL‑запросов с низкими задержками к массивным таблицам HBase или создания вторичных индексов для повышения производительности.

Ссылки

Источники

  1. The definition of Apache HВase // Официальный сайт Apache HВase [2018-2018]. URL: https://everipedia.org/wiki/lang_en/Apache_HBase/ (дата обращения: 28.11.2018)
  2. History of Apache HВase // Cайт Apache HВase [2014-2014]. URL: https://www.turkaramamotoru.com/ru/HBase-246065.html (дата обращения: 28.11.2018)
  3. Apache HВase properties // Документация по Apache HВase [2017-2017]. URL: http://lib.custis.ru/images/1/1c/Apache_Hadoop_(%D0%92%D0%BB%D0%B0%D0%B4%D0%B8%D0%BC%D0%B8%D1%80_%D0%9A%D0%BB%D0%B8%D0%BC%D0%BE%D0%BD%D1%82%D0%BE%D0%B2%D0%B8%D1%87_%D0%BD%D0%B0_ADD-2010).pdf (дата обращения: 28.11.2018)
  4. What HBase Does // Сайт HORTONWORKS [2011-2018]. URL: https://hortonworks.com/apache/hbase/ (дата обращения: 28.11.2018)
  5. Data models of Apache HВase // Википедия [2018-2018] Дата обновления: 11.01.2018. URL: https://ru.wikipedia.org/wiki/HBase (дата обращения: 28.11.2018)
  6. Table data model of Apache HВase // Сайт модели данных в Apache HВase [2018-2018]. URL: http://https://intellect.ml/big-data-ot-chast-4-hbase-6819 (дата обращения: 28.11.2018)