Обзор Phoenix

Введение

Apache Phoenix — это реляционный движок базы данных, позволяющий выполнять SQL-запросы к данным, хранящимся в HBase.

Возможности

Основные возможности Phoenix:

  • Низкая задержка (low latency) и высокая производительность, достигаемые за счет параллельного исполнения, оптимизированного выполнения запросов и вторичной индексации.

  • Массовая загрузка данных (например, с помощью MapReduce).

  • Управление схемами: схемы данных и метаданные хранятся в централизованном каталоге, а столбцы таблиц можно добавлять и удалять.

  • Мультиарендность (multi-tenancy): несколько пользователей или приложений могут совместно использовать один кластер HBase, сохраняя при этом изоляцию и безопасность данных.

  • Использование salted-таблиц.

  • Поддержка атомарных операций и транзакционного поведения для обеспечения согласованности данных.

  • Бесшовная интеграция с Hadoop и Spark.

Архитектура

Ниже показана общая архитектура Phoenix.

Архитектурная схема Phoenix
Архитектурная схема Phoenix
Архитектурная схема Phoenix
Архитектурная схема Phoenix

В этой схеме данные передаются следующим образом:

  1. SQL-запрос отправляется через JDBC/ODBC-клиент.

  2. Сервер запросов (например, Apache Calcite Avatica), если он используется, выступает в качестве посредника между клиентским приложением и ядром Phoenix. Он выполняет следующие функции:

    • Прослушивает сетевой интерфейс в ожидании входящих SQL-запросов от клиентских приложений по сети через RESTful API.

    • При необходимости управляет доступом к Phoenix с помощью механизмов аутентификации и авторизации.

    • Управляет подключениями к кластеру Phoenix/HBase путем их объединения (connection pooling). Это помогает сократить нагрузку на сеть, вызываемую установлением новых подключений для каждого запроса.

    • Пересылает SQL-запросы в драйвер Phoenix.

  3. Запрос отправляется в драйвер Phoenix, который передает метаданные в ZooKeeper. Компилятор и планировщик в драйвере Phoenix анализируют запрос, проверяют его, затем оптимизируют и создают план выполнения.

  4. Если возможно, менеджер индексов Phoenix определяет, можно ли использовать какие-либо индексы для дальнейшей оптимизации запроса.

  5. Механизм выполнения запросов выполняет план, взаимодействуя с HBase через API.

  6. HBase извлекает данные из соответствующих регионов.

  7. Phoenix обрабатывает данные (фильтрует, агрегирует и т.д.) и возвращает результаты клиенту тем же путем.

Phoenix в ADH

Как уже было сказано, Phoenix построен на основе HBase. Это SQL-обертка, которая использует сильные стороны HBase: масштабируемость, отказоустойчивость, хранение данных NoSQL. В то время как Phoenix фокусируется на обработке запросов, исходные данные находятся в HBase, который хранит их в HDFS. Phoenix использует HBase для доступа к этим данным.

Phoenix можно использовать совместно с другими компонентами экосистемы Hadoop, такими как Spark и Hive. Такая интеграция позволяет использовать эти инструменты для более сложной обработки и аналитики данных.

Взаимодействие с сервисами

Phoenix взаимодействует с различными сервисами в ADH.

HBase

Наиболее важным является взаимодействие с HBase. Phoenix широко использует API клиента HBase для всех операций чтения и записи. Он транслирует SQL-запросы в операции HBase, такие как get, scan, put, delete и другие.

ZooKeeper

Phoenix использует ZooKeeper для следующих целей:

  • Обнаружение кластера HBase. Клиенты Phoenix и сервер запросов (при наличии) используют ZooKeeper для обнаружения местоположения master-сервера и серверов регионов HBase.

  • Выборы лидера. В некоторых сценариях ZooKeeper используется для выбора лидера среди экземпляров Phoenix.

  • Координация метаданных. Управление распределенными метаданными о таблицах, индексах и схемах Phoenix.

MapReduce

Phoenix может взаимодействовать с MapReduce для следующих целей:

  • Массовая загрузка. Phoenix предоставляет механизм для массовой загрузки данных в HBase с помощью MapReduce. Это эффективнее, чем вставка строк по одной с помощью операторов SQL INSERT или UPSERT.

  • Пользовательская обработка. Можно создавать пользовательские задания MapReduce, которые считывают данные из таблиц Phoenix, выполняют преобразования и записывают результаты обратно в Phoenix или другое хранилище данных.

Spark

Phoenix может взаимодействовать со Spark для следующих целей:

  • Spark-коннектор для Phoenix. Этот коннектор позволяет приложениям Spark считывать и записывать данные в таблицы Phoenix. Spark можно использовать для преобразований данных и анализа, которые сложно или неэффективно выполнять напрямую в Phoenix.

  • Spark SQL. Можно использовать Spark SQL для запросов к данным в таблицах Phoenix, используя механизм распределенных запросов Spark.

