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

                   Алексей Воропаев
   Руководитель группы ранжирования результатов поиска
Зачем?
    Данные постоянно растут:
         -   Граф внешних ссылок 2007 год: 100 Гб
         -   Граф внешних ссылок 2011 год: 10 Тб
         -   Граф всех ссылок 2011 год: 100 Тб
         -   Поведенческая статистика: 300 Гб / день




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




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

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



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




www.mail.ru                              5
Где взять людей???
    - опыт работы с петабайтами данных
    - знания распределённых вычислений
    - умение делать быстро и надёжно




www.mail.ru                              6
Комплексные решения?
Google:
   - 2003 год: GoogleFileSystem
   - 2004 год: MapReduce




www.mail.ru                       7
Подсчет уникальных строк:




   # cat input   | sort |   uniq -c   > output




www.mail.ru                                  8
Добавляем параллелизм:

              cat

                             sort      uniq -c




                                                     output
  input




              cat

                             sort      uniq -c

              cat
                                       Обрабатывае
                       Группируем в       м кучи
            Строки
                       кучи по ключу   параллельно
          независимы

www.mail.ru                                                   9
MapReduce:

         cat

                 sort   uniq -c




                                  output
 input




         cat

                 sort   uniq -c

         cat


         map   shufle   reduce
Применении:
   - Распределённый sort, grep и т.д.
   - Статистика
   - SQL-подобные операции
   - Алгоритмы на графах
   - Обработка текстов (обратный индекс)
   - Машинное обучение
   - и т.д




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




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


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




www.mail.ru                              14
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
Только 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
Запуск скриптов:
 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
Комбайнер:
 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
mapper.pl:
   - input: строчки лога
   - output: '<uid>t1'
reducer.pl:
   - input:    '<uid1>t<cnt1>'
               '<uid1>t<cnt2>'
   - output:   '<uid1>t<cnt1+cnt2>'

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

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




www.mail.ru                                  19
Обмен данными:
      -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
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
Счетчики и job-статус:
   - позволяют вести учет событий
   - используют стандартный поток ошибок
   - счетчик:
       reporter:counter:<group>,<counter>,<amount>
   - статус:
     reporter:status:<message>




www.mail.ru                                    22
Отладка, тесты:

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


   cat input | sort | uniq -c > output



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

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



www.mail.ru                          24
Спасибо!
                Алексей Воропаев
   Руководитель группы ранжирования результатов поиска
                   voropaev@corp.mail.ru




www.mail.ru

More Related Content

PDF
Hacking PostgreSQL. Разделяемая память и блокировки.
ODP
Hacking PostgreSQL. Физическое представление данных
PPT
Сергей Мирошниченко - SEO-friendly data migration
PDF
Hacking PostgreSQL. Обзор исходного кода
PDF
Лекция 6. MapReduce в Hadoop (графы)
PDF
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
PDF
Расширения для PostgreSQL
PDF
Hadoop > cascading -> cascalog (short version)
Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Физическое представление данных
Сергей Мирошниченко - SEO-friendly data migration
Hacking PostgreSQL. Обзор исходного кода
Лекция 6. MapReduce в Hadoop (графы)
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Расширения для PostgreSQL
Hadoop > cascading -> cascalog (short version)

Viewers also liked (9)

PDF
Платформа Apache Hadoop
ODP
Apache Hadoop
PPT
ADD2010: Обработка большого объема данных на платформеApache Hadoop
PDF
Solit 2014, MapReduce и машинное обучение на hadoop и mahout, Слисенко Конста...
PDF
Hadoop presentation
PDF
Лекция 1. Введение в Big Data и MapReduce
PDF
Лекция 2. Основы Hadoop
PPTX
Hadoop introduction , Why and What is Hadoop ?
PDF
Hadoop Overview & Architecture
 
Платформа Apache Hadoop
Apache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop
Solit 2014, MapReduce и машинное обучение на hadoop и mahout, Слисенко Конста...
Hadoop presentation
Лекция 1. Введение в Big Data и MapReduce
Лекция 2. Основы Hadoop
Hadoop introduction , Why and What is Hadoop ?
Hadoop Overview & Architecture
 
