Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Odnoklassniki DWH evolving

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
160

Odnoklassniki DWH evolving

Avatar for Denis M. Gabaydulin

Denis M. Gabaydulin

May 11, 2019
Tweet

Transcript

  1. 3 Что я делаю в OK? • Делаю инфраструктурные задачи

    • Копаюсь в распределенных системах ◦ базы данных, Spark, Hadoop • Решаю проблемы производительности
  2. 4 Что такое DWH в Одноклассниках? Мы помогаем нашим заказчикам

    получать ответы на вопросы и принимать решения на основе данных.
  3. 5 Кто наши заказчики? • Менеджеры (включая топ-менеджмент и CEO)

    • Разработчики • Аналитики • Продуктовые менеджеры • Маркетинг и PR • Другие компании в Mail Ru Group
  4. 12 DWH сегодня • 5000+ ядер • 40+ TB памяти

    • 11+ PB хранилище • 1000+ регулярных расчетов
  5. 13 О чем сегодня поговорим? Поговорим о таком важном компоненте

    как планировщик задач и его роли в инфраструктуре.
  6. 15 Определения Расчет (задача) - это какие то вычисления на

    Hive или Spark. Воркер - программа, которая запускает расчет. Воркер запускает расчеты последовательно. Параллельный запуск расчетов требует n воркеров.
  7. 16 Как выполнять 1000+ регулярных расчетов Если у вас 10-100

    регулярных расчетов, можно поддерживать граф вычислений вручную. У нас было именно так. К каждому воркеру статически были привязаны конкретные расчеты.
  8. 18 Что с ресурсами? Ресурсов у нас было достаточно, но

    мы не умели использовать их эффективно.
  9. 23 Проблемы • Значительная часть расчетов не готова к утру

    • При добавлении расчета надо руками определять, где он будет запускаться • Разные системы имеют свой механизм распределения задач • Кластер используется неэффективно
  10. 24 Сформулируем требования • Все задачи готовы до 10 утра

    (лучше раньше) • Быстрое восстановление после аварий и инцидентов • Совместимость со всеми системами расчетов (Spark, HIVE, custom) • Простое масштабирование системы
  11. 25 Теория • Сделать все воркеры одного типа равноправными •

    Выполнять расчеты в оптимальном порядке • Эффективно утилизировать доступные ресурсы
  12. 26 Оптимальный порядок выполнения • Задачи с максимальным суммарным временем

    выполнения должны выполняться первыми (жадность) • Задачи должны выполняться только тогда, когда их зависимости уже посчитаны
  13. 27 Теория В идеале нужно построить взвешенный ориентированный ациклический граф.

    И обойти его согласно топологической сортировки, по правилам описанным выше.
  14. 28 Определения • Вершина - конкретный расчет. • Ребро -

    зависимость между расчетами. • In-degree - кол-во ребер, направленных в вершину. • Вес - среднее время расчета из n-последних.
  15. 29 Определения 10 1 1 2 1 1 1 2

    B -> C = B родитель C C -> E = C родитель E или C зависит от B E зависит от C
  16. 31 Граф Вершина Вес A 10 B 9 C 5

    D 4 E 3 F 3 G 1 H 1 10 1 1 2 1 1 1 2 10 1 1 2 1 1 1 2
  17. 32 Граф Оптимальный порядок: A, B, C, D, E |

    F, G | H Вершина Вес A 10 B 9 C 5 D 4 E 3 F 3 G 1 H 1
  18. 34 Упрощенный алгоритм Используем “кучу” для того, чтобы выполнить условие:

    Задачи с максимальным суммарным временем выполнения должны выполняться первыми (жадность).
  19. 38 Упрощенный алгоритм. BFS Будем добавлять в очередь только те

    вершины, для которых in-degree становится 0.
  20. 39 Можно ли еще проще? Можно еще больше упростить сортировку,

    опираясь только на вес, а обновление in-degree убрать. Практика показала, что даже это уже дает значительное улучшение.
  21. 44 Реализация • Воркер запрашивает задачи у планировщика • Планировщик

    контролирует состояние всех расчетов • Планировщик гарантирует корректность. Одна и та же задача не достанется нескольким воркерам одновременно.
  22. 46 Почему мы не взяли Luigi? • Постепенное и бесшовное

    внедрение • Контроль над алгоритмом обхода графа (topsort) • На первом этапе достаточно библиотеки для клиента, и не нужна сложная инфраструктура в виде сервисов • Python, а у нас все на Java
  23. 53 Интеграция Spark и Scheduler Общее решение - выполнять разные

    расчеты в одном Spark context. Так же делает Spark Jobserver.
  24. 54 Интеграция Spark и Scheduler Общее решение - выполнять разные

    расчеты в одном Spark context. Несколько spark actions параллельно (CompletableFuture внутри).
  25. 55 Интеграция Spark и Scheduler • Сократили оверхед на запуск

    отдельного расчета • Сделали возможным использование shared cache между разными расчетами • Увеличили скорость расчета истории на порядок
  26. 56 Количество Spark jobs в час. До и после Было

    AVG = 72 Стало AVG = 14 Меньше лучше!
  27. 58 Выводы • Научились считать быстрее и эффективнее • Автоматизировали

    создание графа вычислений • Сделали универсальный компонент для параллельного выполнения задач • Computer science вечен ©