Hive

Phoenix может взаимодействовать с Hive косвенным образом. Данные, загруженные в HBase с помощью Phoenix, могут быть доступны Hive с помощью обработчиков хранилища, но это практикуется реже, чем использование Spark.

Детали реализации и ключевые операции

Управление индексами

При создании индекса Phoenix создает отдельную таблицу HBase для хранения данных индекса. Запись данных в исходную таблицу автоматически запускает обновление соответствующих индексов (для изменяемых индексов). Во время выполнения запроса механизм запросов анализирует его и определяет, можно ли использовать индекс для ускорения выполнения запроса.

Формат хранения данных

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

Salting

Для предотвращения избыточной нагрузки на один сервер регионов при простое остальных используется механизм под названием salting.

Операция UPSERT

Оператор UPSERT в Phoenix используется для вставки новой строки в таблицу или обновления существующей строки. Если строка с указанным первичным ключом уже существует, оператор UPSERT обновит существующую строку. Если строка не существует, оператор UPSERT вставит новую строку.

Примеры использования

Ниже приведены примеры реальных сценариев, в которых использование Phoenix особенно выгодно:

  • Операционная аналитика. Phoenix отлично справляется с анализом рабочих данных, хранящихся в HBase, в реальном времени или почти в реальном времени. Это отличает его от традиционных пакетно-ориентированных хранилищ данных. Примеры:

    • Мониторинг в реальном времени — мониторинг производительности систем, активности приложений или сетевого трафика.

    • Обнаружение мошенничества — выявление мошеннических транзакций в реальном времени.

    • Персонализация — предоставление персонализированных рекомендаций на основе поведения пользователя.

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

  • Интернет вещей (Internet of Things, IoT). Phoenix хорошо подходит для обработки данных с устройств IoT. Обычно эти данные имеют большой объем и требуют низкую задержку передачи и обработки.

  • Анализ кликстрима. Phoenix можно использовать для анализа данных кликстрима на веб-сайтах для понимания поведения пользователя и улучшения дизайна веб-сайтов.

  • Телекоммуникации. Phoenix можно использовать для мониторинга сети, анализа записей о вызовах (Call Detail Record, CDR).

  • Хранилище данных. Хотя Phoenix не является заменой полноценного хранилища данных, его можно использовать для сценариев хранения данных меньшего масштаба, где важна производительность запросов в реальном времени.

  • Обслуживающий уровень для машинного обучения. Phoenix может выступать в качестве обслуживающего уровня, обеспечивая доступ в реальном времени к функциям для моделей машинного обучения.

Преимущества

Использование Phoenix может дать следующие преимущества:

  • Известность SQL. Самым большим преимуществом Phoenix является использование SQL. Это делает HBase доступным для гораздо большей аудитории, поскольку SQL — широко известный и понятный язык.

  • Производительность. Phoenix обеспечивает оптимизированное выполнение запросов к HBase, часто достигая гораздо более высокой OLTP-производительности, чем другие решения SQL-on-Hadoop.

  • Низкая задержка. Phoenix разработан для запросов с низкой задержкой, что делает его подходящим для использования в приложениях в реальном времени или почти в реальном времени.

  • Масштабируемость и отказоустойчивость. Phoenix эффективно использует масштабируемость и отказоустойчивость, которыми обладает HBase.

  • Вторичные индексы. Phoenix обеспечивает более быстрые запросы с помощью вторичных индексов.

  • Поддержка транзакций. Phoenix обеспечивает согласованность и надежность данных с помощью транзакций ACID.

  • Интеграция с экосистемой Hadoop. Phoenix легко интегрируется с другими компонентами Hadoop, такими как Spark, MapReduce и Hive.

  • Сокращение усилий на разработку. Phoenix упрощает разработку, предоставляя интерфейс SQL для HBase, что снижает необходимость в сложном программировании API HBase.

Ограничения и особенности

Phoenix имеет следующие ограничения и особенности:

  • Phoenix не поддерживает стандарт ANSI SQL в полном объеме. Подробности см. в документации Apache Phoenix.

  • Управление вторичными индексами может быть сложным, особенно для больших таблиц. Необходимо тщательно продумать, какие столбцы индексировать и как поддерживать индексы.

  • NoSQL-устройство HBase влияет на то, как данные моделируются в Phoenix. Методы моделирования реляционных баз данных не всегда могут быть применимы напрямую.

  • Если ключ строки не сформирован должным образом, записи могут быть сосредоточены на одном сервере регионов, что приводит к перегрузкам и снижению производительности. Использование salting может устранить этот эффект.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней