HAWQ (HAdoop With Queries) — различия между версиями

Материал из Национальной библиотеки им. Н. Э. Баумана
(исправлены даты обновления источников)
Строка 31: Строка 31:
 
*Расширенная библиотека доступа [[C (язык программирования)|C]] / [[C++ (язык программирования)|C++]] к [[HDFS (Hadoop Distributed Filesystem)|HDFS]]  и  [[YARN (Yet Another Resource Negotiator)|YARN]]: libhdfs3 & libYARN
 
*Расширенная библиотека доступа [[C (язык программирования)|C]] / [[C++ (язык программирования)|C++]] к [[HDFS (Hadoop Distributed Filesystem)|HDFS]]  и  [[YARN (Yet Another Resource Negotiator)|YARN]]: libhdfs3 & libYARN
 
*Поддержка большинства сторонних инструментов: Tableau, SAS et al.
 
*Поддержка большинства сторонних инструментов: Tableau, SAS et al.
*Стандартное подключение: JDBC / ODBC <ref group="Источник">HAWQ // Википедия Apache. Дата обновления: 04.06.2019. URL: https://cwiki.apache.org/confluence/display/HAWQ (дата обращения: 15.04.2019). </ref>  
+
*Стандартное подключение: JDBC / ODBC <ref group="Источник">HAWQ // Википедия Apache. Дата обновления: 03.09.2018. URL: https://cwiki.apache.org/confluence/display/HAWQ (дата обращения: 15.04.2019). </ref>  
  
 
==Принцип работы==
 
==Принцип работы==
Строка 45: Строка 45:
 
   Распарсить URL, извлечь из него имя хоста и прoтокол  
 
   Распарсить URL, извлечь из него имя хоста и прoтокол  
 
*Хорошая производительность
 
*Хорошая производительность
   Отказ от использования MR и применение оптимизатора плана выполнения <ref group="Источник">SQL для HADOOP на базе PostgreSQL // Apache. Дата обновления: 04.06.2019. URL: https://pgday.ru/files/papers/78/PGDay%20Apache%20HAWQ.pdf (дата обращения: 20.04.2019). </ref>  
+
   Отказ от использования MR и применение оптимизатора плана выполнения <ref group="Источник">SQL для HADOOP на базе PostgreSQL // Apache. Дата обновления: 2016. URL: https://pgday.ru/files/papers/78/PGDay%20Apache%20HAWQ.pdf (дата обращения: 20.04.2019). </ref>  
  
  

Версия 01:00, 15 июня 2019

HAWQ
HAWQ.jpg
Создатели: Apache
Выпущена: February 2013 (2013-02)
Постоянный выпуск: 2.4.0.0 / September 21, 2018 (2018-09-21)
Написана на: Python, Java, C, C++
Веб-сайт hawq.apache.org

HAWQ (англ. Hadoop With Queries) – это «движок» для осуществления SQL запросов к Apache Hadoop с богатыми аналитическими возможностями. Имеет собственный механизм SQL-запросов Hadoop, который сочетает ключевые технологические преимущества базы данных MPP с масштабируемостью и удобством Hadoop. HAWQ считывает данные и записывает данные в HDFS изначально. HAWQ обеспечивает лучшую в отрасли производительность и линейную масштабируемость. Он предоставляет пользователям инструменты для уверенного и успешного взаимодействия с наборами данных петабайтного диапазона. HAWQ предоставляет пользователям полный, совместимый со стандартами интерфейс SQL.

Функции

  • Локальное или облачное развертывание
  • Надежное соответствие требованиям ANSI SQL: SQL-92, SQL-99, SQL-2003, расширение OLAP
  • Чрезвычайно высокая производительность. во много раз быстрее, чем другие движки Hadoop SQL.
  • Параллельный оптимизатор мирового класса
  • Полная возможность транзакции и гарантия согласованности: ACID
  • Динамический механизм передачи данных через высокоскоростное соединение на основе UDP
  • Эластичный механизм выполнения, основанный на виртуальных сегментах по требованию и локальности данных
  • Поддержка многоуровневого секционирования и секционированных таблиц на основе списка / диапазона.
  • Поддержка нескольких методов сжатия: snappy, gzip, quicklz, RLE
  • Поддержка многоязычных пользовательских функций: python, perl, java, c / c++, R
  • Расширенные функции машинного обучения и интеллектуального анализа данных с помощью MADLib
  • Динамическое расширение узла: в секундах
  • Самое современное трехуровневое управление ресурсами: интеграция с YARN и иерархическими очередями ресурсов.
  • Простой доступ ко всем данным HDFS и внешним системным данным (например, HBase)
  • Собственный Hadoop: от хранилища (HDFS), управления ресурсами (YARN) до развертывания (Ambari).
  • Аутентификация и детальная авторизация: Kerberos, SSL и доступ на основе ролей
  • Расширенная библиотека доступа C / C++ к HDFS и YARN: libhdfs3 & libYARN
  • Поддержка большинства сторонних инструментов: Tableau, SAS et al.
  • Стандартное подключение: JDBC / ODBC [Источник 1]

Принцип работы

Основной единицей параллелизма HAWQ является экземпляр сегмента. Несколько экземпляров сегментов на обычных серверах работают вместе, образуя единую параллельную систему обработки запросов. Запрос, отправленный в HAWQ, оптимизируется, разбивается на более мелкие компоненты и распределяется по сегментам, которые работают вместе для предоставления единого набора результатов. Все реляционные операции - такие как сканирование таблиц, объединения, агрегации и сортировки - одновременно выполняются параллельно между сегментами. Данные от вышестоящих компонентов в динамическом конвейере передаются нисходящим компонентам через масштабируемое соединение по протоколу пользовательских дейтаграмм (UDP).

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

Применение

  • Универсальный SQL - интерфейс к данным Hadoop для BI с ANSI SQL-93,-99,-2003
 Запрос Cognos на 5000 строк с множеством функций 
  • Универсальный инструмент для ad-hoc аналитики
 Распарсить URL, извлечь из него имя хоста и прoтокол 
  • Хорошая производительность
 Отказ от использования MR и применение оптимизатора плана выполнения [Источник 2] 


История проекта

Рисунок 1 – История проекта (2016 г.)

Исходный код

Включает в себя:

  • 1.500.000 строк кода C и C++ (из которых 200.000 заголовочных файлов)
  • 180.000 строк кода Python
  • 60.000 строк кода Java
  • 23.000 строк Makefile’ов
  • 7.000 строк shell-скриптов
  • Более 50 корпоративных клиентов

Open Source:


Архитектура

В типичном развертывании HAWQ каждый ведомый имеет физический раздел узла данных HDW и установленный NodeManager. Мастера для HAWQ, HDFS и YARN размещаются на отдельных узлах. На рисунке 2 представлена диаграмма, описывающая высокоуровневое развертывание HAWQ.

Рисунок 2 – Высокоуровневое развертывание HAWQ


HAWQ тесно интегрирован с YARN , структурой управления ресурсами Hadoop, для управления ресурсами запросов. HAWQ кэширует контейнеры из YARN в пуле ресурсов, а затем управляет этими ресурсами локально, используя собственное тонкое управление ресурсами HAWQ для пользователей и групп. Чтобы выполнить запрос, HAWQ выделяет набор виртуальных сегментов в соответствии со стоимостью запроса, определениями очереди ресурсов, локальностью данных и текущим использованием ресурсов в системе. Затем запрос отправляется на соответствующие физические хосты, которые могут быть подмножеством узлов или всего кластера. Средство проверки ресурсов HAWQ на каждом узле отслеживает и контролирует ресурсы, используемые запросом в реальном времени, чтобы избежать нарушений в использовании ресурсов.

На рисунке 3 изображена структура программных компонентов, составляющих HAWQ.


Рисунок 3 – Программные компоненты


Мастер сервера

Мастер HAWQ является точкой входа в систему. Это процесс базы данных, который принимает клиентские соединения и обрабатывает введенные команды SQL. Мастер HAWQ анализирует запросы, оптимизирует запросы, отправляет запросы в сегменты и координирует выполнение запроса.

Конечные пользователи взаимодействуют с HAWQ через мастер и могут подключаться к базе данных, используя клиентские программы, такие как psql или интерфейсы прикладного программирования (API), такие как JDBC или ODBC.

Мастер - это место, где находится глобальный системный каталог. Глобальный системный каталог - это набор системных таблиц, которые содержат метаданные о самой системе HAWQ. Мастер не содержит никаких пользовательских данных; Данные хранятся только в HDFS . Мастер аутентифицирует клиентские соединения, обрабатывает входящие команды SQL, распределяет рабочую нагрузку по сегментам, координирует результаты, возвращаемые каждым сегментом, и представляет окончательные результаты клиентской программе. На рисунке 4 представлена структура мастера сервера на момент 2016 г.


Рисунок 4 – Мастер сервера (2016 г.)

Сегмент

В HAWQ сегменты - это единицы, которые обрабатывают данные одновременно.

На каждом хосте есть только один физический сегмент. Каждый сегмент может запустить много исполнителей запросов (QE) для каждого фрагмента запроса. Это заставляет один сегмент действовать как несколько виртуальных сегментов, что позволяет HAWQ лучше использовать все доступные ресурсы.

Виртуальный сегмент ведет себя как контейнер для QE. Каждый виртуальный сегмент имеет одно QE для каждого фрагмента запроса. Количество используемых виртуальных сегментов определяет степень параллелизма (DOP) запроса.

Сегмент отличается от основного, потому что он:

  • Не зависит от какого-либо состояния
  • Не хранит метаданные для каждой базы данных и таблицы
  • Не хранит данные в локальной файловой системе
  • Мастер отправляет запрос SQL в сегменты вместе со связанной информацией метаданных для обработки. Метаданные содержат URL-адрес HDFS для требуемой таблицы. Сегмент обращается к соответствующим данным, используя этот URL

Межсоединение

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

По умолчанию межсоединение использует UDP (протокол пользовательских дейтаграмм) для отправки сообщений по сети. Программное обеспечение HAWQ выполняет дополнительную проверку пакетов помимо того, что обеспечивается UDP. Это означает, что надежность эквивалентна протоколу управления передачей (TCP), а производительность и масштабируемость превышают таковые TCP. Если межсоединение использует TCP, HAWQ будет иметь предел масштабируемости 1000 экземпляров сегмента. При использовании UDP в качестве текущего протокола по умолчанию для межсоединения это ограничение не применяется.

Кластер

Рисунок 5 – Структура кластера (2016 г.)

Метаданные

  • Структура аналогична структуре каталога Postgres
  • Статистика
    • Количество записей и страниц в таблице
    • Наиболее частые значения для каждого поля
    • Гистограмма для каждого числового поля
    • Количество уникальных значений в поле
    • Количество null значений в поле
    • Средний размер значения поля в байтах
  • Информация о структуре таблицы
    • Поля распределения
    • Количество hash bucket распределения
  • Партиционирование (hash, list ,range)
  • Общие метаданные
    • Пользователи и группы
    • Права доступа к объектам
  • Хранимые процедуры
    • PL/pgSQL, PL/Java, PL/Python, PL/Perl, PL/R


Статистика

  • Без статистики
Join двух таблиц, потребует перебор записей oт 0 до бесконечности 
  • Количество записей
Join двух таблиц по 1000 записей в каждой, потребует перебор записей oт 0 до 1’000’000
  • Гистограммы и MCV
Join двух таблиц по 1000 записей в каждой, с известной кардинальностью, гистограммой распределения, MCV, null oт 500 до 1’500

Оптимизатор запросов

  • Используется cost-based оптимизатор
    • Planner – модифицированный оптимизатор Postgres
    • ORCA (Pivotal Query Optimizer) – разработан специально для HAWQ и портирован на Greenplum
  • Хинты оптимизатора:
    • Включить/отключить определенную операцию
    • Изменить веса базовых операций


Рисунок 6 – Пример плана

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

Виды

Рисунок 7 – Поколоночное хранение

Существует два формата хранения данных:

  • Построчное хранение
    • Модифицированный формат postgres
      • Без toast
      • Без ctid, xmin, xmax, cmin
    • Сжатие
      • Без сжатия
      • Quicklz
      • Zlib уровни 1 - 9
  • Apache Parquet
    • Поколоночное хранение блоков последовательности строк (см. рисунок 7)
    • Сжатие
      • Без сжатия
      • Snappy
      • Gzip уровни 1 – 9
    • Размер «row group» и страницы задается для каждой таблицы отдельно

Политика распределения таблиц

Политика распределения таблиц по умолчанию в HAWQ является случайной. Случайно распределенные таблицы имеют некоторые преимущества перед хеш-распределенными таблицами. Например, после расширения кластера HAWQ может использовать больше ресурсов автоматически без перераспределения данных. Для огромных таблиц перераспределение очень дорого, а локальность данных для случайно распределенных таблиц лучше после того, как базовая HDFS перераспределяет свои данные во время сбоев перебалансировки или DataNode. Это довольно часто, когда кластер большой.

С другой стороны, для некоторых запросов распределенные по хэшу таблицы работают быстрее, чем случайно распределенные таблицы. Например, хеш-распределенные таблицы имеют некоторые преимущества в производительности для некоторых запросов TPC-H. Вы должны выбрать политику распространения, которая лучше всего подходит для сценария вашего приложения.

Внешние данные

  • PXF (Pivotal Extension Framework)
    • Фреймворк для доступа к внешним данным
    • Легко расширяется, возможно использовать свои плагины
    • Официальные плагины: CSV, SeqFile, Avro, Hive, Hbase
    • Open Source плагины: JSON, Accumolo, Cassandra, JDBC,
    • Redis, Pipe
  • HCatalog
    • HAWQ «видит» таблицы из Hcatalog как свои внутренние таблицы

Управление ресурсами

HAWQ предоставляет несколько подходов к управлению ресурсами и включает несколько настраиваемых пользователем опций, включая интеграцию с управлением ресурсами YARN.

HAWQ имеет возможность управлять ресурсами, используя следующие механизмы:

  • Глобальное управление ресурсами. Вы можете интегрировать HAWQ с менеджером ресурсов YARN для запроса или возврата ресурсов по мере необходимости. Если вы не интегрируете HAWQ с YARN, HAWQ исключительно использует ресурсы кластера и управляет своими собственными ресурсами. Если вы интегрируете HAWQ с YARN, то HAWQ автоматически выбирает ресурсы из YARN и управляет полученными ресурсами через свои внутренние очереди ресурсов. Ресурсы возвращаются в YARN автоматически, когда ресурсы больше не используются.
  • Пользовательские иерархические очереди ресурсов (см. рисунок 8). Администраторы HAWQ или суперпользователи проектируют и определяют очереди ресурсов, используемые для организации распределения ресурсов по запросам.
  • Динамическое распределение ресурсов во время выполнения запроса. HAWQ динамически распределяет ресурсы на основе определений очереди ресурсов. HAWQ автоматически распределяет ресурсы на основе запущенных (или поставленных в очередь) запросов и емкости очереди ресурсов.
  • Ресурсные ограничения на виртуальные сегменты и запросы. Вы можете настроить HAWQ, чтобы обеспечить ограничение использования ЦП и памяти как для виртуальных сегментов, так и для очередей ресурсов, используемых запросами.


Рисунок 8 – Иерархические ресурсные очереди


Кэш каталога HDFS

Кэш каталога HDFS - это служба кэширования, используемая мастером HAWQ для определения информации о распределении табличных данных в HDFS.

HDFS работает медленно при обработке RPC, особенно когда число одновременных запросов велико. Чтобы решить, какие сегменты обрабатывают какую часть данных, HAWQ требуется информация о местонахождении данных из узлов имен HDFS . Кэш каталога HDFS используется для кэширования информации о местоположении данных и ускорения операций RPC HDFS.

Выполнение запросов

Характеристики

  • Выполнение запросов является динамическим и гибким процессом
    • Возможно Scale-up/down масштабирование
    • Возможно Scale-in/out масштабирование
  • Использование: “block level storage” и “virtual segments”
    • Поддержка использования блоков данных
    • Использование узлов хранящих требуемые блоки
    • Запуск запросов на узлах, обладающих требуемыми свободными ресурсами
    • Запуск ”virtual segment” по запросу
  • Каждый узел имеет только один логический сегмент HAWQ
    • Простота в настройке и установке
    • Простата в оптимизации производительности
  • Количество “virtual segments” используемых для запроса
    • Определяет параллелизм запроса
    • Каждый ”virtual segment” равен одному процессу Postgres
  • Как определить количество ”virtual segment” необходимых для выполнения запроса
    • Объем ресурсов необходимых для выполнения запроса
    • «Стоимость» запроса, Data locality, RQ Definitions
    • Распределение таблицы: Hash vs Random
    • UDFs и external tables

Графическое описание

Рисунок 9 – Выполнение запросов



Рисунок 10 – Выполнение запросов



Рисунок 11 – Выполнение запросов



Рисунок 12 – Выполнение запросов



Рисунок 13 – Выполнение запросов



Рисунок 14 – Выполнение запросов



Рисунок 15 – Выполнение запросов



Рисунок 16 – Выполнение запросов



Рисунок 17 – Выполнение запросов



Рисунок 18 – Выполнение запросов


Источники

  1. HAWQ // Википедия Apache. Дата обновления: 03.09.2018. URL: https://cwiki.apache.org/confluence/display/HAWQ (дата обращения: 15.04.2019).
  2. SQL для HADOOP на базе PostgreSQL // Apache. Дата обновления: 2016. URL: https://pgday.ru/files/papers/78/PGDay%20Apache%20HAWQ.pdf (дата обращения: 20.04.2019).