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

Материал из Национальной библиотеки им. Н. Э. Баумана
(не показана одна промежуточная версия этого же участника)
Строка 2: Строка 2:
 
| name                  = HAWQ
 
| name                  = HAWQ
 
| logo                  = HAWQ.jpg
 
| logo                  = HAWQ.jpg
| author                = Apache
+
| author                = [[ASF (Apache Software Foundation)|Apache]]
 
| released              = {{Start date|2013|02}}
 
| released              = {{Start date|2013|02}}
 
| latest release version = 2.4.0.0
 
| latest release version = 2.4.0.0
 
| latest release date    = {{Start date|2018|09|21}}
 
| latest release date    = {{Start date|2018|09|21}}
| programming language  = [[Python]], [[Java]],  C, C++
+
| programming language  = [[Python]], [[Java]],  [[C (язык программирования)|C]], [[C++ (язык программирования)|C++]]
 
| website                = {{URL|hawq.apache.org}}
 
| website                = {{URL|hawq.apache.org}}
 
}}
 
}}
  
'''HAWQ''' ({{lang-en|'''Ha'''doop '''W'''ith '''Q'''ueries}}) – это «движок» для осуществления [[SQL]] запросов к [[Apache Hadoop]] с богатыми аналитическими возможностями. Имеет собственный механизм SQL-запросов Hadoop, который сочетает ключевые технологические преимущества базы данных MPP с масштабируемостью и удобством Hadoop. HAWQ считывает данные и записывает данные в HDFS изначально. HAWQ обеспечивает лучшую в отрасли производительность и линейную масштабируемость. Он предоставляет пользователям инструменты для уверенного и успешного взаимодействия с наборами данных петабайтного диапазона. HAWQ предоставляет пользователям полный, совместимый со стандартами интерфейс SQL.
+
'''HAWQ''' ({{lang-en|'''Ha'''doop '''W'''ith '''Q'''ueries}}) – это «движок» для осуществления [[SQL]] запросов к [[Apache Hadoop]] с богатыми аналитическими возможностями. Имеет собственный механизм [[SQL]]-запросов Hadoop, который сочетает ключевые технологические преимущества базы данных MPP с масштабируемостью и удобством Hadoop. HAWQ считывает данные и записывает данные в [[HDFS (Hadoop Distributed Filesystem)|HDFS]] изначально. HAWQ обеспечивает лучшую в отрасли производительность и линейную масштабируемость. Он предоставляет пользователям инструменты для уверенного и успешного взаимодействия с наборами данных петабайтного диапазона. HAWQ предоставляет пользователям полный, совместимый со стандартами интерфейс [[SQL (Structured Query Language)|SQL]].
  
 
==Функции==  
 
==Функции==  
Строка 22: Строка 22:
 
*Поддержка многоуровневого секционирования и секционированных таблиц на основе списка / диапазона.
 
*Поддержка многоуровневого секционирования и секционированных таблиц на основе списка / диапазона.
 
*Поддержка нескольких методов сжатия: snappy, gzip, quicklz, RLE
 
*Поддержка нескольких методов сжатия: snappy, gzip, quicklz, RLE
*Поддержка многоязычных пользовательских функций: [[python]], perl, [[java]], c / c ++, R
+
*Поддержка многоязычных пользовательских функций: [[python]], [[Perl|perl]], [[java]], [[C (язык программирования)|c]] / [[C++ (язык программирования)|c++]], R
 
*Расширенные функции машинного обучения и интеллектуального анализа данных с помощью MADLib
 
*Расширенные функции машинного обучения и интеллектуального анализа данных с помощью MADLib
 
*Динамическое расширение узла: в секундах
 
*Динамическое расширение узла: в секундах
 
*Самое современное трехуровневое управление ресурсами: интеграция с YARN и иерархическими очередями ресурсов.
 
*Самое современное трехуровневое управление ресурсами: интеграция с YARN и иерархическими очередями ресурсов.
*Простой доступ ко всем данным HDFS и внешним системным данным (например, HBase)
+
*Простой доступ ко всем данным [[HDFS (Hadoop Distributed Filesystem)|HDFS]]  и внешним системным данным (например, HBase)
 
