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?
32. Кластер с HAWQ
Сервер 1
SNameNode
Сервер 4
ZK JM
NameNode
Сервер 3
ZK JM
Сервер 2
ZK JM
Сервер 6
Datanode
Сервер N
Datanode
Сервер 5
Datanode
interconnect
…
33. Кластер с HAWQ
Сервер 1
SNameNode
Сервер 4
ZK JM
NameNode
Сервер 3
ZK JM
Сервер 2
ZK JM
Сервер 6
Datanode
Сервер N
Datanode
Сервер 5
Datanode
YARN NM YARN NM YARN NM
YARN RM
YARN App
Timeline
interconnect
…
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 на стадии зарождения
Присоединяйтесь!