SlideShare una empresa de Scribd logo
1 de 25
MapReduce:
Алгоритмы и приемы использования
3
• Задача:
  – Много (очень много) данных, которые надо обработать
• Решение:




                                                          4
Проблемы распределенных систем
•   Обмен данными требует синхронизации
•   Ограничение пропускной способности
•   Частичный отказ нод
•   Зависимости между процессами
•   Распределенное хранение данных



                                          5
6
MapReduce                            Input data
• Большие блоки данных
  (обычно по 64Мб)        Mapper         Mapper         Mapper
• «Разделяй и властвуй»
• Каждый блок состоит
                                    Shuffle & Sort
  из пар key/value
• Эффективное
  использование                Reducer            Reducer
  кластера
                                     Output data

                                                                 7
Map и Reduce:
• Map
                                        square x = x * x
  – Выполняет функцию для каждого       map square [1, 2, 3, 4, 5]
    значения в наборе данных            return [1, 4, 9, 16, 25]
  – Создает новый набор key/value


• Reduce                                sum = for each value in array, sum += sum
  – Агрегирует values для каждого key   reduce sum[1, 2, 3, 4, 5]
                                        return 15
  – Создает новое value


                                                                                    8
Примеры задач на MapReduce:
•   Распределенный grep и sort
•   Анализ web логов, статистика
•   Построение поискового индекса
•   Кластеризация / классификация
•   Научные проекты (БАК)



                                    9
Distributed File System (DFS)
•   Большие файлы, read/append only
•   Большие блоки (64Мб)
•   Блоки распределены и реплицируются
•   Master отслеживает расположение всех блоков
•   Последовательное чтение данных
     – seeks are evil!


                                                  10
Apache Hadoop               NameNode      JobTracker
                              daemon       daemon



• Open-source реализация   task tracker    task tracker
  MapReduce
                            datanode        datanode
• Фреймворк для             Linux FS        Linux FS
  распределенных
  приложений
• Java API, streaming      SlaveNode       SlaveNode

                                                          11
WordCount                                      Doc1        Doc2         Doc3          Doc4
class Mapper
 method Map(docid a, doc d)
                                           Mapper                 Mapper              Mapper
  for all term t ∈ doc d do
   Emit(term t, count 1)
                                         A{1}    B{3}           A{2}   A{3}       B{2}    B{4}
class Reducer                                               Shuffle & Sort
 method Reduce(term t,
               counts [c1, c2, . . ])
  sum ← 0
                                                      A [1,2,3]            B [3,2,4]
  for all count c ∈ counts [c1, c2, . . ] do
   sum ← sum + c                                   Reducer                 Reducer
  Emit(term t, count sum)
                                                        A {6}                 B {9}
                                                                                               12
Local Aggregation
• Проблема:
   – Избыточный объем данных от mapper
   – Пример: стоп-слова
• Решение: Combiner
   – “Mini-reducer” после map, но перед shuffle и sort
   – Уменьшает размер промежуточных данных
   – Вызывается произвольное негарантированное
     количество раз
                                                         13
Doc1       Doc2            Doc3            Doc4
WordCount, Combiner
class Combiner                           Mapper              Mapper                   Mapper
  method Combine(term t, [c1, c2,..])
    sum = 0
                                        A{1}   B{3}         A{2}     A{2}        B{3}     B{4}
    for all count c in [c1, c2,..] do   Combiner            Combiner              Combiner
      sum = sum + c
    Emit(term t, count sum)             A{1}   B{3}           A{4}                     B{7}
                                                        Shuffle & Sort
                                                  A [1,4]                   B [3,7]

                                                 Reducer                Reducer

                                                   A {5}                    B {10}             14
Local Aggregation
• In-Mapper Combining                   class Mapper
                                          method Initialize
   – Агрегация данных внутри маппера        H ← new AssociativeArray

   – Контроль со стороны пользователя    method Map(docid a, doc d)
   – Более эффективен, чем обычный         for all term t ∈ doc d do
                                             H{t} ← H{t} + 1
     Combiner
   – Уменьшает количество                method Close
     промежуточных данных                  for all term t ∈ H do
                                             Emit(term t, count H{t})
   – Out-of-Memory (flush)



                                                                        15
Secondary Sort
• Проблема:
   – Ключи в reducer отсортированы
   – Но порядок значений - нет
• Решение:
   – Использовать композитный ключ (key + value)
   – Переопределить Partitioner
   – Переопределить Comparator

                                                   16