*Собственный Hadoop: от хранилища (HDFS), управления ресурсами (YARN) до развертывания (Ambari).
 
*Собственный Hadoop: от хранилища (HDFS), управления ресурсами (YARN) до развертывания (Ambari).
 
*Аутентификация и детальная авторизация: Kerberos, SSL и доступ на основе ролей
 
*Аутентификация и детальная авторизация: Kerberos, SSL и доступ на основе ролей
*Расширенная библиотека доступа C / C ++ к HDFS и 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. Дата обновления: 04.06.2019. URL: https://cwiki.apache.org/confluence/display/HAWQ (дата обращения: 15.04.2019). </ref>  
Строка 40: Строка 40:
 
==Применение==
 
==Применение==
  
*Универсальный SQL - интерфейс к данным Hadoop для BI с ANSI SQL-93,-99,-2003
+
*Универсальный SQL - интерфейс к данным Hadoop для BI с[[ ANSI SQL]]-93,-99,-2003
 
   Запрос Cognos на 5000 строк с множеством функций  
 
   Запрос Cognos на 5000 строк с множеством функций  
 
*Универсальный инструмент для ad-hoc аналитики
 
*Универсальный инструмент для ad-hoc аналитики
Строка 56: Строка 56:
  
 
'''Включает в себя:'''
 
'''Включает в себя:'''
*1.500.000 строк кода C и C++ (из которых 200.000 заголовочных файлов)
+
*1.500.000 строк кода [[C (язык программирования)|C]] и [[C++ (язык программирования)|C++]] (из которых 200.000 заголовочных файлов)
 
*180.000 строк кода [[Python]]
 
*180.000 строк кода [[Python]]
 
*60.000 строк кода [[Java]]
 
*60.000 строк кода [[Java]]
Строка 74: Строка 74:
 
==Архитектура==
 
==Архитектура==
  
В типичном развертывании HAWQ каждый ведомый имеет физический раздел узла данных HDW и установленный NodeManager. Мастера для HAWQ, HDFS и YARN размещаются на отдельных узлах.
+
В типичном развертывании HAWQ каждый ведомый имеет физический раздел узла данных HDW и установленный NodeManager. Мастера для HAWQ, [[HDFS (Hadoop Distributed Filesystem)|HDFS]] и [[YARN (Yet Another Resource Negotiator)|YARN]] размещаются на отдельных узлах.
 
На рисунке 2 представлена диаграмма, описывающая высокоуровневое развертывание HAWQ.
 
На рисунке 2 представлена диаграмма, описывающая высокоуровневое развертывание HAWQ.
  
Строка 80: Строка 80:
  
  
HAWQ тесно интегрирован с YARN, структурой управления ресурсами Hadoop, для управления ресурсами запросов. HAWQ кэширует контейнеры из YARN в пуле ресурсов, а затем управляет этими ресурсами локально, используя собственное тонкое управление ресурсами HAWQ для пользователей и групп. Чтобы выполнить запрос, HAWQ выделяет набор виртуальных сегментов в соответствии со стоимостью запроса, определениями очереди ресурсов, локальностью данных и текущим использованием ресурсов в системе. Затем запрос отправляется на соответствующие физические хосты, которые могут быть подмножеством узлов или всего кластера. Средство проверки ресурсов HAWQ на каждом узле отслеживает и контролирует ресурсы, используемые запросом в реальном времени, чтобы избежать нарушений в использовании ресурсов.
+
HAWQ тесно интегрирован с [[YARN (Yet Another Resource Negotiator)|YARN]] , структурой управления ресурсами Hadoop, для управления ресурсами запросов. HAWQ кэширует контейнеры из [[YARN (Yet Another Resource Negotiator)|YARN]] в пуле ресурсов, а затем управляет этими ресурсами локально, используя собственное тонкое управление ресурсами HAWQ для пользователей и групп. Чтобы выполнить запрос, HAWQ выделяет набор виртуальных сегментов в соответствии со стоимостью запроса, определениями очереди ресурсов, локальностью данных и текущим использованием ресурсов в системе. Затем запрос отправляется на соответствующие физические хосты, которые могут быть подмножеством узлов или всего кластера. Средство проверки ресурсов HAWQ на каждом узле отслеживает и контролирует ресурсы, используемые запросом в реальном времени, чтобы избежать нарушений в использовании ресурсов.
  
 
На рисунке 3 изображена структура программных компонентов, составляющих HAWQ.
 
