hadoop streaming простой путь к масштабированию приложений...

25
Алексей Воропаев Руководитель группы ранжирования результатов поиска Hadoop Streaming: простой путь к масштабированию приложений обработки данных

Upload: rit2011

Post on 16-Jun-2015

724 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Алексей ВоропаевРуководитель группы ранжирования результатов поиска

Hadoop Streaming: простой путь к масштабированию приложений обработки данных

Page 2: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

www.mail.ru 2

Зачем?Данные постоянно растут:

- Граф внешних ссылок 2007 год: 100 Гб- Граф внешних ссылок 2011 год: 10 Тб- Граф всех ссылок 2011 год: 100 Тб- Поведенческая статистика: 300 Гб / день

Page 3: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

www.mail.ru 3

Как обработать «большие» данные?- Нельзя хранить на 1-ой машине- Нельзя обработать на 1-ой машине

Page 4: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

www.mail.ru 4

Горизонтальное масштабирование1. Как разбить данные?2. Как организовать вычисления?

Больше железа — больше поломок!1. Сохранность данных?2. Отказоустойчивость вычислений?3. Балансировка?4. Дальнейшее масштабирование?

Page 5: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

www.mail.ru 5

Частичные решения:1. Распределённые FS2. Распределённые СУБД3. MPI, PVM, Cluster OpenMP и т.д.

Page 6: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

www.mail.ru 6

Где взять людей???

- опыт работы с петабайтами данных- знания распределённых вычислений- умение делать быстро и надёжно

Page 7: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Комплексные решения?Google:

- 2003 год: GoogleFileSystem- 2004 год: MapReduce

www.mail.ru 7

Page 8: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Подсчет уникальных строк:

# cat input | sort | uniq -c > output

www.mail.ru 8

Page 9: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

cat

cat

cat

sort

sort uniq -c

Строки независимы

Группируем в кучи по ключу

Обрабатываем кучи

параллельно

uniq -c

input

ou

tput

www.mail.ru 9

Добавляем параллелизм:

Page 10: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

cat

cat

cat

sort

sort uniq -c

uniq -c

input

ou

tput

map shufle reduce

MapReduce:

Page 11: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Применении:- Распределённый sort, grep и т.д.- Статистика

- SQL-подобные операции- Алгоритмы на графах- Обработка текстов (обратный индекс)- Машинное обучение- и т.д

www.mail.ru 11

Page 12: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Экосистема для «больших» данных:- Линейно масштабируемые- Для «обычного» железа- Простота использования- Основан на Java

www.mail.ru 12

Page 13: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Распределённая файловая система:- Блочная структура- Адаптация под очень большие файлы- Репликации- Автоматическое восстановление- Дружественна MapReduce

www.mail.ru 13

Page 14: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Фреймворк для вычислений:- Инфраструктура- Планирование и балансировка нагрузки- Мониторинг- Основан на Java

www.mail.ru 14

Page 15: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

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

Page 16: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Только 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

Page 17: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Запуск скриптов:hadoop jar hadoop-streaming.jar \

-D mapreduce.job.reduces=100 \-files ./bin/mapper.pl \-input /data/input_dir \-output /data/output_dir \-mapper mapper.pl \-reducer 'uniq -c'

mapper.pl:- input: строчки лога- output: '<page>\n'

www.mail.ru 17

Page 18: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Комбайнер:

mapper.pl:- input: строчки лога- output: '<uid>\t1'

reducer.pl:- input: '<uid1>\t<cnt1>'

'<uid1>\t<cnt2>'- output: '<uid1>\t<cnt1+cnt2>'

hadoop jar hadoop-streaming.jar \-D mapreduce.job.reduces=100 \-files ./bin/mapper.pl,./bin/reducer.pl \-input /data/input_dir \-output /data/output_dir \-mapper mapper.pl \-combiner reducer.pl \-reducer reducer.pl

www.mail.ru 18

Page 19: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Несколько входов:1. Данные хранятся в одном формате2. Несколько '-input'3. Переменная окружения $map_input_file

Любое свойство конфига доступно через переменную окружения.

www.mail.ru 19

Page 20: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Обмен данными:

или

[identifier]:- text : текстовые строки- raw: 4 байта длины + бинарные данные- typedbytes: код типа + бинарные данные

-D stream.map.input=[identifier] -D stream.map.output=[identifier] -D stream.reduce.input=[identifier] -D stream.reduce.output=[identifier]

-io [identifier]

www.mail.ru 20

Page 21: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

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"}www.mail.ru 21

http://d.hatena.ne.jp/wanpark/20081113/1226555456

Page 22: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Счетчики и job-статус:

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

reporter:counter:<group>,<counter>,<amount>- статус: reporter:status:<message>

www.mail.ru 22

Page 23: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Отладка, тесты:

- читаемый ввод-вывод- наличие системы мониторинга- логирование- легко запускать без Hadoop

cat input | sort | uniq -c > output

www.mail.ru 23

Page 24: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Плюсы:- простота разработки- удобство отладки- любые языки

Минусы:- не все возможности Hadoop- замедление примерно 15%- сложности с бинарными данными

www.mail.ru 24

Page 25: Hadoop streaming простой путь к масштабированию приложений обработки данных. алексей воропаев. зал 2

Алексей ВоропаевРуководитель группы ранжирования результатов поиска

[email protected]

www.mail.ru

Спасибо!