Организация процесса регулярной обработки больших...

66

Upload: codefest

Post on 19-Jul-2015

320 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Организация процесса регулярной обработки больших объемов данных
Page 2: Организация процесса регулярной обработки больших объемов данных

Организация процесса

регулярной обработки

больших объемов данных

Группа разработки Крипта

Дмитрий Кукса, разработчик

Page 3: Организация процесса регулярной обработки больших объемов данных

Что такое Крипта?

▌ Отвечает на вопрос – «Кто?»

▌ Определяет характеристики

пользователя по поведению в

интернете

▌ Используется для таргетинга рекламы

Page 4: Организация процесса регулярной обработки больших объемов данных

5

Page 5: Организация процесса регулярной обработки больших объемов данных

Как это работает?

▌ Объем регулярно обрабатываемых данных ~ 50 ТБ/час

6

Логи

Обучение Контроль

Логи Профили

Профили

+

Матрикснет

Матрикснет

ОбучениеКлассификация

Page 6: Организация процесса регулярной обработки больших объемов данных

MapReduce

7

Page 7: Организация процесса регулярной обработки больших объемов данных

MapReduce

8

▌ Модель распределенных вычислений

▌ Входные / выходные данные – пары (k, v)

▌ Две основных операции:

Map: (k, v) → {(k1*, v1*), …, (kn*, vn*)}

Reduce: (k, {v1, …, vm}) → {(k1*, v1*), …, (kn*, vn*)}