На рисунке 3 изображена структура программных компонентов, составляющих HAWQ.
Строка 93: Строка 93:
 
Конечные пользователи взаимодействуют с HAWQ через мастер и могут подключаться к базе данных, используя клиентские программы, такие как psql или интерфейсы прикладного программирования (API), такие как JDBC или ODBC.
 
Конечные пользователи взаимодействуют с HAWQ через мастер и могут подключаться к базе данных, используя клиентские программы, такие как psql или интерфейсы прикладного программирования (API), такие как JDBC или ODBC.
  
'''Мастер''' - это место, где находится глобальный системный каталог. Глобальный системный каталог - это набор системных таблиц, которые содержат метаданные о самой системе HAWQ. Мастер не содержит никаких пользовательских данных; Данные хранятся только в HDFS. Мастер аутентифицирует клиентские соединения, обрабатывает входящие команды SQL, распределяет рабочую нагрузку по сегментам, координирует результаты, возвращаемые каждым сегментом, и представляет окончательные результаты клиентской программе.  
+
'''Мастер''' - это место, где находится глобальный системный каталог. Глобальный системный каталог - это набор системных таблиц, которые содержат метаданные о самой системе HAWQ. Мастер не содержит никаких пользовательских данных; Данные хранятся только в [[HDFS (Hadoop Distributed Filesystem)|HDFS]] . Мастер аутентифицирует клиентские соединения, обрабатывает входящие команды SQL, распределяет рабочую нагрузку по сегментам, координирует результаты, возвращаемые каждым сегментом, и представляет окончательные результаты клиентской программе.  
 
На рисунке 4 представлена структура мастера сервера на момент 2016 г.
 
На рисунке 4 представлена структура мастера сервера на момент 2016 г.
  
Строка 110: Строка 110:
 
*Не хранит метаданные для каждой базы данных и таблицы
 
*Не хранит метаданные для каждой базы данных и таблицы
 
*Не хранит данные в локальной файловой системе
 
*Не хранит данные в локальной файловой системе
*Мастер отправляет запрос SQL в сегменты вместе со связанной информацией метаданных для обработки. Метаданные содержат URL-адрес HDFS для требуемой таблицы. Сегмент обращается к соответствующим данным, используя этот URL
+
*Мастер отправляет запрос SQL в сегменты вместе со связанной информацией метаданных для обработки. Метаданные содержат URL-адрес [[HDFS (Hadoop Distributed Filesystem)|HDFS]]  для требуемой таблицы. Сегмент обращается к соответствующим данным, используя этот URL
  
 
===Межсоединение===
 
===Межсоединение===
Строка 182: Строка 182:
 
===Политика распределения таблиц===
 
===Политика распределения таблиц===
 
Политика распределения таблиц по умолчанию в HAWQ является случайной.
 
