Apache Accumulo

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:23, 27 декабря 2017.
Apache Accumulo
fraimed
Разработчики: Apache Software Foundation
Постоянный выпуск: 1.8.1[Источник 1] / 26 February 2017 года; 2 years ago (2017-02-26)
Состояние разработки: Активное
Написана на: Java
Операционная система: кросс-платформенная
Локализация: Английский язык
Тип ПО: База данных
Лицензия: Apache License 2.0
Веб-сайт официальный сайт

Apache Accumulo - программное обеспечение, представляющее собой разновидность NoSQL баз данных - распределенное хранилище key/value (ключей и значений). Использует дизайн Google BigTable, работает с Hadoop Distributed File System (HDFS). Написано, в основном, на языке программирования Java c обширными заимствованиями кодов из других проектов Apache - Zookeeper, Thrift и Hadoop. Разработчик - Агентство национальной безопасности США. Работа над Accumulo началась в 2008 году, в 2011 он был передан в Apache Software Foundation, как инкубационный проект с открытым исходным кодом[Источник 2]. Согласно англоязычному рейтингу DB-Engines, является четвертой по популярности NoSQL базой данных[Источник 3]. Распространяется под лицензией Apache 2.0.

Общее

По сравнению с BigTable в Accumulo реализована более продвинутая система разграничения прав доступа на уровне отдельных ячеек (cell-level access labels). Различные пользователи могут получить доступ только к определённым полям базы данных, которым присвоен соответствующий уровень доступа (labels). Это позволяет взаимодействовать данным с различными политиками доступа. Субъекты, имеющие доступ к конфиденциальной информации, могут работать с субъектами, которые этого доступа не имеют. Пользователи могут получить доступ к данным в соответствии со своими полномочиями.

Второе серьезное изменение — серверная система, допускающая перезапись пар ключ/значение на различных этапах обработки данных.


В целом, Apache Accumulo имеет 3 преимущества над другими NoSQL решениями:

  1. Безопасность: Accumulo позволяет контролировать данные на уровне ячейки без падения производительности.
  2. Производительность: Accumulo может оперировать десятками петабайт данных. Очень быстрая скорость чтения и записи (десятки тысяч операций в секунду на узел), что дает возможность поддержки интерактивных запросов.
  3. Гибкость: Accumulo легко может справляться с мультиструктурированными и широкораспределенными наборами данных без избыточного моделирования.
Accumulo Master Server

Устройство

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

Accumulo предоставляет расширенную модель данных, больше, чем простое хранение ключа и его значения, но не является полностью реляционной БД. Данные представлены в виде пар ключ-значение, состоящих из следующих элементов:

Структура таблиц Accumulo

Все элементы ключей и значений представлены массивом, исключая timestamp, который имеет формат long. Accumulo сортирует ключи по элементам, а лексикографически - в порядке возрастания. Timestamps сортируются в порядке убывания так, что более поздние версии одного и того же ключа первого появляются в последовательных сканированиях. Сами таблицы состоят из наборов отсортированных пар ключ-значение.


Подробный разбор модели данных Accumulo на англоязычном обучающем канале[Источник 4] YouTube.
Управление данными

Accumulo хранит данные в таблицах, которые распределены по блокнотам. Они, в свою очередь, разделены на границах строк таким образом, чтобы все столбцы и значения для конкретной строки могут быть найдены вместе в том же блокноте. Мастер назначает блокноты одному TabletServer одновременно. Это позволяет совершать транзакции на уровне строк без использования распределенной блокировки или какого-либо другого сложного механизма синхронизации. Поскольку клиенты читают и записывают данные, а также добавляют машины и удаляют из кластера, мастер перемещает блокноты, чтобы гарантировать, что они останутся доступными и что нагрузка запросов в кластере уравновешивается.

Структура распределения данных Accumulo
Компоненты
  1. TabletServer - управляет набором таблиц (или частей таблиц).
  2. Garbage Collector - удаляет файлы, которые не нужны никакому процессу (т.н. сборщик мусора).
  3. The Accumulo Master - отвечает за работу TabletServer.
  4. Tracer - поддержка предоставляемого Accumulo API.
  5. The Accumulo Monitor - веб-приложение, предоставляющее информацию о состоянии инстанса.
  6. Client - собственно, клиент.