Map-Side Join                          Large data
• Алгоритм:
  – Ассоциативный массив               Small data
    в mapper
  – Ключ массива – join key        HashMap   HashMap
  – Lookup в массив,          Mapper                   Mapper
    используя join key
• Недостаток:
                                       Output data
  – Out of Memory
                                                                17
Reduce-Side Join                     Data Set 1    Data Set 2
• Алгоритм
  – Map по обоим наборам        Mapper   Mapper   Mapper     Mapper
    данных
  – Выбрать join key
  – Добавить tag в value для
    различия типа данных           Reducer         Reducer
  – В reduce все значения
    сгруппированы по join key            Output data

                                                                 18
Обратный индекс (Inverted Index)
Docs    Words                  Words    Docs
Doc_1   Word_1 Word_2 Word_3   Word_1   Doc_1
Doc_2   Word_2 Word_4          Word_2   Doc_1, Doc_2
Doc_3   Word_3                 Word_3   Doc_1, Doc_3, Doc_4
Doc_4   Word_3                 Word_4   Doc_2, Doc_5
Doc_5   Word_4 Word_5          Word_5   Doc_5




                                                              19
Обратный индекс                   class Mapper
• Mapper                            Map(docid n, doc d)
   – Для каждого терма t из           H ← new AssociativeArray
                                      for all term t ∈ doc d do
     документа d создаем пару           H{t} ← H{t} + 1
     key/value                          for all term t ∈ H do
• Все key/value сортируются и             Emit(term t, posting<n, H{t}>)

  группируются по ключу           class Reducer
• Reducer                           Reduce(term t, postings [<n1, f1>, <n2, f2>. . ])
                                      P ← new List
   – Для каждого слова мы             for all posting <a, f> ∈ postings [<n1, f1>,
                                      <n2, f2> . .] do
     получаем все его вхождения         P.Add(<a, f>)
     в документы                      P.Sort()
                                      Emit(term t, postings P)


                                                                                   20
MapReduce в Поиске                        WEB

• Spider
  • Fetcher - быстро качает
    интернет                  Fetcher     Fetcher         Fetcher

  • HBase - распределенная
    таблица с контентом и
    мета-данными                        HDFS / HBase

  • MapReduce jobs
                              MR        MR          MR        MR
                              Job       Job         Job       Job
                                                                    21
Hadoop, проблемы
•   C++ (JNI) vs Java
•   Тестирование задач
•   Debugging & Profiling задач
•   Неравномерность распределения данных
•   Борьба за ресурсы кластера
•   HBase
                                           22
Hadoop в поиске, цифры
•   50 млрд. документов в базе
•   20 млрд. обкачанных
•   6 млрд. “хороших” документов
•   500 млн. новых документов в день
•   300 Тб таблица в HBase
•   1 Пб данных в hdfs


                                       23
Итого:
               За                                 Против
• Готовая распределенная среда      • Не подходит для real-time систем
• Горизонтальная масштабируемость   • Не все алгоритмы одинаково
• Обработка больших данных          полезны оптимальны
• Отсутствие синхронизации          • Не подходит для задач, где:
• Read-once, пакетная обработка          Много общих данных
• Fault tolerance из коробки             Высокие требования к
                                        синхронизации процессов
                                         CPU-bound операции




                                                                         24
СПАСИБО!
         Алексей Романенко
Ведущий разработчик, Поиск@Mail.Ru
     a.romanenko@corp.mail.ru

Más contenido relacionado

La actualidad más candente (6)

Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
05 динамическое программирование
05 динамическое программирование05 динамическое программирование
05 динамическое программирование
 
05 динамическое программирование
05 динамическое программирование05 динамическое программирование
05 динамическое программирование
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции04 динамическое программирование - основные концепции
04 динамическое программирование - основные концепции
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировка
 

Similar a алексей романенко

Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шаги
Anton Gorokhov
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
sharikdp
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмов
Mikhail Kurnosov
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Mikhail Kurnosov
 

Similar a алексей романенко (20)

Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Hadoops MapReduce framework explanations
Hadoops MapReduce framework explanationsHadoops MapReduce framework explanations
Hadoops MapReduce framework explanations
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce
 
13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark
 
05 - Hadoop. Парадигма MapReduce и фреймворк MapReduce
05 - Hadoop. Парадигма MapReduce и фреймворк MapReduce05 - Hadoop. Парадигма MapReduce и фреймворк MapReduce
05 - Hadoop. Парадигма MapReduce и фреймворк MapReduce
 
