Зачем АНБ создало собственную HBase и как работает Apache Accumulo

24 июл 2026
1,163
486
75
2 недели

Apache Accumulo

Когда требуется хранить терабайты данных в распределённом виде, разработчики на Java обычно вспомнят про Cassandra или Apache HBase. Мало кто знает, что у HBase есть давний сородич с редкой фичей, за которую его и любят в специфических проектах.

В 2008 году Агентство национальной безопасности США столкнулось с задачей: им нужно было хранить колоссальные объёмы информации, но давать доступ к разным ячейкам одной и той же таблицы строго по допускам сотрудников. Существующие NoSQL-решения так делать не умели. В итоге спецслужба написала своё хранилище, а в 2011 году передала его в Apache Software Foundation. Проект назвали Apache Accumulo.

Что под капотом

По своей сути Accumulo — это отсортированная распределённая база данных класса «ключ-значение». Вдохновлена она всё той же известной статьей Google о BigTable.

Данные не лежат на одном диске. В качестве фундамента Accumulo использует Apache Hadoop HDFS для физического хранения файлов и Apache ZooKeeper для управления состоянием кластера и координации.

Реклама

Если взглянуть на структуру ключа в Accumulo, станет понятно, чем она отличается от простых хранилищ:

  • Row ID (идентификатор строки)
  • Column Family (семейство колонок)
  • Column Qualifier (квалификатор колонки)
  • Column Visibility (метка безопасности)
  • Timestamp (временная метка)

Именно четвертый компонент, Column Visibility, решает проблему, ради которой проект вообще создавали.

Контроль доступа до последней ячейки

В большинстве баз данных права раздаются на уровне таблиц или колонок. В крайнем случае — отдельных строк. В Accumulo контекст безопасности зашит прямо в каждую ячейку.

Каждая запись содержит метку вроде (ADMIN&SECRET)|TOP_SECRET. Когда клиент отправляет запрос на чтение, он передаёт свои авторизационные токены. Сервер Accumulo сам фильтрует поток данных до того, как отправить его по сети. Если у пользователя нет нужного допуска, он даже не узнает о существовании конкретных ячеек в строке.

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

Итераторы: вычисления на стороне сервера

Вторая сильная сторона Accumulo — итераторы. Это серверные плагины на Java, которые встраиваются в цепочку сканирования и сжатия данных.

Итераторы работают непосредственно на узлах хранения (Tablet Servers). Они выполняют сразу несколько задач:

  1. Фильтруют данные по сложным условиям до отправки клиенту.
  2. Агрегируют и трансформируют значения на лету.
  3. Очищают устаревшие версии или удалённые записи во время фонового сжатия файлов (compaction).

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

Как собрать и запустить

Проект полностью написан на Java. Собирается он стандартным Maven. Команда для сборки тарбола выглядит традиционно:

mvn package -DskipTests

Готовый архив появится по пути assemble/target/accumulo-<version>-bin.tar.gz.

Для локальной разработки можно запустить тестовый экземпляр, но для полноценной эксплуатации придётся поднять рабочий кластер HDFS и ZooKeeper. Потребуется выделить ресурсы и правильно настроить конфиги, так как система рассчитана на распределённое окружение.

Где это пригодится

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

  • Мультиарендные сервисы. Когда в одной базе хранятся данные разных отделов или клиентов с пересекающимися правами.
  • Обработка графов и построение поисковых индексов. Итераторы помогают быстро пересекать множества на стороне сервера.
  • Хранение логов и событий телеметрии. Когда запись идёт сплошным потоком, а чтение должно строго ограничиваться ролями пользователей.

Стоит ли связываться

У проекта около 1100 звёзд на GitHub, но за невысокой популярностью скрывается зрелый инструмент с частыми релизами и поддержкой Apache Foundation.

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

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.