Политика распределения таблиц по умолчанию в HAWQ является случайной.
Случайно распределенные таблицы имеют некоторые преимущества перед хеш-распределенными таблицами. Например, после расширения кластера HAWQ может использовать больше ресурсов автоматически без перераспределения данных. Для огромных таблиц перераспределение очень дорого, а локальность данных для случайно распределенных таблиц лучше после того, как базовая HDFS перераспределяет свои данные во время сбоев перебалансировки или DataNode. Это довольно часто, когда кластер большой.
+
Случайно распределенные таблицы имеют некоторые преимущества перед хеш-распределенными таблицами. Например, после расширения кластера HAWQ может использовать больше ресурсов автоматически без перераспределения данных. Для огромных таблиц перераспределение очень дорого, а локальность данных для случайно распределенных таблиц лучше после того, как базовая [[HDFS (Hadoop Distributed Filesystem)|HDFS]] перераспределяет свои данные во время сбоев перебалансировки или DataNode. Это довольно часто, когда кластер большой.
  
 
С другой стороны, для некоторых запросов распределенные по хэшу таблицы работают быстрее, чем случайно распределенные таблицы. Например, хеш-распределенные таблицы имеют некоторые преимущества в производительности для некоторых запросов TPC-H. Вы должны выбрать политику распространения, которая лучше всего подходит для сценария вашего приложения.
 
С другой стороны, для некоторых запросов распределенные по хэшу таблицы работают быстрее, чем случайно распределенные таблицы. Например, хеш-распределенные таблицы имеют некоторые преимущества в производительности для некоторых запросов TPC-H. Вы должны выбрать политику распространения, которая лучше всего подходит для сценария вашего приложения.
Строка 201: Строка 201:
  
 
HAWQ имеет возможность управлять ресурсами, используя следующие механизмы:
 
HAWQ имеет возможность управлять ресурсами, используя следующие механизмы:
*Глобальное управление ресурсами. Вы можете интегрировать HAWQ с менеджером ресурсов YARN для запроса или возврата ресурсов по мере необходимости. Если вы не интегрируете HAWQ с YARN, HAWQ исключительно использует ресурсы кластера и управляет своими собственными ресурсами. Если вы интегрируете HAWQ с YARN, то HAWQ автоматически выбирает ресурсы из YARN и управляет полученными ресурсами через свои внутренние очереди ресурсов. Ресурсы возвращаются в YARN автоматически, когда ресурсы больше не используются.
+
*Глобальное управление ресурсами. Вы можете интегрировать HAWQ с менеджером ресурсов YARN для запроса или возврата ресурсов по мере необходимости. Если вы не интегрируете HAWQ с [[YARN (Yet Another Resource Negotiator)|YARN]], HAWQ исключительно использует ресурсы кластера и управляет своими собственными ресурсами. Если вы интегрируете HAWQ с [[YARN (Yet Another Resource Negotiator)|YARN]], то HAWQ автоматически выбирает ресурсы из YARN и управляет полученными ресурсами через свои внутренние очереди ресурсов. Ресурсы возвращаются в YARN автоматически, когда ресурсы больше не используются.
 
*Пользовательские иерархические очереди ресурсов (см. рисунок 8). Администраторы HAWQ или суперпользователи проектируют и определяют очереди ресурсов, используемые для организации распределения ресурсов по запросам.
 
*Пользовательские иерархические очереди ресурсов (см. рисунок 8). Администраторы HAWQ или суперпользователи проектируют и определяют очереди ресурсов, используемые для организации распределения ресурсов по запросам.
 
*Динамическое распределение ресурсов во время выполнения запроса. HAWQ динамически распределяет ресурсы на основе определений очереди ресурсов. HAWQ автоматически распределяет ресурсы на основе запущенных (или поставленных в очередь) запросов и емкости очереди ресурсов.
 
*Динамическое распределение ресурсов во время выполнения запроса. HAWQ динамически распределяет ресурсы на основе определений очереди ресурсов. HAWQ автоматически распределяет ресурсы на основе запущенных (или поставленных в очередь) запросов и емкости очереди ресурсов.
Строка 210: Строка 210:
  
  
==Кэш каталога HDFS==
+
==Кэш каталога [[HDFS (Hadoop Distributed Filesystem)|HDFS]] ==
'''Кэш каталога HDFS''' - это служба кэширования, используемая мастером HAWQ для определения информации о распределении табличных данных в HDFS.
+
'''Кэш каталога [[HDFS (Hadoop Distributed Filesystem)|HDFS]] ''' - это служба кэширования, используемая мастером HAWQ для определения информации о распределении табличных данных в [[HDFS (Hadoop Distributed Filesystem)|HDFS]].
  
