Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Архитектура HAWQ / Алексей Грищенко (Pivotal)

508 views

Published on

HAWQ — один из лучших на рынке движков SQL-on-Hadoop, который не раз доказывал свою лидирующую позицию в открытых тестированиях. Что еще более интересно, в конце сентября этого года Pivotal открыл его исходный код под лицензией Apache, а также разместил сам проект в инкубаторе Apache (http://hawq.incubator.apache.org), что делает этот инструмент доступным большому кругу пользователей и намного более привлекательным для компаний — лидеров интернет-индустрии.

Работая в Pivotal, я участвовал в развитии и внедрении этого продукта с первого дня его существования.

В этой презентации я раскрою следующие темы:
+ Что такое HAWQ и зачем он был создан.
+ Кластерная архитектура HAWQ.
+ Принципы работы HAWQ.
+ Внутреннее устройство процессов HAWQ.
+ Интеграция с внешними системами.
+ Альтернативные решения.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Архитектура HAWQ / Алексей Грищенко (Pivotal)

  1. 1. Архитектура HAWQ Грищенко Алексей
  2. 2. Кто я? Enterprise Architect @ Pivotal •  7 лет в задачах обработки данных •  5 лет с MPP-системами •  4 года с Hadoop •  HAWQ - с первой beta •  Отвечаю за архитектуру всех внедрений HAWQ и Greenplum в EMEA •  Spark contributor •  http://0x0fff.com
  3. 3. О чем расскажу? •  Что такое HAWQ
  4. 4. О чем расскажу? •  Что такое HAWQ •  Зачем он нужен
  5. 5. О чем расскажу? •  Что такое HAWQ •  Зачем он нужен •  Из каких компонент он состоит
  6. 6. О чем расскажу? •  Что такое HAWQ •  Зачем он нужен •  Из каких компонент он состоит •  Как он работает
  7. 7. О чем расскажу? •  Что такое HAWQ •  Зачем он нужен •  Из каких компонент он состоит •  Как он работает •  Пример выполнения запроса
  8. 8. О чем расскажу? •  Что такое HAWQ •  Зачем он нужен •  Из каких компонент он состоит •  Как он работает •  Пример выполнения запроса •  Альтернативные решения
  9. 9. Что такое •  Аналитический движок SQL-on-Hadoop
  10. 10. Что такое •  Аналитический движок SQL-on-Hadoop •  HAdoop With Queries
  11. 11. Что такое •  Аналитический движок SQL-on-Hadoop •  HAdoop With Queries Postgres Greenplum HAWQ 2005 Fork Postgres 8.0.2
  12. 12. Что такое •  Аналитический движок SQL-on-Hadoop •  HAdoop With Queries Postgres Greenplum HAWQ 2005 Fork Postgres 8.0.2 2009 Rebase Postgres 8.2.15
  13. 13. Что такое •  Аналитический движок 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
  14. 14. Что такое •  Аналитический движок 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
  15. 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 2013 HAWQ 1.0.0.0 HAWQ 2.0.0.0 Open Source 2015
  16. 16. HAWQ – это … •  1’500’000 строк кода C и C++
  17. 17. HAWQ – это … •  1’500’000 строк кода C и C++ –  Из которых 200’000 только в заголовочных файлах
  18. 18. HAWQ – это … •  1’500’000 строк кода C и C++ –  Из которых 200’000 только в заголовочных файлах •  180’000 строк кода Python
  19. 19. HAWQ – это … •  1’500’000 строк кода C и C++ –  Из которых 200’000 только в заголовочных файлах •  180’000 строк кода Python •  60’000 строк кода Java
  20. 20. HAWQ – это … •  1’500’000 строк кода C и C++ –  Из которых 200’000 только в заголовочных файлах •  180’000 строк кода Python •  60’000 строк кода Java •  23’000 строк Makefile’ов
  21. 21. HAWQ – это … •  1’500’000 строк кода C и C++ –  Из которых 200’000 только в заголовочных файлах •  180’000 строк кода Python •  60’000 строк кода Java •  23’000 строк Makefile’ов •  7’000 строк shell-скриптов
  22. 22. HAWQ – это … •  1’500’000 строк кода C и C++ –  Из которых 200’000 только в заголовочных файлах •  180’000 строк кода Python •  60’000 строк кода Java •  23’000 строк Makefile’ов •  7’000 строк shell-скриптов •  Более 50 корпоративных клиентов
  23. 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. 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 •  Сообщество еще только зарождается – присоединяйтесь!
  25. 25. Зачем он нужен?
  26. 26. Зачем он нужен? •  Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003
  27. 27. Зачем он нужен? •  Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003 –  Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций
  28. 28. Зачем он нужен? •  Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003 –  Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций •  Универсальный инструмент для ad hoc аналитики
  29. 29. Зачем он нужен? •  Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003 –  Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций •  Универсальный инструмент для ad hoc аналитики –  Пример из практики – распарсить URL, выдернув из него имя хоста и протокол
  30. 30. Зачем он нужен? •  Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003 –  Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций •  Универсальный инструмент для ad hoc аналитики –  Пример из практики – распарсить URL, выдернув из него имя хоста и протокол •  Хорошая производительность
  31. 31. Зачем он нужен? •  Универсальный SQL-интерфейс к данным Hadoop для BI с ANSI SQL-92, -99, -2003 –  Пример из практики – запрос Cognos на 5000 строк с множеством оконных функций •  Универсальный инструмент для ad hoc аналитики –  Пример из практики – распарсить URL, выдернув из него имя хоста и протокол •  Хорошая производительность –  Сколько раз данные будут скинуты на HDD для выполнения SQL-запроса в Hive?
  32. 32. Кластер с HAWQ Сервер 1 SNameNode Сервер 4 ZK JM NameNode Сервер 3 ZK JM Сервер 2 ZK JM Сервер 6 Datanode Сервер N Datanode Сервер 5 Datanode interconnect …
  33. 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 …
  34. 34. Кластер с HAWQ HAWQ Master Сервер 1 SNameNode Сервер 4 ZK JM NameNode Сервер 3 ZK JM HAWQ Standby Сервер 2 ZK JM HAWQ Segment Сервер 6 Datanode HAWQ Segment Сервер N Datanode HAWQ Segment Сервер 5 Datanode YARN NM YARN NM YARN NM YARN RM YARN App Timeline interconnect …
  35. 35. Мастер Сервера Сервер 1 SNameNode Сервер 4 ZK JM NameNode Сервер 3 ZK JM Сервер 2 ZK JM HAWQ Segment Сервер 6 Datanode HAWQ Segment Сервер N Datanode HAWQ Segment Сервер 5 Datanode YARN NM YARN NM YARN NM YARN RM YARN App Timeline interconnect … HAWQ Master HAWQ Standby
  36. 36. Мастер Сервера HAWQ Master Парсер запросов Оптимизатор запросов Глобальный менеджер ресурсов Менеджер транзакций Диспетчер процессов Каталог метаданных HAWQ Standby Master Парсер запросов Оптимизатор запросов Глобальный менеджер ресурсов Менеджер транзакций Диспетчер процессов Каталог метаданных WAL репл.
  37. 37. HAWQ Master HAWQ Standby Сегменты Сервер 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 HAWQ Segment HAWQ Segment HAWQ Segment …
  38. 38. Сегменты HAWQ Segment Движок выполнения запросов libhdfs3 Расширения PXF HDFS Datanode Локальная ФС Директория для временных данных Логи YARN Node Manager
  39. 39. Метаданные •  Структура аналогична структуре каталога Postgres
  40. 40. Метаданные •  Структура аналогична структуре каталога Postgres •  Статистика
  41. 41. Метаданные •  Структура аналогична структуре каталога Postgres •  Статистика –  Количество записей и страниц в таблице
  42. 42. Метаданные •  Структура аналогична структуре каталога Postgres •  Статистика –  Количество записей и страниц в таблице –  Наиболее частые значения для каждого поля
  43. 43. Метаданные •  Структура аналогична структуре каталога Postgres •  Статистика –  Количество записей и страниц в таблице –  Наиболее частые значения для каждого поля –  Гистограмма для каждого числового поля
  44. 44. Метаданные •  Структура аналогична структуре каталога Postgres •  Статистика –  Количество записей и страниц в таблице –  Наиболее частые значения для каждого поля –  Гистограмма для каждого числового поля –  Количество уникальных значений в поле
  45. 45. Метаданные •  Структура аналогична структуре каталога Postgres •  Статистика –  Количество записей и страниц в таблице –  Наиболее частые значения для каждого поля –  Гистограмма для каждого числового поля –  Количество уникальных значений в поле –  Количество null значений в поле
  46. 46. Метаданные •  Структура аналогична структуре каталога Postgres •  Статистика –  Количество записей и страниц в таблице –  Наиболее частые значения для каждого поля –  Гистограмма для каждого числового поля –  Количество уникальных значений в поле –  Количество null значений в поле –  Средний размер значения поля в байтах
  47. 47. Статистика Без статистики Join двух таблиц, сколько записей в результате?
  48. 48. Статистика Без статистики Join двух таблиц, сколько записей в результате? ü  От 0 до бесконечности
  49. 49. Статистика Без статистики Количество строк Join двух таблиц, сколько записей в результате? ü  От 0 до бесконечности Join двух таблиц по 1000 записей в каждой, сколько записей в результате?
  50. 50. Статистика Без статистики Количество строк Join двух таблиц, сколько записей в результате? ü  От 0 до бесконечности Join двух таблиц по 1000 записей в каждой, сколько записей в результате? ü  От 0 до 1’000’000
  51. 51. Статистика Без статистики Количество строк Гистограммы и MCV Join двух таблиц, сколько записей в результате? ü  От 0 до бесконечности Join двух таблиц по 1000 записей в каждой, сколько записей в результате? ü  От 0 до 1’000’000 Join двух таблиц по 1000 записей в каждой, с известной кардинальностью, гистограммой распределения, наиболее частыми значениями, количеством null?
  52. 52. Статистика Без статистики Количество строк Гистограммы и MCV Join двух таблиц, сколько записей в результате? ü  От 0 до бесконечности Join двух таблиц по 1000 записей в каждой, сколько записей в результате? ü  От 0 до 1’000’000 Join двух таблиц по 1000 записей в каждой, с известной кардинальностью, гистограммой распределения, наиболее частыми значениями, количеством null? ü  ~ От 500 до 1’500
  53. 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. 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. 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. 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. 57. Метаданные •  Информация о структуре таблицы –  Поля распределения –  Количество hash bucket распределения –  Партиционирование (hash, list, range) •  Общие метаданные –  Пользователи и группы
  58. 58. Метаданные •  Информация о структуре таблицы –  Поля распределения –  Количество hash bucket распределения –  Партиционирование (hash, list, range) •  Общие метаданные –  Пользователи и группы –  Права доступа к объектам
  59. 59. Метаданные •  Информация о структуре таблицы –  Поля распределения –  Количество hash bucket распределения –  Партиционирование (hash, list, range) •  Общие метаданные –  Пользователи и группы –  Права доступа к объектам •  Хранимые процедуры –  PL/pgSQL, PL/Java, PL/Python, PL/Perl, PL/R
  60. 60. Оптимизатор Запросов •  Используется cost-based оптимизатор
  61. 61. Оптимизатор Запросов •  Используется cost-based оптимизатор •  Выбрать можно один из двух
  62. 62. Оптимизатор Запросов •  Используется cost-based оптимизатор •  Выбрать можно один из двух –  Planner – модифицированный оптимизатор Postgres
  63. 63. Оптимизатор Запросов •  Используется cost-based оптимизатор •  Выбрать можно один из двух –  Planner – модифицированный оптимизатор Postgres –  ORCA (Pivotal Query Optimizer) – разработан специально для HAWQ
  64. 64. Оптимизатор Запросов •  Используется cost-based оптимизатор •  Выбрать можно один из двух –  Planner – модифицированный оптимизатор Postgres –  ORCA (Pivotal Query Optimizer) – разработан специально для HAWQ •  Хинты оптимизатора работают как в Postgres
  65. 65. Оптимизатор Запросов •  Используется cost-based оптимизатор •  Выбрать можно один из двух –  Planner – модифицированный оптимизатор Postgres –  ORCA (Pivotal Query Optimizer) – разработан специально для HAWQ •  Хинты оптимизатора работают как в Postgres –  Включить/отключить определенную операцию
  66. 66. Оптимизатор Запросов •  Используется cost-based оптимизатор •  Выбрать можно один из двух –  Planner – модифицированный оптимизатор Postgres –  ORCA (Pivotal Query Optimizer) – разработан специально для HAWQ •  Хинты оптимизатора работают как в Postgres –  Включить/отключить определенную операцию –  Изменить веса базовых операций
  67. 67. Формат Хранения Какой формат хранения данных является наиболее оптимальным?
  68. 68. Формат Хранения Какой формат хранения данных является наиболее оптимальным? ü  Зависит от того, что является для вас критерием оптимальности
  69. 69. Формат Хранения Какой формат хранения данных является наиболее оптимальным? ü  Зависит от того, что является для вас критерием оптимальности –  Минимальное потребление ресурсов CPU
  70. 70. Формат Хранения Какой формат хранения данных является наиболее оптимальным? ü  Зависит от того, что является для вас критерием оптимальности –  Минимальное потребление ресурсов CPU –  Минимальный объем занимаемого дискового пр-ва
  71. 71. Формат Хранения Какой формат хранения данных является наиболее оптимальным? ü  Зависит от того, что является для вас критерием оптимальности –  Минимальное потребление ресурсов CPU –  Минимальный объем занимаемого дискового пр-ва –  Минимальное время извлечения записи по ключу
  72. 72. Формат Хранения Какой формат хранения данных является наиболее оптимальным? ü  Зависит от того, что является для вас критерием оптимальности –  Минимальное потребление ресурсов CPU –  Минимальный объем занимаемого дискового пр-ва –  Минимальное время извлечения записи по ключу –  Минимальное время извлечения подмножества столбцов таблицы
  73. 73. Формат Хранения Какой формат хранения данных является наиболее оптимальным? ü  Зависит от того, что является для вас критерием оптимальности –  Минимальное потребление ресурсов CPU –  Минимальный объем занимаемого дискового пр-ва –  Минимальное время извлечения записи по ключу –  Минимальное время извлечения подмножества столбцов таблицы –  что-то другое?
  74. 74. Формат Хранения •  Построчное хранение –  «Обрезанный» формат postgres •  Без toast •  Без ctid, xmin, xmax, cmin, cmax
  75. 75. Формат Хранения •  Построчное хранение –  «Обрезанный» формат postgres •  Без toast •  Без ctid, xmin, xmax, cmin, cmax –  Сжатие •  Без сжатия •  Quicklz •  Zlib уровни 1 - 9
  76. 76. Формат Хранения •  Apache Parquet –  Поколоночное хранение блоков последовательных строк (“row group”)
  77. 77. Формат Хранения •  Apache Parquet –  Поколоночное хранение блоков последовательных строк (“row group”) –  Сжатие •  Без сжатия •  Snappy •  Gzip уровни 1 – 9
  78. 78. Формат Хранения •  Apache Parquet –  Поколоночное хранение блоков последовательных строк (“row group”) –  Сжатие •  Без сжатия •  Snappy •  Gzip уровни 1 – 9 –  Размер “row group” и страницы задается для каждой таблицы отдельно
  79. 79. Разделение Ресурсов •  Два основных варианта
  80. 80. Разделение Ресурсов •  Два основных варианта –  Независимое разделение – HAWQ и YARN не знают друг о друге
  81. 81. Разделение Ресурсов •  Два основных варианта –  Независимое разделение – HAWQ и YARN не знают друг о друге –  YARN – HAWQ запрашивает выделение ресурсов у менеджера ресурсов YARN
  82. 82. Разделение Ресурсов •  Два основных варианта –  Независимое разделение – HAWQ и YARN не знают друг о друге –  YARN – HAWQ запрашивает выделение ресурсов у менеджера ресурсов YARN •  Гибкая утилизация кластера –  Запрос может выполняться на части нод
  83. 83. Разделение Ресурсов •  Два основных варианта –  Независимое разделение – HAWQ и YARN не знают друг о друге –  YARN – HAWQ запрашивает выделение ресурсов у менеджера ресурсов YARN •  Гибкая утилизация кластера –  Запрос может выполняться на части нод –  Запрос может иметь несколько потоков исполнения на каждой из нод
  84. 84. Разделение Ресурсов •  Два основных варианта –  Независимое разделение – HAWQ и YARN не знают друг о друге –  YARN – HAWQ запрашивает выделение ресурсов у менеджера ресурсов YARN •  Гибкая утилизация кластера –  Запрос может выполняться на части нод –  Запрос может иметь несколько потоков исполнения на каждой из нод –  Желаемый параллелизм можно задать вручную
  85. 85. Разделение Ресурсов •  Пулы ресурсов (Resource Queue) задают
  86. 86. Разделение Ресурсов •  Пулы ресурсов (Resource Queue) задают –  Количество параллельных запросов
  87. 87. Разделение Ресурсов •  Пулы ресурсов (Resource Queue) задают –  Количество параллельных запросов –  Приоритет на использование CPU
  88. 88. Разделение Ресурсов •  Пулы ресурсов (Resource Queue) задают –  Количество параллельных запросов –  Приоритет на использование CPU –  Лимит по памяти
  89. 89. Разделение Ресурсов •  Пулы ресурсов (Resource Queue) задают –  Количество параллельных запросов –  Приоритет на использование CPU –  Лимит по памяти –  Лимит по ядрам CPU
  90. 90. Разделение Ресурсов •  Пулы ресурсов (Resource Queue) задают –  Количество параллельных запросов –  Приоритет на использование CPU –  Лимит по памяти –  Лимит по ядрам CPU –  MIN/MAX потоков исполнения в целом по системе
  91. 91. Разделение Ресурсов •  Пулы ресурсов (Resource Queue) задают –  Количество параллельных запросов –  Приоритет на использование CPU –  Лимит по памяти –  Лимит по ядрам CPU –  MIN/MAX потоков исполнения в целом по системе –  MIN/MAX потоков исполнения на каждой ноде
  92. 92. Разделение Ресурсов •  Пулы ресурсов (Resource Queue) задают –  Количество параллельных запросов –  Приоритет на использование CPU –  Лимит по памяти –  Лимит по ядрам CPU –  MIN/MAX потоков исполнения в целом по системе –  MIN/MAX потоков исполнения на каждой ноде •  Задаются для пользователя или группы
  93. 93. Внешние Данные •  PXF –  Фреймворк для доступа к внешним данным –  Легко расширяется, многие пишут свои плагины –  Официальные плагины: CSV, SequenceFile, Avro, Hive, HBase –  Open Source плагины: JSON, Accumulo, Cassandra, JDBC, Redis, Pipe
  94. 94. Внешние Данные •  PXF –  Фреймворк для доступа к внешним данным –  Легко расширяется, многие пишут свои плагины –  Официальные плагины: CSV, SequenceFile, Avro, Hive, HBase –  Open Source плагины: JSON, Accumulo, Cassandra, JDBC, Redis, Pipe •  HCatalog –  HAWQ видит таблицы из HCatalog как свои внутренние таблицы
  95. 95. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM Движок Ресурсы Подготовка Исполнение Результат Завершение План
  96. 96. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Ресурсы Подготовка Исполнение Результат Завершение План
  97. 97. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Ресурсы Подготовка Исполнение Результат Завершение План
  98. 98. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Ресурсы Подготовка Исполнение Результат Завершение План
  99. 99. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Ресурсы Подготовка Исполнение Результат Завершение План
  100. 100. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок ScanBars b HashJoinb.name = s.bar ScanSells s Filterb.city ='San Francisco' Projects.beer, s.price MotionGather MotionRedist(b.name) Ресурсы Подготовка Исполнение Результат Завершение План
  101. 101. План Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Подготовка Исполнение Результат Завершение Ресурсы
  102. 102. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Нужно 5 контейнеров Каждый по 1 ядру и 256 MB RAM План Подготовка Исполнение Результат Завершение Ресурсы
  103. 103. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Нужно 5 контейнеров Каждый по 1 ядру и 256 MB RAM Сервер 1: 2 контейнера Сервер 2: 1 контейнер Сервер N: 2 контейнера План Подготовка Исполнение Результат Завершение Ресурсы
  104. 104. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Нужно 5 контейнеров Каждый по 1 ядру и 256 MB RAM Сервер 1: 2 контейнера Сервер 2: 1 контейнер Сервер N: 2 контейнера План Подготовка Исполнение Результат Завершение Ресурсы
  105. 105. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Нужно 5 контейнеров Каждый по 1 ядру и 256 MB RAM Сервер 1: 2 контейнера Сервер 2: 1 контейнер Сервер N: 2 контейнера План Подготовка Исполнение Результат Завершение Ресурсы
  106. 106. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок Нужно 5 контейнеров Каждый по 1 ядру и 256 MB RAM Сервер 1: 2 контейнера Сервер 2: 1 контейнер Сервер N: 2 контейнера QE QE QE QE QE План Подготовка Исполнение Результат Завершение Ресурсы
  107. 107. Ресурсы Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE План Исполнение Результат Завершение Подготовка
  108. 108. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE ScanBars b HashJoinb.name = s.bar ScanSells s Filterb.city ='San Francisco' Projects.beer, s.price MotionGather MotionRedist(b.name) Ресурсы План Исполнение Результат Завершение Подготовка
  109. 109. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE ScanBars b HashJoinb.name = s.bar ScanSells s Filterb.city ='San Francisco' Projects.beer, s.price MotionGather MotionRedist(b.name) Ресурсы План Исполнение Результат Завершение Подготовка
  110. 110. Подготовка Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE ScanBars b HashJoinb.name = s.bar ScanSells s Filterb.city ='San Francisco' Projects.beer, s.price MotionGather MotionRedist(b.name) Ресурсы План Результат Завершение Исполнение
  111. 111. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE ScanBars b HashJoinb.name = s.bar ScanSells s Filterb.city ='San Francisco' Projects.beer, s.price MotionGather MotionRedist(b.name) Подготовка Ресурсы План Результат Завершение Исполнение
  112. 112. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE ScanBars b HashJoinb.name = s.bar ScanSells s Filterb.city ='San Francisco' Projects.beer, s.price MotionGather MotionRedist(b.name) Подготовка Ресурсы План Результат Завершение Исполнение
  113. 113. Исполнение Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE ScanBars b HashJoinb.name = s.bar ScanSells s Filterb.city ='San Francisco' Projects.beer, s.price MotionGather MotionRedist(b.name) Подготовка Ресурсы План Завершение Результат
  114. 114. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE ScanBars b HashJoinb.name = s.bar ScanSells s Filterb.city ='San Francisco' Projects.beer, s.price MotionGather MotionRedist(b.name) Исполнение Подготовка Ресурсы План Завершение Результат
  115. 115. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE ScanBars b HashJoinb.name = s.bar ScanSells s Filterb.city ='San Francisco' Projects.beer, s.price MotionGather MotionRedist(b.name) Исполнение Подготовка Ресурсы План Завершение Результат
  116. 116. Результат Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE Исполнение Подготовка Ресурсы План Завершение
  117. 117. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE Освобождаем Сервер 1: 2 контейнера Сервер 2: 1 контейнер Сервер N: 2 контейнера Результат Исполнение Подготовка Ресурсы План Завершение
  118. 118. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE Ок Освобождаем Сервер 1: 2 контейнера Сервер 2: 1 контейнер Сервер N: 2 контейнера Результат Исполнение Подготовка Ресурсы План Завершение
  119. 119. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE Ок Освобождаем Сервер 1: 2 контейнера Сервер 2: 1 контейнер Сервер N: 2 контейнера Результат Исполнение Подготовка Ресурсы План Завершение
  120. 120. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE Ок Освобождаем Сервер 1: 2 контейнера Сервер 2: 1 контейнер Сервер N: 2 контейнера Результат Исполнение Подготовка Ресурсы План Завершение
  121. 121. Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM QE Движок QE QE QE QE QE Ок Освобождаем Сервер 1: 2 контейнера Сервер 2: 1 контейнер Сервер N: 2 контейнера Результат Исполнение Подготовка Ресурсы План Завершение
  122. 122. Завершение Жизненный Цикл Запроса HAWQ Master Метаданные Менедж. тр-й Парсер Опт. запросов Диспетч. проц. Менедж. рес-ов NameNode Сервер 1 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер 2 Локальная директория HAWQ Segment Движок HDFS Datanode Сервер N Локальная директория HAWQ Segment Движок HDFS Datanode YARN RM Движок Результат Исполнение Подготовка Ресурсы План
  123. 123. Скорость •  Данные не приземляются на диск без необходимости
  124. 124. Скорость •  Данные не приземляются на диск без необходимости •  Данные не буферизируются на сегментах без необходимости
  125. 125. Скорость •  Данные не приземляются на диск без необходимости •  Данные не буферизируются на сегментах без необходимости •  Данные передаются между нодами по UDP
  126. 126. Скорость •  Данные не приземляются на диск без необходимости •  Данные не буферизируются на сегментах без необходимости •  Данные передаются между нодами по UDP •  Хороший стоимостной оптимизатор запросов
  127. 127. Скорость •  Данные не приземляются на диск без необходимости •  Данные не буферизируются на сегментах без необходимости •  Данные передаются между нодами по UDP •  Хороший стоимостной оптимизатор запросов •  Оптимальность кода на C++
  128. 128. Скорость •  Данные не приземляются на диск без необходимости •  Данные не буферизируются на сегментах без необходимости •  Данные передаются между нодами по UDP •  Хороший стоимостной оптимизатор запросов •  Оптимальность кода на C++ •  Гибкая настройка параллелизма
  129. 129. Альтернативы Hive SparkSQL Impala HAWQ Оптимизатор
  130. 130. Альтернативы Hive SparkSQL Impala HAWQ Оптимизатор ANSI SQL
  131. 131. Альтернативы Hive SparkSQL Impala HAWQ Оптимизатор ANSI SQL Встроенные языки
  132. 132. Альтернативы Hive SparkSQL Impala HAWQ Оптимизатор ANSI SQL Встроенные языки Нагрузка на диски
  133. 133. Альтернативы Hive SparkSQL Impala HAWQ Оптимизатор ANSI SQL Встроенные языки Нагрузка на диски Параллелизм
  134. 134. Альтернативы Hive SparkSQL Impala HAWQ Оптимизатор ANSI SQL Встроенные языки Нагрузка на диски Параллелизм Дистрибутивы
  135. 135. Альтернативы Hive SparkSQL Impala HAWQ Оптимизатор ANSI SQL Встроенные языки Нагрузка на диски Параллелизм Дистрибутивы Стабильность
  136. 136. Альтернативы Hive SparkSQL Impala HAWQ Оптимизатор ANSI SQL Встроенные языки Нагрузка на диски Параллелизм Дистрибутивы Стабильность Сообщество
  137. 137. Задачи •  Интеграция с AWS и S3
  138. 138. Задачи •  Интеграция с AWS и S3 •  Интеграция с Mesos
  139. 139. Задачи •  Интеграция с AWS и S3 •  Интеграция с Mesos •  Улучшение интеграции с Ambari
  140. 140. Задачи •  Интеграция с AWS и S3 •  Интеграция с Mesos •  Улучшение интеграции с Ambari •  Интеграция с дистрибутивами Cloudera, MapR, IBM
  141. 141. Задачи •  Интеграция с AWS и S3 •  Интеграция с Mesos •  Улучшение интеграции с Ambari •  Интеграция с дистрибутивами Cloudera, MapR, IBM •  Сделать самый быстрый и удобный движок SQL-on-Hadoop
  142. 142. Заключение •  Современный движок SQL-on-Hadoop •  Для анализа структурированных данных •  Объединяет в себе лучшие качества альтернативных решений •  Новичок среди open source •  Community на стадии зарождения Присоединяйтесь!
  143. 143. Вопросы Apache HAWQ http://hawq.incubator.apache.org dev@hawq.incubator.apache.org user@hawq.incubator.apache.org Связь со мной: http://0x0fff.com

×