Динамика и статика — метрики графов социальных сетей - Cергей Зефиров
Динамика и статика — метрики графов социальных сетей - Cергей ЗефировДинамика и статика — метрики графов социальных сетей - Cергей Зефиров
Динамика и статика — метрики графов социальных сетей - Cергей Зефиров
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
Внешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlibВнешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlib
 
Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шаги
 
Map reduce
Map reduceMap reduce
Map reduce
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Apache spark
Apache sparkApache spark
Apache spark
 
06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop Streaming06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop Streaming
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмов
 
Lektsia 9
Lektsia 9Lektsia 9
Lektsia 9
 
введение
введениевведение
введение
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.
 
Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 

Más de kuchinskaya (20)

Kharkov
KharkovKharkov
Kharkov
 
Balashov
BalashovBalashov
Balashov
 
Zamyakin
ZamyakinZamyakin
Zamyakin
 
Panfilov
PanfilovPanfilov
Panfilov
 
Platov
PlatovPlatov
Platov
 
Rabovoluk
RabovolukRabovoluk
Rabovoluk
 
Smirnov dependency-injection-techforum(1)
Smirnov dependency-injection-techforum(1)Smirnov dependency-injection-techforum(1)
Smirnov dependency-injection-techforum(1)
 
Smirnov reverse-engineering-techforum
Smirnov reverse-engineering-techforumSmirnov reverse-engineering-techforum
Smirnov reverse-engineering-techforum
 
Zacepin
ZacepinZacepin
Zacepin
 
Zagursky
ZagurskyZagursky
Zagursky
 
Haritonov
HaritonovHaritonov
Haritonov
 
Chudov
ChudovChudov
Chudov
 
Bubnov
BubnovBubnov
Bubnov
 
A.pleshkov
A.pleshkovA.pleshkov
A.pleshkov
 
Zenovich
ZenovichZenovich
Zenovich
 
Romanenko
RomanenkoRomanenko
Romanenko
 
Perepelitsa
PerepelitsaPerepelitsa
Perepelitsa
 
Osipov
OsipovOsipov
Osipov
 
Kubasov
KubasovKubasov
Kubasov
 
Kalugin balashov
Kalugin balashovKalugin balashov
Kalugin balashov
 

