HAWQ — один из лучших на рынке движков SQL-on-Hadoop, который не раз доказывал свою лидирующую позицию в открытых тестированиях. Что еще более интересно, в конце сентября этого года Pivotal открыл его исходный код под лицензией Apache, а также разместил сам проект в инкубаторе Apache (http://hawq.incubator.apache.org), что делает этот инструмент доступным большому кругу пользователей и намного более привлекательным для компаний — лидеров интернет-индустрии.
Работая в Pivotal, я участвовал в развитии и внедрении этого продукта с первого дня его существования.
В этой презентации я раскрою следующие темы:
+ Что такое HAWQ и зачем он был создан.
+ Кластерная архитектура HAWQ.
+ Принципы работы HAWQ.
+ Внутреннее устройство процессов HAWQ.
+ Интеграция с внешними системами.
+ Альтернативные решения.
2. Кто я?
Enterprise Architect @ Pivotal
• 7 лет в задачах обработки данных
• 5 лет с MPP-системами
• 4 года с Hadoop
• HAWQ - с первой beta
• Отвечаю за архитектуру всех внедрений HAWQ и
Greenplum в EMEA
• Spark contributor
• http://0x0fff.com
5. О чем расскажу?
• Что такое HAWQ
• Зачем он нужен
• Из каких компонент он состоит
6. О чем расскажу?
• Что такое HAWQ
• Зачем он нужен
• Из каких компонент он состоит
• Как он работает
7. О чем расскажу?
• Что такое HAWQ
• Зачем он нужен
• Из каких компонент он состоит
• Как он работает
• Пример выполнения запроса
8. О чем расскажу?
• Что такое HAWQ
• Зачем он нужен
• Из каких компонент он состоит
• Как он работает
• Пример выполнения запроса
• Альтернативные решения
17. HAWQ – это …
• 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
18. HAWQ – это …
• 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
19. HAWQ – это …
• 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
20. HAWQ – это …
• 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
• 23’000 строк Makefile’ов
21. HAWQ – это …
• 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
• 23’000 строк Makefile’ов
• 7’000 строк shell-скриптов
22. HAWQ – это …
• 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
• 23’000 строк Makefile’ов
• 7’000 строк shell-скриптов
• Более 50 корпоративных клиентов
23. HAWQ – это …
• 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
• 23’000 строк Makefile’ов
• 7’000 строк shell-скриптов
• Более 50 корпоративных клиентов
– Из них более 10 в EMEA
24. Apache HAWQ
• Apache HAWQ (incubating) с 09’2015
– http://hawq.incubator.apache.org
– https://github.com/apache/incubator-hawq
• Что находится в Open Source
– Исходники версии HAWQ 2.0 альфа
– Релиз HAWQ 2.0 бэта до конца 2015 года
– Релиз HAWQ 2.0 GA в начале 2016
• Сообщество еще только зарождается –
присоединяйтесь!
26. Зачем он нужен?
• Универсальный SQL-интерфейс к данным
Hadoop для BI с ANSI SQL-92, -99, -2003
27. Зачем он нужен?
• Универсальный SQL-интерфейс к данным
Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000
строк с множеством оконных функций
28. Зачем он нужен?
• Универсальный SQL-интерфейс к данным
Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000
строк с множеством оконных функций
• Универсальный инструмент для ad hoc
аналитики
29. Зачем он нужен?
• Универсальный SQL-интерфейс к данным
Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000
строк с множеством оконных функций
• Универсальный инструмент для ad hoc
аналитики
– Пример из практики – распарсить URL,
выдернув из него имя хоста и протокол
30. Зачем он нужен?
• Универсальный SQL-интерфейс к данным
Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000
строк с множеством оконных функций
• Универсальный инструмент для ad hoc
аналитики
– Пример из практики – распарсить URL,
выдернув из него имя хоста и протокол
• Хорошая производительность
31. Зачем он нужен?
• Универсальный SQL-интерфейс к данным
Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000
строк с множеством оконных функций
• Универсальный инструмент для ad hoc
аналитики
– Пример из практики – распарсить URL,
выдернув из него имя хоста и протокол
• Хорошая производительность
– Сколько раз данные будут скинуты на HDD для
выполнения SQL-запроса в Hive?
42. Метаданные
• Структура аналогична структуре каталога
Postgres
• Статистика
– Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
43. Метаданные
• Структура аналогична структуре каталога
Postgres
• Статистика
– Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
– Гистограмма для каждого числового поля
44. Метаданные
• Структура аналогична структуре каталога
Postgres
• Статистика
– Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
– Гистограмма для каждого числового поля
– Количество уникальных значений в поле
45. Метаданные
• Структура аналогична структуре каталога
Postgres
• Статистика
– Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
– Гистограмма для каждого числового поля
– Количество уникальных значений в поле
– Количество null значений в поле
46. Метаданные
• Структура аналогична структуре каталога
Postgres
• Статистика
– Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
– Гистограмма для каждого числового поля
– Количество уникальных значений в поле
– Количество null значений в поле
– Средний размер значения поля в байтах
50. Статистика
Без статистики
Количество строк
Join двух таблиц, сколько записей в результате?
ü От 0 до бесконечности
Join двух таблиц по 1000 записей в каждой, сколько
записей в результате?
ü От 0 до 1’000’000
51. Статистика
Без статистики
Количество строк
Гистограммы и MCV
Join двух таблиц, сколько записей в результате?
ü От 0 до бесконечности
Join двух таблиц по 1000 записей в каждой, сколько
записей в результате?
ü От 0 до 1’000’000
Join двух таблиц по 1000 записей в каждой, с известной
кардинальностью, гистограммой распределения,
наиболее частыми значениями, количеством null?
52. Статистика
Без статистики
Количество строк
Гистограммы и MCV
Join двух таблиц, сколько записей в результате?
ü От 0 до бесконечности
Join двух таблиц по 1000 записей в каждой, сколько
записей в результате?
ü От 0 до 1’000’000
Join двух таблиц по 1000 записей в каждой, с известной
кардинальностью, гистограммой распределения,
наиболее частыми значениями, количеством null?
ü ~ От 500 до 1’500
53. Метаданные
• Информация о структуре таблицы
ID Name Num Price
1 Яблоко 10 50
2 Груша 20 80
3 Банан 40 40
4 Апельсин 25 50
5 Киви 5 120
6 Арбуз 20 30
7 Дыня 40 100
8 Ананас 35 90
54. Метаданные
• Информация о структуре таблицы
– Поля распределения
ID Name Num Price
1 Яблоко 10 50
2 Груша 20 80
3 Банан 40 40
4 Апельсин 25 50
5 Киви 5 120
6 Арбуз 20 30
7 Дыня 40 100
8 Ананас 35 90
hash(ID)
55. Метаданные
• Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
ID Name Num Price
1 Яблоко 10 50
2 Груша 20 80
3 Банан 40 40
4 Апельсин 25 50
5 Киви 5 120
6 Арбуз 20 30
7 Дыня 40 100
8 Ананас 35 90
hash(ID)
ID Name Num Price
1 Яблоко 10 50
2 Груша 20 80
3 Банан 40 40
4 Апельсин 25 50
5 Киви 5 120
6 Арбуз 20 30
7 Дыня 40 100
8 Ананас 35 90
56. Метаданные
• Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
– Партиционирование (hash, list, range)
ID Name Num Price
1 Яблоко 10 50
2 Груша 20 80
3 Банан 40 40
4 Апельсин 25 50
5 Киви 5 120
6 Арбуз 20 30
7 Дыня 40 100
8 Ананас 35 90
hash(ID)
ID Name Num Price
1 Яблоко 10 50
2 Груша 20 80
3 Банан 40 40
4 Апельсин 25 50
5 Киви 5 120
6 Арбуз 20 30
7 Дыня 40 100
8 Ананас 35 90
57. Метаданные
• Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
– Партиционирование (hash, list, range)
• Общие метаданные
– Пользователи и группы
58. Метаданные
• Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
– Партиционирование (hash, list, range)
• Общие метаданные
– Пользователи и группы
– Права доступа к объектам
59. Метаданные
• Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
– Партиционирование (hash, list, range)
• Общие метаданные
– Пользователи и группы
– Права доступа к объектам
• Хранимые процедуры
– PL/pgSQL, PL/Java, PL/Python, PL/Perl, PL/R
63. Оптимизатор Запросов
• Используется cost-based оптимизатор
• Выбрать можно один из двух
– Planner – модифицированный оптимизатор
Postgres
– ORCA (Pivotal Query Optimizer) – разработан
специально для HAWQ
64. Оптимизатор Запросов
• Используется cost-based оптимизатор
• Выбрать можно один из двух
– Planner – модифицированный оптимизатор
Postgres
– ORCA (Pivotal Query Optimizer) – разработан
специально для HAWQ
• Хинты оптимизатора работают как в Postgres
65. Оптимизатор Запросов
• Используется cost-based оптимизатор
• Выбрать можно один из двух
– Planner – модифицированный оптимизатор
Postgres
– ORCA (Pivotal Query Optimizer) – разработан
специально для HAWQ
• Хинты оптимизатора работают как в Postgres
– Включить/отключить определенную операцию
66. Оптимизатор Запросов
• Используется cost-based оптимизатор
• Выбрать можно один из двух
– Planner – модифицированный оптимизатор
Postgres
– ORCA (Pivotal Query Optimizer) – разработан
специально для HAWQ
• Хинты оптимизатора работают как в Postgres
– Включить/отключить определенную операцию
– Изменить веса базовых операций
68. Формат Хранения
Какой формат хранения данных является
наиболее оптимальным?
ü Зависит от того, что является для вас
критерием оптимальности
69. Формат Хранения
Какой формат хранения данных является
наиболее оптимальным?
ü Зависит от того, что является для вас
критерием оптимальности
– Минимальное потребление ресурсов CPU
70. Формат Хранения
Какой формат хранения данных является
наиболее оптимальным?
ü Зависит от того, что является для вас
критерием оптимальности
– Минимальное потребление ресурсов CPU
– Минимальный объем занимаемого дискового пр-ва
71. Формат Хранения
Какой формат хранения данных является
наиболее оптимальным?
ü Зависит от того, что является для вас
критерием оптимальности
– Минимальное потребление ресурсов CPU
– Минимальный объем занимаемого дискового пр-ва
– Минимальное время извлечения записи по ключу
72. Формат Хранения
Какой формат хранения данных является
наиболее оптимальным?
ü Зависит от того, что является для вас
критерием оптимальности
– Минимальное потребление ресурсов CPU
– Минимальный объем занимаемого дискового пр-ва
– Минимальное время извлечения записи по ключу
– Минимальное время извлечения подмножества
столбцов таблицы
73. Формат Хранения
Какой формат хранения данных является
наиболее оптимальным?
ü Зависит от того, что является для вас
критерием оптимальности
– Минимальное потребление ресурсов CPU
– Минимальный объем занимаемого дискового пр-ва
– Минимальное время извлечения записи по ключу
– Минимальное время извлечения подмножества
столбцов таблицы
– что-то другое?
74. Формат Хранения
• Построчное хранение
– «Обрезанный» формат postgres
• Без toast
• Без ctid, xmin, xmax, cmin, cmax
75. Формат Хранения
• Построчное хранение
– «Обрезанный» формат postgres
• Без toast
• Без ctid, xmin, xmax, cmin, cmax
– Сжатие
• Без сжатия
• Quicklz
• Zlib уровни 1 - 9
80. Разделение Ресурсов
• Два основных варианта
– Независимое разделение – HAWQ и YARN не
знают друг о друге
81. Разделение Ресурсов
• Два основных варианта
– Независимое разделение – HAWQ и YARN не
знают друг о друге
– YARN – HAWQ запрашивает выделение
ресурсов у менеджера ресурсов YARN
82. Разделение Ресурсов
• Два основных варианта
– Независимое разделение – HAWQ и YARN не
знают друг о друге
– YARN – HAWQ запрашивает выделение
ресурсов у менеджера ресурсов YARN
• Гибкая утилизация кластера
– Запрос может выполняться на части нод
83. Разделение Ресурсов
• Два основных варианта
– Независимое разделение – HAWQ и YARN не
знают друг о друге
– YARN – HAWQ запрашивает выделение
ресурсов у менеджера ресурсов YARN
• Гибкая утилизация кластера
– Запрос может выполняться на части нод
– Запрос может иметь несколько потоков
исполнения на каждой из нод
84. Разделение Ресурсов
• Два основных варианта
– Независимое разделение – HAWQ и YARN не
знают друг о друге
– YARN – HAWQ запрашивает выделение
ресурсов у менеджера ресурсов YARN
• Гибкая утилизация кластера
– Запрос может выполняться на части нод
– Запрос может иметь несколько потоков
исполнения на каждой из нод
– Желаемый параллелизм можно задать вручную
87. Разделение Ресурсов
• Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
88. Разделение Ресурсов
• Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
89. Разделение Ресурсов
• Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
– Лимит по ядрам CPU
90. Разделение Ресурсов
• Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
– Лимит по ядрам CPU
– MIN/MAX потоков исполнения в целом по системе
91. Разделение Ресурсов
• Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
– Лимит по ядрам CPU
– MIN/MAX потоков исполнения в целом по системе
– MIN/MAX потоков исполнения на каждой ноде
92. Разделение Ресурсов
• Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
– Лимит по ядрам CPU
– MIN/MAX потоков исполнения в целом по системе
– MIN/MAX потоков исполнения на каждой ноде
• Задаются для пользователя или группы
93. Внешние Данные
• PXF
– Фреймворк для доступа к внешним данным
– Легко расширяется, многие пишут свои плагины
– Официальные плагины: CSV, SequenceFile,
Avro, Hive, HBase
– Open Source плагины: JSON, Accumulo,
Cassandra, JDBC, Redis, Pipe
94. Внешние Данные
• PXF
– Фреймворк для доступа к внешним данным
– Легко расширяется, многие пишут свои плагины
– Официальные плагины: CSV, SequenceFile,
Avro, Hive, HBase
– Open Source плагины: JSON, Accumulo,
Cassandra, JDBC, Redis, Pipe
• HCatalog
– HAWQ видит таблицы из HCatalog как свои
внутренние таблицы
124. Скорость
• Данные не приземляются на диск без
необходимости
• Данные не буферизируются на сегментах без
необходимости
125. Скорость
• Данные не приземляются на диск без
необходимости
• Данные не буферизируются на сегментах без
необходимости
• Данные передаются между нодами по UDP
126. Скорость
• Данные не приземляются на диск без
необходимости
• Данные не буферизируются на сегментах без
необходимости
• Данные передаются между нодами по UDP
• Хороший стоимостной оптимизатор запросов
127. Скорость
• Данные не приземляются на диск без
необходимости
• Данные не буферизируются на сегментах без
необходимости
• Данные передаются между нодами по UDP
• Хороший стоимостной оптимизатор запросов
• Оптимальность кода на C++
128. Скорость
• Данные не приземляются на диск без
необходимости
• Данные не буферизируются на сегментах без
необходимости
• Данные передаются между нодами по UDP
• Хороший стоимостной оптимизатор запросов
• Оптимальность кода на C++
• Гибкая настройка параллелизма
139. Задачи
• Интеграция с AWS и S3
• Интеграция с Mesos
• Улучшение интеграции с Ambari
140. Задачи
• Интеграция с AWS и S3
• Интеграция с Mesos
• Улучшение интеграции с Ambari
• Интеграция с дистрибутивами Cloudera,
MapR, IBM
141. Задачи
• Интеграция с AWS и S3
• Интеграция с Mesos
• Улучшение интеграции с Ambari
• Интеграция с дистрибутивами Cloudera,
MapR, IBM
• Сделать самый быстрый и удобный движок
SQL-on-Hadoop
142. Заключение
• Современный движок SQL-on-Hadoop
• Для анализа структурированных данных
• Объединяет в себе лучшие качества
альтернативных решений
• Новичок среди open source
• Community на стадии зарождения
Присоединяйтесь!