Ad

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

PDF
pgconf.ru 2015 avito postgresql
PDF
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
PDF
Hadoop > cascading -> cascalog (very short)
PDF
Разработка на Perl под Raspberry PI
PDF
05 - Hadoop. Парадигма MapReduce и фреймворк MapReduce
PDF
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
PDF
08 - Hadoop. Алгоритмы на графах в MapReduce
PDF
Лекция 6. Стандарт OpenMP
PDF
Hadoop -> Cascading -> Cascalog
PDF
Параллельные и распределенные вычисления
PPTX
20090720 hpc exercise1
PPT
Php Conf2007 Mapscript
PDF
Batch processing on RoR
PDF
Фёдор Голубев "API Яндекс.Карт"
PDF
TMPA-2013 Sartakov: Genode
PDF
09 - Hadoop. Pig
PPTX
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
PDF
pgday17. How shared memory works in modern PostgreSQL
PPTX
Контроль качества и сопровождение программ в реальном времени
PPT
PureMVC в картинках - часть 1
pgconf.ru 2015 avito postgresql
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Hadoop > cascading -> cascalog (very short)
Разработка на Perl под Raspberry PI
05 - Hadoop. Парадигма MapReduce и фреймворк MapReduce
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
08 - Hadoop. Алгоритмы на графах в MapReduce
Лекция 6. Стандарт OpenMP
Hadoop -> Cascading -> Cascalog
Параллельные и распределенные вычисления
20090720 hpc exercise1
Php Conf2007 Mapscript
Batch processing on RoR
Фёдор Голубев "API Яндекс.Карт"
TMPA-2013 Sartakov: Genode
09 - Hadoop. Pig
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
pgday17. How shared memory works in modern PostgreSQL
Контроль качества и сопровождение программ в реальном времени
PureMVC в картинках - часть 1
Ad

More from rit2011 (20)

PPT
классификация Ddos. александр лямин, артем гавриченков. зал 2
PDF
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
PPT
как объяснить заказчику, что он не прав. денис тучин. зал 3
PDF
классификация Ddos. александр лямин, артем гавриченков. зал 2
PPTX
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
PDF
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
PDF
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
PPT
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
PDF
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
PPT
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
PDF
как стать хорошим веб технологом. нарек мкртчян. зал 4
PPTX
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
PPT
выращиваем интерфейс своими руками. ольга павлова. зал 3
PDF
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
PPT
от Flash к html5. александр бацуев. зал 4
PPTX
Ie9 и ie10. алекс могилевский. зал 2
PPTX
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
POTX
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
PPTX
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
как объяснить заказчику, что он не прав. денис тучин. зал 3
классификация Ddos. александр лямин, артем гавриченков. зал 2
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
выращиваем интерфейс своими руками. ольга павлова. зал 3
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
от Flash к html5. александр бацуев. зал 4
Ie9 и ie10. алекс могилевский. зал 2
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 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
  • 5. Частичные решения: 1. Распределённые FS 2. Распределённые СУБД 3. MPI, PVM, Cluster OpenMP и т.д. www.mail.ru 5
  • 6. Где взять людей??? - опыт работы с петабайтами данных - знания распределённых вычислений - умение делать быстро и надёжно www.mail.ru 6
  • 7. Комплексные решения? Google: - 2003 год: GoogleFileSystem - 2004 год: MapReduce www.mail.ru 7
  • 8. Подсчет уникальных строк: # cat input | sort | uniq -c > output www.mail.ru 8
  • 9. Добавляем параллелизм: cat sort uniq -c output input cat sort uniq -c cat Обрабатывае Группируем в м кучи Строки кучи по ключу параллельно независимы www.mail.ru 9
  • 10. MapReduce: cat sort uniq -c output input cat sort uniq -c cat map shufle reduce
  • 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
  • 17. Запуск скриптов: 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
  • 18. Комбайнер: 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 mapper.pl: - input: строчки лога - output: '<uid>t1' reducer.pl: - input: '<uid1>t<cnt1>' '<uid1>t<cnt2>' - output: '<uid1>t<cnt1+cnt2>' www.mail.ru 18
  • 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