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

1,148 views
1,083 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,148
On SlideShare
0
From Embeds
0
Number of Embeds
715
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. MapReduce:Алгоритмы и приемы использования
  2. 2. 3
  3. 3. • Задача: – Много (очень много) данных, которые надо обработать• Решение: 4
  4. 4. Проблемы распределенных систем• Обмен данными требует синхронизации• Ограничение пропускной способности• Частичный отказ нод• Зависимости между процессами• Распределенное хранение данных 5
  5. 5. 6
  6. 6. MapReduce Input data• Большие блоки данных (обычно по 64Мб) Mapper Mapper Mapper• «Разделяй и властвуй»• Каждый блок состоит Shuffle & Sort из пар key/value• Эффективное использование Reducer Reducer кластера Output data 7
  7. 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
  8. 8. Примеры задач на MapReduce:• Распределенный grep и sort• Анализ web логов, статистика• Построение поискового индекса• Кластеризация / классификация• Научные проекты (БАК) 9
  9. 9. Distributed File System (DFS)• Большие файлы, read/append only• Большие блоки (64Мб)• Блоки распределены и реплицируются• Master отслеживает расположение всех блоков• Последовательное чтение данных – seeks are evil! 10
  10. 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
  11. 11. WordCount Doc1 Doc2 Doc3 Doc4class 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
  12. 12. Local Aggregation• Проблема: – Избыточный объем данных от mapper – Пример: стоп-слова• Решение: Combiner – “Mini-reducer” после map, но перед shuffle и sort – Уменьшает размер промежуточных данных – Вызывается произвольное негарантированное количество раз 13
  13. 13. Doc1 Doc2 Doc3 Doc4WordCount, Combinerclass 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
  14. 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
  15. 15. Secondary Sort• Проблема: – Ключи в reducer отсортированы – Но порядок значений - нет• Решение: – Использовать композитный ключ (key + value) – Переопределить Partitioner – Переопределить Comparator 16
  16. 16. Map-Side Join Large data• Алгоритм: – Ассоциативный массив Small data в mapper – Ключ массива – join key HashMap HashMap – Lookup в массив, Mapper Mapper используя join key• Недостаток: Output data – Out of Memory 17
  17. 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
  18. 18. Обратный индекс (Inverted Index)Docs Words Words DocsDoc_1 Word_1 Word_2 Word_3 Word_1 Doc_1Doc_2 Word_2 Word_4 Word_2 Doc_1, Doc_2Doc_3 Word_3 Word_3 Doc_1, Doc_3, Doc_4Doc_4 Word_3 Word_4 Doc_2, Doc_5Doc_5 Word_4 Word_5 Word_5 Doc_5 19
  19. 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
  20. 20. MapReduce в Поиске WEB• Spider • Fetcher - быстро качает интернет Fetcher Fetcher Fetcher • HBase - распределенная таблица с контентом и мета-данными HDFS / HBase • MapReduce jobs MR MR MR MR Job Job Job Job 21
  21. 21. Hadoop, проблемы• C++ (JNI) vs Java• Тестирование задач• Debugging & Profiling задач• Неравномерность распределения данных• Борьба за ресурсы кластера• HBase 22
  22. 22. Hadoop в поиске, цифры• 50 млрд. документов в базе• 20 млрд. обкачанных• 6 млрд. “хороших” документов• 500 млн. новых документов в день• 300 Тб таблица в HBase• 1 Пб данных в hdfs 23
  23. 23. Итого: За Против• Готовая распределенная среда • Не подходит для real-time систем• Горизонтальная масштабируемость • Не все алгоритмы одинаково• Обработка больших данных полезны оптимальны• Отсутствие синхронизации • Не подходит для задач, где:• Read-once, пакетная обработка  Много общих данных• Fault tolerance из коробки  Высокие требования к синхронизации процессов  CPU-bound операции 24
  24. 24. СПАСИБО! Алексей РоманенкоВедущий разработчик, Поиск@Mail.Ru a.romanenko@corp.mail.ru

×