алексей романенко

  • 1.
  • 3. 3
  • 4. • Задача: – Много (очень много) данных, которые надо обработать • Решение: 4
  • 5. Проблемы распределенных систем • Обмен данными требует синхронизации • Ограничение пропускной способности • Частичный отказ нод • Зависимости между процессами • Распределенное хранение данных 5
  • 6. 6
  • 7. MapReduce Input data • Большие блоки данных (обычно по 64Мб) Mapper Mapper Mapper • «Разделяй и властвуй» • Каждый блок состоит Shuffle & Sort из пар key/value • Эффективное использование Reducer Reducer кластера Output data 7
  • 8. Map и Reduce: • Map square x = x * x – Выполняет функцию для каждого map square [1, 2, 3, 4, 5] значения в наборе данных return [1, 4, 9, 16, 25] – Создает новый набор key/value • Reduce sum = for each value in array, sum += sum – Агрегирует values для каждого key reduce sum[1, 2, 3, 4, 5] return 15 – Создает новое value 8
  • 9. Примеры задач на MapReduce: • Распределенный grep и sort • Анализ web логов, статистика • Построение поискового индекса • Кластеризация / классификация • Научные проекты (БАК) 9
  • 10. Distributed File System (DFS) • Большие файлы, read/append only • Большие блоки (64Мб) • Блоки распределены и реплицируются • Master отслеживает расположение всех блоков • Последовательное чтение данных – seeks are evil! 10
  • 11. Apache Hadoop NameNode JobTracker daemon daemon • Open-source реализация task tracker task tracker MapReduce datanode datanode • Фреймворк для Linux FS Linux FS распределенных приложений • Java API, streaming SlaveNode SlaveNode 11
  • 12. WordCount Doc1 Doc2 Doc3 Doc4 class Mapper method Map(docid a, doc d) Mapper Mapper Mapper for all term t ∈ doc d do Emit(term t, count 1) A{1} B{3} A{2} A{3} B{2} B{4} class Reducer Shuffle & Sort method Reduce(term t, counts [c1, c2, . . ]) sum ← 0 A [1,2,3] B [3,2,4] for all count c ∈ counts [c1, c2, . . ] do sum ← sum + c Reducer Reducer Emit(term t, count sum) A {6} B {9} 12
  • 13. Local Aggregation • Проблема: – Избыточный объем данных от mapper – Пример: стоп-слова • Решение: Combiner – “Mini-reducer” после map, но перед shuffle и sort – Уменьшает размер промежуточных данных – Вызывается произвольное негарантированное количество раз 13
  • 14. Doc1 Doc2 Doc3 Doc4 WordCount, Combiner class Combiner Mapper Mapper Mapper method Combine(term t, [c1, c2,..]) sum = 0 A{1} B{3} A{2} A{2} B{3} B{4} for all count c in [c1, c2,..] do Combiner Combiner Combiner sum = sum + c Emit(term t, count sum) A{1} B{3} A{4} B{7} Shuffle & Sort A [1,4] B [3,7] Reducer Reducer A {5} B {10} 14
  • 15. Local Aggregation • In-Mapper Combining class Mapper method Initialize – Агрегация данных внутри маппера H ← new AssociativeArray – Контроль со стороны пользователя method Map(docid a, doc d) – Более эффективен, чем обычный for all term t ∈ doc d do H{t} ← H{t} + 1 Combiner – Уменьшает количество method Close промежуточных данных for all term t ∈ H do Emit(term t, count H{t}) – Out-of-Memory (flush) 15
  • 16. Secondary Sort • Проблема: – Ключи в reducer отсортированы – Но порядок значений - нет • Решение: – Использовать композитный ключ (key + value) – Переопределить Partitioner – Переопределить Comparator 16
  • 17. Map-Side Join Large data • Алгоритм: – Ассоциативный массив Small data в mapper – Ключ массива – join key HashMap HashMap – Lookup в массив, Mapper Mapper используя join key • Недостаток: Output data – Out of Memory 17
  • 18. Reduce-Side Join Data Set 1 Data Set 2 • Алгоритм – Map по обоим наборам Mapper Mapper Mapper Mapper данных – Выбрать join key – Добавить tag в value для различия типа данных Reducer Reducer – В reduce все значения сгруппированы по join key Output data 18
  • 19. Обратный индекс (Inverted Index) Docs Words Words Docs Doc_1 Word_1 Word_2 Word_3 Word_1 Doc_1 Doc_2 Word_2 Word_4 Word_2 Doc_1, Doc_2 Doc_3 Word_3 Word_3 Doc_1, Doc_3, Doc_4 Doc_4 Word_3 Word_4 Doc_2, Doc_5 Doc_5 Word_4 Word_5 Word_5 Doc_5 19
  • 20. Обратный индекс class Mapper • Mapper Map(docid n, doc d) – Для каждого терма t из H ← new AssociativeArray for all term t ∈ doc d do документа d создаем пару H{t} ← H{t} + 1 key/value for all term t ∈ H do • Все key/value сортируются и Emit(term t, posting<n, H{t}>) группируются по ключу class Reducer • Reducer Reduce(term t, postings [<n1, f1>, <n2, f2>. . ]) P ← new List – Для каждого слова мы for all posting <a, f> ∈ postings [<n1, f1>, <n2, f2> . .] do получаем все его вхождения P.Add(<a, f>) в документы P.Sort() Emit(term t, postings P) 20
  • 21. MapReduce в Поиске WEB • Spider • Fetcher - быстро качает интернет Fetcher Fetcher Fetcher • HBase - распределенная таблица с контентом и мета-данными HDFS / HBase • MapReduce jobs MR MR MR MR Job Job Job Job 21
  • 22. Hadoop, проблемы • C++ (JNI) vs Java • Тестирование задач • Debugging & Profiling задач • Неравномерность распределения данных • Борьба за ресурсы кластера • HBase 22
  • 23. Hadoop в поиске, цифры • 50 млрд. документов в базе • 20 млрд. обкачанных • 6 млрд. “хороших” документов • 500 млн. новых документов в день • 300 Тб таблица в HBase • 1 Пб данных в hdfs 23
  • 24. Итого: За Против • Готовая распределенная среда • Не подходит для real-time систем • Горизонтальная масштабируемость • Не все алгоритмы одинаково • Обработка больших данных полезны оптимальны • Отсутствие синхронизации • Не подходит для задач, где: • Read-once, пакетная обработка  Много общих данных • Fault tolerance из коробки  Высокие требования к синхронизации процессов  CPU-bound операции 24
  • 25. СПАСИБО! Алексей Романенко Ведущий разработчик, Поиск@Mail.Ru a.romanenko@corp.mail.ru