HDFS работает медленно при обработке RPC, особенно когда число одновременных запросов велико. Чтобы решить, какие сегменты обрабатывают какую часть данных, HAWQ требуется информация о местонахождении данных из узлов имен HDFS. Кэш каталога HDFS используется для кэширования информации о местоположении данных и ускорения операций RPC HDFS.
+
HDFS работает медленно при обработке RPC, особенно когда число одновременных запросов велико. Чтобы решить, какие сегменты обрабатывают какую часть данных, HAWQ требуется информация о местонахождении данных из узлов имен [[HDFS (Hadoop Distributed Filesystem)|HDFS]] . Кэш каталога [[HDFS (Hadoop Distributed Filesystem)|HDFS]]  используется для кэширования информации о местоположении данных и ускорения операций RPC [[HDFS (Hadoop Distributed Filesystem)|HDFS]].
  
 
==Выполнение запросов==
 
==Выполнение запросов==
 +
===Характеристики===
 
*Выполнение запросов является динамическим и гибким процессом   
 
*Выполнение запросов является динамическим и гибким процессом   
 
**Возможно Scale-up/down масштабирование  
 
**Возможно Scale-up/down масштабирование  
Строка 235: Строка 236:
 
**Распределение таблицы: Hash vs Random
 
**Распределение таблицы: Hash vs Random
 
**UDFs и external tables  
 
**UDFs и external tables  
 +
 +
===Графическое описание===
 +
 +
 +
[[Файл:Выполнение_запросов_1.png|700px|thumb|обрамить|центр|{{center|Рисунок 9 – Выполнение запросов}}]]
 +
 +
 +
 +
 +
[[Файл:Выполнение_запросов_2.png|700px|thumb|обрамить|центр|{{center|Рисунок 10 – Выполнение запросов}}]]
 +
 +
 +
 +
 +
[[Файл:Выполнение_запросов_3.png|700px|thumb|обрамить|центр|{{center|Рисунок 11 – Выполнение запросов}}]]
 +
 +
 +
 +
 +
[[Файл:Выполнение_запросов_4.png|700px|thumb|обрамить|центр|{{center|Рисунок 12 – Выполнение запросов}}]]
 +
 +
 +
 +
 +
[[Файл:Выполнение_запросов_5.png|700px|thumb|обрамить|центр|{{center|Рисунок 13 – Выполнение запросов}}]]
 +
 +
 +
 +
 +
[[Файл:Выполнение_запросов_6.png|700px|thumb|обрамить|центр|{{center|Рисунок 14 – Выполнение запросов}}]]
 +
 +
 +
 +
 +
[[Файл:Выполнение_запросов_7.png|700px|thumb|обрамить|центр|{{center|Рисунок 15 – Выполнение запросов}}]]
 +
 +
 +
 +
 +
[[Файл:Выполнение_запросов_8.png|700px|thumb|обрамить|центр|{{center|Рисунок 16 – Выполнение запросов}}]]
 +
 +
 +
 +
 +
[[Файл:Выполнение_запросов_9.png|700px|thumb|обрамить|центр|{{center|Рисунок 17 – Выполнение запросов}}]]
 +
 +
 +
 +
 +
[[Файл:Выполнение_запросов_10.png|700px|thumb|обрамить|центр|{{center|Рисунок 18 – Выполнение запросов}}]]
 +
  
 
==Источники==
 
==Источники==
 
{{reflist|group=Источник}}
 
{{reflist|group=Источник}}

Версия 23:55, 14 июня 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. Дата обновления: 04.06.2019. URL: https://cwiki.apache.org/confluence/display/HAWQ (дата обращения: 15.04.2019).
  2. SQL для HADOOP на базе PostgreSQL // Apache. Дата обновления: 04.06.2019. URL: https://pgday.ru/files/papers/78/PGDay%20Apache%20HAWQ.pdf (дата обращения: 20.04.2019).