▌ Фреймворки – YT, Hadoop (http://hadoop.apache.org)

Page 9: Организация процесса регулярной обработки больших объемов данных

10

Inputs Map

id1, [email protected]

id2, [email protected]

id3, [email protected]

gmail.com, 1

gmail.com, 1

yandex.ru, 1

mail.ru, 1

yandex.ru, 1

yandex.ru, 1

id3, [email protected]

id4, [email protected]

id5, [email protected]

Page 10: Организация процесса регулярной обработки больших объемов данных

11

Inputs Map Group

id1, [email protected]

id2, [email protected]

id3, [email protected]

gmail.com, 1

gmail.com, 1

yandex.ru, 1yandex.ru, {1 ,1, 1}

mail.ru, 1

yandex.ru, 1

yandex.ru, 1

gmail.ru, {1, 1}

mail.ru, {1}id3, [email protected]

id4, [email protected]

id5, [email protected]

Page 11: Организация процесса регулярной обработки больших объемов данных

12

Inputs Map ReduceGroup

id1, [email protected]

id2, [email protected]

id3, [email protected]

gmail.com, 1

gmail.com, 1

yandex.ru, 1yandex.ru, {1 ,1, 1}

mail.ru, 1

yandex.ru, 1

yandex.ru, 1

gmail.ru, {1, 1}

mail.ru, {1}

yandex.ru, 3

gmail.ru, 2

mail.ru, 1id3, [email protected]

id4, [email protected]

id5, [email protected]

Page 12: Организация процесса регулярной обработки больших объемов данных

Что обеспечивает MR?

▌ Распределение задач между узлами

▌ Распределенное хранение данных

▌ Группировка данных перед Reduce

▌ Cортировки и слияния

▌ Отказоустойчивость

13

Page 13: Организация процесса регулярной обработки больших объемов данных

Так все ОК, MapReduce все сделает!

14

,

, ,

Page 14: Организация процесса регулярной обработки больших объемов данных

Клиент - Сервер

15

▌ Задачу на выполнение мастеру MR ставит клиент

▌ Проблемы

Потеря канала связи между сервером и клиентом

Отказ машины клиента

В этом месте MR ничего не гарантирует!

Page 15: Организация процесса регулярной обработки больших объемов данных

Что нужно для хорошей жизни?

▌ Выполнение задачи ровно один раз в час/день/неделю

▌ Недопустимы потери данных

▌ Допустима задержка в обработке

▌ Минимальное количество вмешательств «руками»

▌ Информирование о необходимости ручного вмешательства

16

Page 16: Организация процесса регулярной обработки больших объемов данных

Комплекс решений

▌ Конкурирующий запуск с нескольких клиентов

▌ Автоматическое восстановление задачи при падении

▌ Система мониторинга

17

Page 17: Организация процесса регулярной обработки больших объемов данных

Аспекты

18

Page 18: Организация процесса регулярной обработки больших объемов данных

АОП

▌ Инкапсуляция кода, не имеющего отношения к бизнес логике

▌ Часто – выполнение действий «до» и «после»

▌ Логирование, авторизация, транзакционный контроль

19

Page 19: Организация процесса регулярной обработки больших объемов данных

АспектыRun() {

RunTask();

}

RunTask() {

RunOperation();

}

Page 20: Организация процесса регулярной обработки больших объемов данных

Аспекты. MonitoringRun() {

MonitoringBefore(); // Логирование

RunTask();

MonitoringAfter(); // Логирование

}

RunTask() {

MonitoringBefore(); // Логирование

RunOperation();

MonitoringAfter(); // Логирование

}

Page 21: Организация процесса регулярной обработки больших объемов данных

Аспекты. Monitoring

22

Monitoring

Application

Page 22: Организация процесса регулярной обработки больших объемов данных

Аспекты. BlockerRun() {

BlockerBefore(); // Проверка возможности запуска. Блокировка

MonitoringBefore(); // Логирование

RunTask();

MonitoringAfter(); // Логирование

BlockerAfter(); // Снятие блокировки

}

RunTask() {

MonitoringBefore(); // Логирование

RunOperation();

MonitoringAfter(); // Логирование

}

Page 23: Организация процесса регулярной обработки больших объемов данных

Аспекты. Blocker

24

▌ Разделяемое состояние – YT таблица

Time – время блокировки

▌ Пролонгация во время работы

▌ Мьютекс с протуханием

▌ Нет лишних точек отказа

Time = 00:15 24-02-2015

Page 24: Организация процесса регулярной обработки больших объемов данных

Аспекты. Blocker

25

▌ Не чаще раза в сутки – блокировка

▌ Done – флаг завершения

▌ Решает проблемы:

Одновременного запуска

Выполнения по расписанию

Time = 00:00 25-02-2015

Done = true

Page 25: Организация процесса регулярной обработки больших объемов данных

Аспекты. Raise UpRun() {

BlockerBefore(); // Проверка возможности запуска. Блокировка

RaiseUpBefore(); // Определение контекста задачи. Сохранение

MonitoringBefore(); // Логирование

RunTask();

MonitoringAfter(); // Логирование

RaiseUpAfter(); // Удаление контекста

BlockerAfter(); // Снятие блокировки

}

RunTask() {

RaiseUpBefore(); // Определение контекста задачи. Сохранение

MonitoringBefore(); // Логирование

RunOperation();

MonitoringAfter(); // Логирование

RaiseUpAfter(); // Запись информации об окончании

}

Page 26: Организация процесса регулярной обработки больших объемов данных

Аспекты. Raise Up

27

▌ Контекст задачи

Аргументы бинарника

▌ Контекст операции

Входные таблицы

1

Tmp_123 Tmp_042

2

Failed start Current start

2

1

Page 27: Организация процесса регулярной обработки больших объемов данных

Аспекты. Raise Up

▌ Разделяемое состояние – журнал (YT)

▌ Задача - воссоздание условий упавшего запуска

▌ Выполнение только незавершенных операций

▌ Запускается тот же бинарник

▌ Единственный механизм влияния – аспекты

28

Page 28: Организация процесса регулярной обработки больших объемов данных

Raise Up. Нормальное исполнение

29

Task -src //crypta/fresh/offers/

-dst //crypta/state/

-ts 1424791640

Page 29: Организация процесса регулярной обработки больших объемов данных

Raise Up. Нормальное исполнение

30

Task

operation_1

-src //crypta/fresh/offers/

-dst //crypta/state/

-ts 1424791640

Name = operation_1

Src = //crypta/fresh/offers/1

Dst = //crypta/state/offers_123

Page 30: Организация процесса регулярной обработки больших объемов данных

Raise Up. Нормальное исполнение

31

Task

operation_1

-src //crypta/fresh/offers/

-dst //crypta/state/

-ts 1424791640

Name = operation_1

Src = //crypta/fresh/offers/1

Dst = //crypta/state/offers_123

Done = true

Page 31: Организация процесса регулярной обработки больших объемов данных

Raise Up. Нормальное исполнение

32

Task

operation_1

operation_2

-src //crypta/fresh/offers/

-dst //crypta/state/

-ts 1424791640

Name = operation_1

Src = //crypta/fresh/offers/1

Dst = //crypta/state/offers_123

Done = true

Name = operation_2

Src = //crypta/state/offers_123

Dst = //crypta/state/accum

Page 32: Организация процесса регулярной обработки больших объемов данных

Raise Up. Нормальное исполнение

33

Task

operation_1

operation_2

-src //crypta/fresh/offers/

-dst //crypta/state/

-ts 1424791640

Name = operation_1

Src = //crypta/fresh/offers/1

Dst = //crypta/state/offers_123

Done = true

Name = operation_2

Src = //crypta/state/offers_123

Dst = //crypta/state/accum

Page 33: Организация процесса регулярной обработки больших объемов данных

Raise Up. Нормальное исполнение

34

Task

operation_1

operation_2

-src //crypta/fresh/offers/

-dst //crypta/state/

-ts 1424791640

-failures 1

Name = operation_1

Src = //crypta/fresh/offers/1

Dst = //crypta/state/offers_123

Done = true

Name = operation_2

Src = //crypta/state/offers_123

Dst = //crypta/state/accum

Page 34: Организация процесса регулярной обработки больших объемов данных

Аспекты

▌ Blocker, RaiseUp, Monitoring

▌ Довольно простые механизмы

▌ Не порождают ненужных зависимостей

35

Page 35: Организация процесса регулярной обработки больших объемов данных

А что насчет цепочки?

36

Page 36: Организация процесса регулярной обработки больших объемов данных

Цепочки задач

▌ Скрипт

▌ Нужна поддержка аспектов (запуск с помощью бинарника)

▌ В целом - все аналогично бинарнику

37

Page 37: Организация процесса регулярной обработки больших объемов данных

Цепочки задач. Восстановление

38

2

падения

8

падений--- ---

10

падений

Page 38: Организация процесса регулярной обработки больших объемов данных

Цепочки задач. Восстановление

39

2

падения

8

падений--- ---

10

падений

force_drop_journal = true

Page 39: Организация процесса регулярной обработки больших объемов данных

Цепочки задач. Восстановление

40

17:00 17:00 --- 16:00

skip executeСтарт 16:30 skip execute

Page 40: Организация процесса регулярной обработки больших объемов данных

Цепочки задач. Восстановление

41

17:00 17:00 --- 16:00

executeСтарт 16:30

executeСтарт 17:00

executeskip skip

executeexecute

Page 41: Организация процесса регулярной обработки больших объемов данных

Цепочки задач. Восстановление

42

17:00 17:00 --- 16:00

skip executeСтарт 16:30 skip

executeСтарт 17:00 executeexecute

До упавшей задачи - пропускать сделанные

execute

skip_done

true

Page 42: Организация процесса регулярной обработки больших объемов данных

Цепочки задач. Восстановление

43

17:00 17:00 --- 16:00

skip executeСтарт 16:30 skip

executeСтарт 17:00 executeexecute

До упавшей задачи - пропускать сделанные

После – исполнять

execute

skip_done

true

skip_done

false

Page 43: Организация процесса регулярной обработки больших объемов данных

Цепочки задач. Режимы запуска

44

▌ Необходимо изменять параметры аспектов по ходу цепочки

▌ Режимы

Schedule (force_drop_journal = true, skip_done = false)

Watchdog (force_drop_journal = false, skip_done = true)

▌ Передача режима исполнения - через файл

Page 44: Организация процесса регулярной обработки больших объемов данных

Вроде бы и норм

▌ Вмешательств руками ~ 1-2 в месяц

Но!

▌ Длинные цепочки – большая вероятность падения

▌ Обработка больших порций данных

▌ Неравномерность загрузки кластера

45

Page 45: Организация процесса регулярной обработки больших объемов данных

Другой подход. Конвейер

46

Page 46: Организация процесса регулярной обработки больших объемов данных

Обработка. Наивный подход

47

ProducerAppend Consume

Consumer

Page 47: Организация процесса регулярной обработки больших объемов данных

Обработка. Наивный подход

48

Producer ConsumerA

B

Append Consume

Page 48: Организация процесса регулярной обработки больших объемов данных

Обработка. Наивный подход

49

Producer ConsumerA

B

Append Consume

Page 49: Организация процесса регулярной обработки больших объемов данных

Обработка. Наивный подход

50

Producer Consumer

A

B

С

Append Consume

Page 50: Организация процесса регулярной обработки больших объемов данных

Обработка. Наивный подход

51

Producer Consumer

A

B

С

С – потеряно!

Append Consume

Page 51: Организация процесса регулярной обработки больших объемов данных

Цепочка

52

Producer Consumer

1 2

A

Всегда одна обрабатываемая часть

Append Consume

Page 52: Организация процесса регулярной обработки больших объемов данных

Конвейерная обработка

53

Producer ConsumerAppend Consume

Page 53: Организация процесса регулярной обработки больших объемов данных

Конвейерная обработка

54

Producer ConsumerAppend Consume

Page 54: Организация процесса регулярной обработки больших объемов данных

Конвейерная обработка

55

Producer ConsumerAppend Consume

Page 55: Организация процесса регулярной обработки больших объемов данных

Конвейерная обработка

56

Producer Consumer

С – проблем нет!

Append Consume

Page 56: Организация процесса регулярной обработки больших объемов данных

Конвейерная обработка

▌ Узлы работают независимо

▌ Нет последовательности выполнения

▌ Триггером запуска является наличие новых данных

Можно ли использовать всегда?

57

Page 57: Организация процесса регулярной обработки больших объемов данных

Возможен только один потребитель

58

Producer

Consumer

Consumer

Page 58: Организация процесса регулярной обработки больших объемов данных

Возможен только один потребитель

59

Producer

Consumer

Consumer

Multiplexor

Page 59: Организация процесса регулярной обработки больших объемов данных

Возможен только один потребитель

60

Producer Consumer

Consumer

Read

Move

Consume

Page 60: Организация процесса регулярной обработки больших объемов данных

Консистентность данных

61

▌ Два разных лога с url

▌ Общий словарь (url, id)

▌ Словарь пополняется

▌ Выход – цепочка!

Consume

R/W

Consume

R/W

Page 61: Организация процесса регулярной обработки больших объемов данных

Конвейер цепочек

▌ Смешение двух подходов

▌ Плюсы конвейерной обработки

▌ Количество цепочек – минимально возможное

▌ Удобно при рефакторинге

▌ Основной используемый подход

Вмешательств руками < 1 в месяц

62

Page 62: Организация процесса регулярной обработки больших объемов данных

Спасибо за внимание!

Page 63: Организация процесса регулярной обработки больших объемов данных

Контакты

[email protected]

Дмитрий Кукса

Группа разработки Крипта

64

Page 64: Организация процесса регулярной обработки больших объемов данных

Дополнительные слайды

Page 65: Организация процесса регулярной обработки больших объемов данных

Другие решения

▌ Hadoop workflow schedulers

Oozie – http://oozie.apache.org

Azkaban – http://data.linkedin.com/opensource/azkaban

▌ Конфигурационные файлы (XML)

▌ У нас – другой подход

Обслуживающая функциональность – в бинарниках

Workflow = скрипт

66

Page 66: Организация процесса регулярной обработки больших объемов данных

Характерные задачи Крипты

▌ Парсинг логов

▌ Агрегация данных из разных источников

▌ Фильтрация противоречивых данных

▌ Подготовка выборок для Матрикснет

▌ Классификация пользователей

Нужны регулярные последовательности действий

67