Установка и подключение к Accumulo

Официальная инструкция (на английском языке; здесь и далее все коды на примере версии 1.8.1):[Источник 5]

Для работы программы необходимы Java, Zookeeper и Hadoop.

Установка

Установка на Ubuntu может осуществляться следующим образом:

$ wget https://www.apache.org/dyn/closer.lua/accumulo/1.8.1/accumulo-1.8.1-bin.tar.gz
$ tar -xzf accumulo-1.8.1-bin.tar.gz
$ cd accumulo-1.8.1
$ ./bin/build_native_library.sh
$ ./bin/bootstrap_config.sh   // установка и настройка; при вопросе о типе memory-map выбрать Java


Далее следует внести изменения в файл конфигурации:

$ nano ./conf/accumulo-env.sh

В открывшемся окне откорректировать значения переменных HADOOP_PREFIX, JAVA_HOME и ZOOKEEPER_HOME, заменив директории по умолчанию на те, куда установлено соответствующее ПО.


Запуск оболочки осуществляется следующей командой:

$ ./bin/accumulo shell -u [username]

Подключение

String instanceName = "myinstance";
String zooServers = "zooserver-one,zooserver-two"
Instance inst = new ZooKeeperInstance(instanceName, zooServers);

Connector conn = inst.getConnector("user", new PasswordToken("passwd"));
Accumulo Overview

Особенности

  1. Строение и конфигурация таблиц.
  2. Контроль доступа на уровне ячеек.
  3. Необязательность загрузки в память больших объемов.
  4. Интегрированность и доступность.
  5. Fail-over (аварийное переключение, элемент системы отказоустойчивости) с ZooKeeper.
  6. Хорошее логгирование.
  7. Кэширование недавно полученных данных.
  8. Управление данными.
  9. Группировка столбцов в пределах одного файла.
  10. Распараллеливание на сервере.
  11. Автоматическое разделение и ребалансирование.

Как это работает

Accumulo хранит отсортированные пары ключ-значение. Сортировка данных по ключу позволяет быстро выполнять поиск по ключу или диапазону ключей. Так как данные извлекаются с помощью ключа, ключи должны содержать информацию, которая будет использоваться для выполнения поиска.

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

Значения могут содержать что угодно, так как они не используются для извлечения. Изначально таблицы состояли из столбцов и строк. Accumulo же дополняет столбцы маркером видимости, который, собственно, и обеспечивает контроль доступа.

Источники

  1. Apache Accumulo 1.8.1 // Apache Software Foundation. [2017—2017]. Дата обновления: 19.12.2017. URL: http://accumulo.apache.org/release/accumulo-1.8.1/ (дата обращения: 19.12.2017)
  2. АНБ представило СУБД в инкубатор Apache // Habrahabr. [2017—2017]. Дата обновления: 19.12.2017. URL: https://habrahabr.ru/post/127821/ (дата обращения: 19.12.2017)
  3. DB-Engines Ranking of Wide Column Stores // DB-Engines. [2017—2017]. Дата обновления: 19.12.2017. URL: https://db-engines.com/en/ranking/wide+column+store (дата обращения: 19.12.2017)
  4. O'Reilly - Video Training // YouTube. [2017-2017]. Дата обновления: 25.12.2017. URL: https://www.youtube.com/channel/UCFvbB4_qLYRrOQNuFudz-Mg (дата обращения: 25.12.2017).
  5. Accumulo User Manual // Apache Software Foundation. [2017-2017]. Дата обновления: 19.12.2017. URL: http://accumulo.apache.org/1.8/accumulo_user_manual.html (дата обращения: 19.12.2017)

Внешние ссылки

  1. Официальный сайт проекта
  2. Apache Accumulo - Wikipedia
  3. How To Install the Big-Data Friendly Apache Accumulo NoSQL Database on Ubuntu 14.04