Архитектура hawq / Алексей Грищенко (pivotal)
TRANSCRIPT
Архитектура HAWQ Грищенко Алексей
Кто я? Enterprise Architect @ Pivotal • 7 лет в задачах обработки данных
• 5 лет с MPP-системами
• 4 года с Hadoop
• HAWQ - с первой beta
• Отвечаю за архитектуру всех внедрений HAWQ и Greenplum в EMEA
• Spark contributor
• http://0x0fff.com
О чем расскажу? • Что такое HAWQ
О чем расскажу? • Что такое HAWQ
• Зачем он нужен
О чем расскажу? • Что такое HAWQ
• Зачем он нужен
• Из каких компонент он состоит
О чем расскажу? • Что такое HAWQ
• Зачем он нужен
• Из каких компонент он состоит
• Как он работает
О чем расскажу? • Что такое HAWQ
• Зачем он нужен
• Из каких компонент он состоит
• Как он работает
• Пример выполнения запроса
О чем расскажу? • Что такое HAWQ
• Зачем он нужен
• Из каких компонент он состоит
• Как он работает
• Пример выполнения запроса
• Альтернативные решения
Что такое • Аналитический движок SQL-on-Hadoop
Что такое • Аналитический движок SQL-on-Hadoop
• HAdoop With Queries
Что такое • Аналитический движок SQL-on-Hadoop
• HAdoop With Queries
Postgres Greenplum HAWQ
2005 Fork Postgres 8.0.2
Что такое • Аналитический движок SQL-on-Hadoop
• HAdoop With Queries
Postgres Greenplum HAWQ
2005 Fork Postgres 8.0.2
2009 Rebase Postgres 8.2.15
Что такое • Аналитический движок SQL-on-Hadoop
• HAdoop With Queries
Postgres Greenplum HAWQ
2005 Fork Postgres 8.0.2
2009 Rebase Postgres 8.2.15
2011 Fork GPDB 4.2.0.0
Что такое • Аналитический движок SQL-on-Hadoop
• HAdoop With Queries
Postgres Greenplum HAWQ
2005 Fork Postgres 8.0.2
2009 Rebase Postgres 8.2.15
2011 Fork GPDB 4.2.0.0
2013 HAWQ 1.0.0.0
Что такое • Аналитический движок SQL-on-Hadoop
• HAdoop With Queries
Postgres Greenplum HAWQ
2005 Fork Postgres 8.0.2
2009 Rebase Postgres 8.2.15
2011 Fork GPDB 4.2.0.0
2013 HAWQ 1.0.0.0
HAWQ 2.0.0.0 Open Source 2015
HAWQ – это … • 1’500’000 строк кода C и C++
HAWQ – это … • 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
HAWQ – это … • 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
HAWQ – это … • 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
HAWQ – это … • 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
• 23’000 строк Makefile’ов
HAWQ – это … • 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
• 23’000 строк Makefile’ов
• 7’000 строк shell-скриптов
HAWQ – это … • 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
• 23’000 строк Makefile’ов
• 7’000 строк shell-скриптов
• Более 50 корпоративных клиентов
HAWQ – это … • 1’500’000 строк кода C и C++
– Из которых 200’000 только в заголовочных файлах
• 180’000 строк кода Python
• 60’000 строк кода Java
• 23’000 строк Makefile’ов
• 7’000 строк shell-скриптов
• Более 50 корпоративных клиентов – Из них более 10 в EMEA
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
• Сообщество еще только зарождается – присоединяйтесь!
Зачем он нужен?
Зачем он нужен?
• Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003
Зачем он нужен?
• Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций
Зачем он нужен?
• Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций
• Универсальный инструмент для ad hoc аналитики
Зачем он нужен?
• Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций
• Универсальный инструмент для ad hoc аналитики
– Пример из практики – распарсить URL, выдернув из него имя хоста и протокол
Зачем он нужен?
• Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций
• Универсальный инструмент для ad hoc аналитики
– Пример из практики – распарсить URL, выдернув из него имя хоста и протокол
• Хорошая производительность
Зачем он нужен?
• Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003
– Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций
• Универсальный инструмент для ad hoc аналитики
– Пример из практики – распарсить URL, выдернув из него имя хоста и протокол
• Хорошая производительность – Сколько раз данные будут скинуты на HDD для выполнения SQL-запроса в Hive?
Кластер с HAWQ Сервер1
SNameNode
Сервер4
ZK JM
NameNode
Сервер3
ZK JM
Сервер2
ZK JM
Сервер6
Datanode
СерверN
Datanode
Сервер5
Datanode
interconnect
…
Кластер с HAWQ Сервер1
SNameNode
Сервер4
ZK JM
NameNode
Сервер3
ZK JM
Сервер2
ZK JM
Сервер6
Datanode
СерверN
Datanode
Сервер5
Datanode
YARNNM YARNNM YARNNM
YARNRM YARNAppTimeline
interconnect
…
Кластер с HAWQ
HAWQMaster
Сервер1
SNameNode
Сервер4
ZK JM
NameNode
Сервер3
ZK JM
HAWQStandby
Сервер2
ZK JM
HAWQSegment
Сервер6
Datanode
HAWQSegment
СерверN
Datanode
HAWQSegment
Сервер5
Datanode
YARNNM YARNNM YARNNM
YARNRM YARNAppTimeline
interconnect
…
Мастер Сервера Сервер1
SNameNode
Сервер4
ZK JM
NameNode
Сервер3
ZK JM
Сервер2
ZK JM
HAWQSegment
Сервер6
Datanode
HAWQSegment
СерверN
Datanode
HAWQSegment
Сервер5
Datanode
YARNNM YARNNM YARNNM
YARNRM YARNAppTimeline
interconnect
…
HAWQMaster HAWQStandby
Мастер Сервера
HAWQMaster
Парсерзапросов
Оптимизаторзапросов
Глобальныйменеджерресурсов
Менеджертранзакций
Диспетчерпроцессов
Каталогметаданных
HAWQStandbyMaster
Парсерзапросов
Оптимизаторзапросов
Глобальныйменеджерресурсов
Менеджертранзакций
Диспетчерпроцессов
Каталогметаданных
WALрепл.
HAWQMaster HAWQStandby
Сегменты Сервер1
SNameNode
Сервер4
ZK JM
NameNode
Сервер3
ZK JM
Сервер2
ZK JM
Сервер6
Datanode
СерверN
Datanode
Сервер5
Datanode
YARNNM YARNNM YARNNM
YARNRM YARNAppTimeline
interconnect
HAWQSegment HAWQSegmentHAWQSegment …
Сегменты HAWQSegment
Движоквыполнениязапросов
libhdfs3
РасширенияPXF
HDFSDatanode
ЛокальнаяФСДиректориядля
временныхданных
Логи
YARNNodeManager
Метаданные • Структура аналогична структуре каталога
Postgres
Метаданные • Структура аналогична структуре каталога
Postgres
• Статистика
Метаданные • Структура аналогична структуре каталога
Postgres
• Статистика – Количество записей и страниц в таблице
Метаданные • Структура аналогична структуре каталога
Postgres
• Статистика – Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
Метаданные • Структура аналогична структуре каталога
Postgres
• Статистика – Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
– Гистограмма для каждого числового поля
Метаданные • Структура аналогична структуре каталога
Postgres
• Статистика – Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
– Гистограмма для каждого числового поля
– Количество уникальных значений в поле
Метаданные • Структура аналогична структуре каталога
Postgres
• Статистика – Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
– Гистограмма для каждого числового поля
– Количество уникальных значений в поле
– Количество null значений в поле
Метаданные • Структура аналогична структуре каталога
Postgres
• Статистика – Количество записей и страниц в таблице
– Наиболее частые значения для каждого поля
– Гистограмма для каждого числового поля
– Количество уникальных значений в поле
– Количество null значений в поле
– Средний размер значения поля в байтах
Статистика
Без статистики Join двух таблиц, сколько записей в результате?
Статистика
Без статистики Join двух таблиц, сколько записей в результате?
ü От 0 до бесконечности
Статистика
Без статистики
Количество строк
Join двух таблиц, сколько записей в результате? ü От 0 до бесконечности
Join двух таблиц по 1000 записей в каждой, сколько записей в результате?
Статистика
Без статистики
Количество строк
Join двух таблиц, сколько записей в результате? ü От 0 до бесконечности
Join двух таблиц по 1000 записей в каждой, сколько записей в результате?
ü От 0 до 1’000’000
Статистика
Без статистики
Количество строк
Гистограммы и MCV
Join двух таблиц, сколько записей в результате? ü От 0 до бесконечности
Join двух таблиц по 1000 записей в каждой, сколько записей в результате?
ü От 0 до 1’000’000
Join двух таблиц по 1000 записей в каждой, с известной кардинальностью, гистограммой распределения, наиболее частыми значениями, количеством null?
Статистика
Без статистики
Количество строк
Гистограммы и MCV
Join двух таблиц, сколько записей в результате? ü От 0 до бесконечности
Join двух таблиц по 1000 записей в каждой, сколько записей в результате?
ü От 0 до 1’000’000
Join двух таблиц по 1000 записей в каждой, с известной кардинальностью, гистограммой распределения, наиболее частыми значениями, количеством null?
ü ~ От 500 до 1’500
Метаданные • Информация о структуре таблицы
ID Name Num Price1 Яблоко 10 502 Груша 20 803 Банан 40 404 Апельсин 25 505 Киви 5 1206 Арбуз 20 307 Дыня 40 1008 Ананас 35 90
Метаданные • Информация о структуре таблицы
– Поля распределения
ID Name Num Price1 Яблоко 10 502 Груша 20 803 Банан 40 404 Апельсин 25 505 Киви 5 1206 Арбуз 20 307 Дыня 40 1008 Ананас 35 90
hash(ID)
Метаданные • Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
ID Name Num Price1 Яблоко 10 502 Груша 20 803 Банан 40 404 Апельсин 25 505 Киви 5 1206 Арбуз 20 307 Дыня 40 1008 Ананас 35 90
hash(ID)
ID Name Num Price1 Яблоко 10 50
2 Груша 20 803 Банан 40 40
4 Апельсин 25 505 Киви 5 120
6 Арбуз 20 307 Дыня 40 100
8 Ананас 35 90
Метаданные • Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
– Партиционирование (hash, list, range)
ID Name Num Price1 Яблоко 10 502 Груша 20 803 Банан 40 404 Апельсин 25 505 Киви 5 1206 Арбуз 20 307 Дыня 40 1008 Ананас 35 90
hash(ID)
ID Name Num Price1 Яблоко 10 50
2 Груша 20 803 Банан 40 40
4 Апельсин 25 50
5 Киви 5 1206 Арбуз 20 307 Дыня 40 100
8 Ананас 35 90
Метаданные • Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
– Партиционирование (hash, list, range)
• Общие метаданные – Пользователи и группы
Метаданные • Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
– Партиционирование (hash, list, range)
• Общие метаданные – Пользователи и группы
– Права доступа к объектам
Метаданные • Информация о структуре таблицы
– Поля распределения
– Количество hash bucket распределения
– Партиционирование (hash, list, range)
• Общие метаданные – Пользователи и группы
– Права доступа к объектам
• Хранимые процедуры – PL/pgSQL, PL/Java, PL/Python, PL/Perl, PL/R
Оптимизатор Запросов • Используется cost-based оптимизатор
Оптимизатор Запросов • Используется cost-based оптимизатор
• Выбрать можно один из двух
Оптимизатор Запросов • Используется cost-based оптимизатор
• Выбрать можно один из двух – Planner – модифицированный оптимизатор
Postgres
Оптимизатор Запросов • Используется cost-based оптимизатор
• Выбрать можно один из двух – Planner – модифицированный оптимизатор
Postgres
– ORCA (Pivotal Query Optimizer) – разработан специально для HAWQ
Оптимизатор Запросов • Используется cost-based оптимизатор
• Выбрать можно один из двух – Planner – модифицированный оптимизатор
Postgres
– ORCA (Pivotal Query Optimizer) – разработан специально для HAWQ
• Хинты оптимизатора работают как в Postgres
Оптимизатор Запросов • Используется cost-based оптимизатор
• Выбрать можно один из двух – Planner – модифицированный оптимизатор
Postgres
– ORCA (Pivotal Query Optimizer) – разработан специально для HAWQ
• Хинты оптимизатора работают как в Postgres – Включить/отключить определенную операцию
Оптимизатор Запросов • Используется cost-based оптимизатор
• Выбрать можно один из двух – Planner – модифицированный оптимизатор
Postgres
– ORCA (Pivotal Query Optimizer) – разработан специально для HAWQ
• Хинты оптимизатора работают как в Postgres – Включить/отключить определенную операцию
– Изменить веса базовых операций
Формат Хранения Какой формат хранения данных является наиболее оптимальным?
Формат Хранения Какой формат хранения данных является наиболее оптимальным?
ü Зависит от того, что является для вас критерием оптимальности
Формат Хранения Какой формат хранения данных является наиболее оптимальным?
ü Зависит от того, что является для вас критерием оптимальности – Минимальное потребление ресурсов CPU
Формат Хранения Какой формат хранения данных является наиболее оптимальным?
ü Зависит от того, что является для вас критерием оптимальности – Минимальное потребление ресурсов CPU
– Минимальный объем занимаемого дискового пр-ва
Формат Хранения Какой формат хранения данных является наиболее оптимальным?
ü Зависит от того, что является для вас критерием оптимальности – Минимальное потребление ресурсов CPU
– Минимальный объем занимаемого дискового пр-ва
– Минимальное время извлечения записи по ключу
Формат Хранения Какой формат хранения данных является наиболее оптимальным?
ü Зависит от того, что является для вас критерием оптимальности – Минимальное потребление ресурсов CPU
– Минимальный объем занимаемого дискового пр-ва
– Минимальное время извлечения записи по ключу
– Минимальное время извлечения подмножества столбцов таблицы
Формат Хранения Какой формат хранения данных является наиболее оптимальным?
ü Зависит от того, что является для вас критерием оптимальности – Минимальное потребление ресурсов CPU
– Минимальный объем занимаемого дискового пр-ва
– Минимальное время извлечения записи по ключу
– Минимальное время извлечения подмножества столбцов таблицы
– что-то другое?
Формат Хранения • Построчное хранение
– «Обрезанный» формат postgres
• Без toast
• Без ctid, xmin, xmax, cmin, cmax
Формат Хранения • Построчное хранение
– «Обрезанный» формат postgres
• Без toast
• Без ctid, xmin, xmax, cmin, cmax
– Сжатие • Без сжатия
• Quicklz
• Zlib уровни 1 - 9
Формат Хранения • Apache Parquet
– Поколоночное хранение блоков последовательных строк (“row group”)
Формат Хранения • Apache Parquet
– Поколоночное хранение блоков последовательных строк (“row group”)
– Сжатие • Без сжатия
• Snappy
• Gzip уровни 1 – 9
Формат Хранения • Apache Parquet
– Поколоночное хранение блоков последовательных строк (“row group”)
– Сжатие • Без сжатия
• Snappy
• Gzip уровни 1 – 9
– Размер “row group” и страницы задается для каждой таблицы отдельно
Разделение Ресурсов • Два основных варианта
Разделение Ресурсов • Два основных варианта
– Независимое разделение – HAWQ и YARN не знают друг о друге
Разделение Ресурсов • Два основных варианта
– Независимое разделение – HAWQ и YARN не знают друг о друге
– YARN – HAWQ запрашивает выделение ресурсов у менеджера ресурсов YARN
Разделение Ресурсов • Два основных варианта
– Независимое разделение – HAWQ и YARN не знают друг о друге
– YARN – HAWQ запрашивает выделение ресурсов у менеджера ресурсов YARN
• Гибкая утилизация кластера – Запрос может выполняться на части нод
Разделение Ресурсов • Два основных варианта
– Независимое разделение – HAWQ и YARN не знают друг о друге
– YARN – HAWQ запрашивает выделение ресурсов у менеджера ресурсов YARN
• Гибкая утилизация кластера – Запрос может выполняться на части нод
– Запрос может иметь несколько потоков исполнения на каждой из нод
Разделение Ресурсов • Два основных варианта
– Независимое разделение – HAWQ и YARN не знают друг о друге
– YARN – HAWQ запрашивает выделение ресурсов у менеджера ресурсов YARN
• Гибкая утилизация кластера – Запрос может выполняться на части нод
– Запрос может иметь несколько потоков исполнения на каждой из нод
– Желаемый параллелизм можно задать вручную
Разделение Ресурсов • Пулы ресурсов (Resource Queue) задают
Разделение Ресурсов • Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
Разделение Ресурсов • Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
Разделение Ресурсов • Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
Разделение Ресурсов • Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
– Лимит по ядрам CPU
Разделение Ресурсов • Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
– Лимит по ядрам CPU
– MIN/MAX потоков исполнения в целом по системе
Разделение Ресурсов • Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
– Лимит по ядрам CPU
– MIN/MAX потоков исполнения в целом по системе
– MIN/MAX потоков исполнения на каждой ноде
Разделение Ресурсов • Пулы ресурсов (Resource Queue) задают
– Количество параллельных запросов
– Приоритет на использование CPU
– Лимит по памяти
– Лимит по ядрам CPU
– MIN/MAX потоков исполнения в целом по системе
– MIN/MAX потоков исполнения на каждой ноде
• Задаются для пользователя или группы
Внешние Данные • PXF
– Фреймворк для доступа к внешним данным
– Легко расширяется, многие пишут свои плагины
– Официальные плагины: CSV, SequenceFile, Avro, Hive, HBase
– Open Source плагины: JSON, Accumulo, Cassandra, JDBC, Redis, Pipe
Внешние Данные • PXF
– Фреймворк для доступа к внешним данным
– Легко расширяется, многие пишут свои плагины
– Официальные плагины: CSV, SequenceFile, Avro, Hive, HBase
– Open Source плагины: JSON, Accumulo, Cassandra, JDBC, Redis, Pipe
• HCatalog – HAWQ видит таблицы из HCatalog как свои внутренние таблицы
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRMДвижок
Ресурсы Подготовка Исполнение Результат ЗавершениеПлан
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Ресурсы Подготовка Исполнение Результат ЗавершениеПлан
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Ресурсы Подготовка Исполнение Результат ЗавершениеПлан
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Ресурсы Подготовка Исполнение Результат ЗавершениеПлан
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Ресурсы Подготовка Исполнение Результат ЗавершениеПлан
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
ScanBarsb
HashJoinb.name = s.bar
ScanSellss Filterb.city = 'San Francisco'
Projects.beer, s.price
MotionGather
MotionRedist(b.name)
Ресурсы Подготовка Исполнение Результат ЗавершениеПлан
План
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Подготовка Исполнение Результат ЗавершениеРесурсы
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Нужно5контейнеровКаждыйпо1ядруи256MBRAM
План Подготовка Исполнение Результат ЗавершениеРесурсы
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Нужно5контейнеровКаждыйпо1ядруи256MBRAM
Сервер1:2контейнераСервер2:1контейнерСерверN:2контейнера
План Подготовка Исполнение Результат ЗавершениеРесурсы
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Нужно5контейнеровКаждыйпо1ядруи256MBRAM
Сервер1:2контейнераСервер2:1контейнерСерверN:2контейнера
План Подготовка Исполнение Результат ЗавершениеРесурсы
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Нужно5контейнеровКаждыйпо1ядруи256MBRAM
Сервер1:2контейнераСервер2:1контейнерСерверN:2контейнера
План Подготовка Исполнение Результат ЗавершениеРесурсы
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
Нужно5контейнеровКаждыйпо1ядруи256MBRAM
Сервер1:2контейнераСервер2:1контейнерСерверN:2контейнера
QE QE QE QE QE
План Подготовка Исполнение Результат ЗавершениеРесурсы
Ресурсы
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
План Исполнение Результат ЗавершениеПодготовка
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ScanBarsb
HashJoinb.name = s.bar
ScanSellss Filterb.city = 'San Francisco'
Projects.beer, s.price
MotionGather
MotionRedist(b.name)
РесурсыПлан Исполнение Результат ЗавершениеПодготовка
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ScanBarsb
HashJoinb.name = s.bar
ScanSellss Filterb.city = 'San Francisco'
Projects.beer, s.price
MotionGather
MotionRedist(b.name)
РесурсыПлан Исполнение Результат ЗавершениеПодготовка
Подготовка
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ScanBarsb
HashJoinb.name = s.bar
ScanSellss Filterb.city = 'San Francisco'
Projects.beer, s.price
MotionGather
MotionRedist(b.name)
РесурсыПлан Результат ЗавершениеИсполнение
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ScanBarsb
HashJoinb.name = s.bar
ScanSellss Filterb.city = 'San Francisco'
Projects.beer, s.price
MotionGather
MotionRedist(b.name)
ПодготовкаРесурсыПлан Результат ЗавершениеИсполнение
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ScanBarsb
HashJoinb.name = s.bar
ScanSellss Filterb.city = 'San Francisco'
Projects.beer, s.price
MotionGather
MotionRedist(b.name)
ПодготовкаРесурсыПлан Результат ЗавершениеИсполнение
Исполнение
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ScanBarsb
HashJoinb.name = s.bar
ScanSellss Filterb.city = 'San Francisco'
Projects.beer, s.price
MotionGather
MotionRedist(b.name)
ПодготовкаРесурсыПлан ЗавершениеРезультат
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ScanBarsb
HashJoinb.name = s.bar
ScanSellss Filterb.city = 'San Francisco'
Projects.beer, s.price
MotionGather
MotionRedist(b.name)
ИсполнениеПодготовкаРесурсыПлан ЗавершениеРезультат
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ScanBarsb
HashJoinb.name = s.bar
ScanSellss Filterb.city = 'San Francisco'
Projects.beer, s.price
MotionGather
MotionRedist(b.name)
ИсполнениеПодготовкаРесурсыПлан ЗавершениеРезультат
Результат
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ИсполнениеПодготовкаРесурсыПлан Завершение
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
ОсвобождаемСервер1:2контейнераСервер2:1контейнерСерверN:2контейнера
РезультатИсполнениеПодготовкаРесурсыПлан Завершение
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
Ок
ОсвобождаемСервер1:2контейнераСервер2:1контейнерСерверN:2контейнера
РезультатИсполнениеПодготовкаРесурсыПлан Завершение
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
Ок
ОсвобождаемСервер1:2контейнераСервер2:1контейнерСерверN:2контейнера
РезультатИсполнениеПодготовкаРесурсыПлан Завершение
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
Ок
ОсвобождаемСервер1:2контейнераСервер2:1контейнерСерверN:2контейнера
РезультатИсполнениеПодготовкаРесурсыПлан Завершение
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRM
QE
Движок
QE QE QE QE QE
Ок
ОсвобождаемСервер1:2контейнераСервер2:1контейнерСерверN:2контейнера
РезультатИсполнениеПодготовкаРесурсыПлан Завершение
Завершение
Жизненный Цикл Запроса HAWQMaster
Метаданные
Менедж.тр-й
Парсер Опт.запросов
Диспетч.проц.
Менедж.рес-ов
NameNode
Сервер1
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
Сервер2
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
СерверN
Локальнаядиректория
HAWQSegmentДвижок
HDFSDatanode
YARNRMДвижок
РезультатИсполнениеПодготовкаРесурсыПлан
Скорость • Данные не приземляются на диск без необходимости
Скорость • Данные не приземляются на диск без необходимости
• Данные не буферизируются на сегментах без необходимости
Скорость • Данные не приземляются на диск без необходимости
• Данные не буферизируются на сегментах без необходимости
• Данные передаются между нодами по UDP
Скорость • Данные не приземляются на диск без необходимости
• Данные не буферизируются на сегментах без необходимости
• Данные передаются между нодами по UDP
• Хороший стоимостной оптимизатор запросов
Скорость • Данные не приземляются на диск без необходимости
• Данные не буферизируются на сегментах без необходимости
• Данные передаются между нодами по UDP
• Хороший стоимостной оптимизатор запросов
• Оптимальность кода на C++
Скорость • Данные не приземляются на диск без необходимости
• Данные не буферизируются на сегментах без необходимости
• Данные передаются между нодами по UDP
• Хороший стоимостной оптимизатор запросов
• Оптимальность кода на C++
• Гибкая настройка параллелизма
Альтернативы Hive SparkSQL Impala HAWQ
Оптимизатор
Альтернативы Hive SparkSQL Impala HAWQ
Оптимизатор
ANSISQL
Альтернативы Hive SparkSQL Impala HAWQ
Оптимизатор
ANSISQL
Встроенныеязыки
Альтернативы Hive SparkSQL Impala HAWQ
Оптимизатор
ANSISQL
Встроенныеязыки
Нагрузканадиски
Альтернативы Hive SparkSQL Impala HAWQ
Оптимизатор
ANSISQL
Встроенныеязыки
Нагрузканадиски
Параллелизм
Альтернативы Hive SparkSQL Impala HAWQ
Оптимизатор
ANSISQL
Встроенныеязыки
Нагрузканадиски
Параллелизм
Дистрибутивы
Альтернативы Hive SparkSQL Impala HAWQ
Оптимизатор
ANSISQL
Встроенныеязыки
Нагрузканадиски
Параллелизм
Дистрибутивы
Стабильность
Альтернативы Hive SparkSQL Impala HAWQ
Оптимизатор
ANSISQL
Встроенныеязыки
Нагрузканадиски
Параллелизм
Дистрибутивы
Стабильность
Сообщество
Задачи • Интеграция с AWS и S3
Задачи • Интеграция с AWS и S3
• Интеграция с Mesos
Задачи • Интеграция с AWS и S3
• Интеграция с Mesos
• Улучшение интеграции с Ambari
Задачи • Интеграция с AWS и S3
• Интеграция с Mesos
• Улучшение интеграции с Ambari
• Интеграция с дистрибутивами Cloudera, MapR, IBM
Задачи • Интеграция с AWS и S3
• Интеграция с Mesos
• Улучшение интеграции с Ambari
• Интеграция с дистрибутивами Cloudera, MapR, IBM
• Сделать самый быстрый и удобный движок SQL-on-Hadoop
Заключение
• Современный движок SQL-on-Hadoop
• Для анализа структурированных данных
• Объединяет в себе лучшие качества альтернативных решений
• Новичок среди open source
• Community на стадии зарождения
Присоединяйтесь!
Вопросы
Apache HAWQ
http://hawq.incubator.apache.org
Связь со мной: http://0x0fff.com