типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2
1. Hadoop Streaming: простой путь к
масштабированию приложений обработки данных
Алексей Воропаев
Руководитель группы ранжирования результатов поиска
2. Зачем?
Данные постоянно растут:
- Граф внешних ссылок 2007 год: 100 Гб
- Граф внешних ссылок 2011 год: 10 Тб
- Граф всех ссылок 2011 год: 100 Тб
- Поведенческая статистика: 300 Гб / день
www.mail.ru 2
3. Как обработать «большие» данные?
- Нельзя хранить на 1-ой машине
- Нельзя обработать на 1-ой машине
www.mail.ru 3
4. Горизонтальное масштабирование
1. Как разбить данные?
2. Как организовать вычисления?
Больше железа — больше поломок!
1. Сохранность данных?
2. Отказоустойчивость вычислений?
3. Балансировка?
4. Дальнейшее масштабирование?
www.mail.ru 4
11. Применении:
- Распределённый sort, grep и т.д.
- Статистика
- SQL-подобные операции
- Алгоритмы на графах
- Обработка текстов (обратный индекс)
- Машинное обучение
- и т.д
www.mail.ru 11
12. Экосистема для «больших» данных:
- Линейно масштабируемые
- Для «обычного» железа
- Простота использования
- Основан на Java
www.mail.ru 12
13. Распределённая файловая система:
- Блочная структура
- Адаптация под очень большие файлы
- Репликации
- Автоматическое восстановление
- Дружественна MapReduce
www.mail.ru 13
14. Фреймворк для вычислений:
- Инфраструктура
- Планирование и балансировка нагрузки
- Мониторинг
- Основан на Java
www.mail.ru 14
15. Streaming:
hadoop jar hadoop-streaming.jar
-input /data/input_dir
-output /data/output_dir
-mapper cat
-reducer 'uniq -c'
Mapper & Reducer:
- На любом языке: Python, Ruby, C++, bash
- Взаимодействие через стандартные
потоки
- Быстро и просто
www.mail.ru 15
16. Только map:
hadoop jar hadoop-streaming.jar
-D mapred.output.compress=true
-D mapred.output.compression.codec=GzipCode
-D mapreduce.job.reduces=0
-input /data/input_dir
-output /data/output_dir
-mapper cat
www.mail.ru 16
19. Несколько входов:
1. Данные хранятся в одном формате
2. Несколько '-input'
3. Переменная окружения $map_input_file
Любое свойство конфига доступно через
переменную окружения.
www.mail.ru 19
20. Обмен данными:
-D stream.map.input=[identifier]
-D stream.map.output=[identifier]
-D stream.reduce.input=[identifier]
-D stream.reduce.output=[identifier]
или
-io [identifier]
[identifier]:
- text : текстовые строки
- raw: 4 байта длины + бинарные данные
- typedbytes: код типа + бинарные данные
www.mail.ru 20
21. Hbase:
- нереляционное хранилище колонок данных
- аналог BigTable
- http://github.com/wanpark/hadoop-hbase-streaming
# hadoop jar hadoop-streaming.jar
-input dammy_input
-output output
-mapper /bin/cat
-inputformat
org.childtv.hadoop.hbase.mapred.JSONTableInputFormat
-jobconf map.input.table=scores
-jobconf map.input.columns=course:
# hadoop dfs -cat output/*
Dan {"course:math":"87","course:art":"97"}
Dana {"course:math":"100","course:art":"80"} http://d.hatena.ne.jp/wanpark/20081113/1226555456
www.mail.ru 21
22. Счетчики и job-статус:
- позволяют вести учет событий
- используют стандартный поток ошибок
- счетчик:
reporter:counter:<group>,<counter>,<amount>
- статус:
reporter:status:<message>
www.mail.ru 22
23. Отладка, тесты:
- читаемый ввод-вывод
- наличие системы мониторинга
- логирование
- легко запускать без Hadoop
cat input | sort | uniq -c > output
www.mail.ru 23
24. Плюсы:
- простота разработки
- удобство отладки
- любые языки
Минусы:
- не все возможности Hadoop
- замедление примерно 15%
- сложности с бинарными данными
www.mail.ru 24
25. Спасибо!
Алексей Воропаев
Руководитель группы ранжирования результатов поиска
voropaev@corp.mail.ru
www.mail.ru