Your SlideShare is downloading. ×
0
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
алексей романенко
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

959

Published on

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

No Downloads
Views
Total Views
959
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. MapReduce:Алгоритмы и приемы использования
  • 2. 3
  • 3. • Задача: – Много (очень много) данных, которые надо обработать• Решение: 4
  • 4. Проблемы распределенных систем• Обмен данными требует синхронизации• Ограничение пропускной способности• Частичный отказ нод• Зависимости между процессами• Распределенное хранение данных 5
  • 5. 6
  • 6. MapReduce Input data• Большие блоки данных (обычно по 64Мб) Mapper Mapper Mapper• «Разделяй и властвуй»• Каждый блок состоит Shuffle & Sort из пар key/value• Эффективное использование Reducer Reducer кластера Output data 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. Примеры задач на MapReduce:• Распределенный grep и sort• Анализ web логов, статистика• Построение поискового индекса• Кластеризация / классификация• Научные проекты (БАК) 9
  • 9. Distributed File System (DFS)• Большие файлы, read/append only• Большие блоки (64Мб)• Блоки распределены и реплицируются• Master отслеживает расположение всех блоков• Последовательное чтение данных – seeks are evil! 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. 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. Local Aggregation• Проблема: – Избыточный объем данных от mapper – Пример: стоп-слова• Решение: Combiner – “Mini-reducer” после map, но перед shuffle и sort – Уменьшает размер промежуточных данных – Вызывается произвольное негарантированное количество раз 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. 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. Secondary Sort• Проблема: – Ключи в reducer отсортированы – Но порядок значений - нет• Решение: – Использовать композитный ключ (key + value) – Переопределить Partitioner – Переопределить Comparator 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. 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. Обратный индекс (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. Обратный индекс 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. MapReduce в Поиске WEB• Spider • Fetcher - быстро качает интернет Fetcher Fetcher Fetcher • HBase - распределенная таблица с контентом и мета-данными HDFS / HBase • MapReduce jobs MR MR MR MR Job Job Job Job 21
  • 21. Hadoop, проблемы• C++ (JNI) vs Java• Тестирование задач• Debugging & Profiling задач• Неравномерность распределения данных• Борьба за ресурсы кластера• HBase 22
  • 22. Hadoop в поиске, цифры• 50 млрд. документов в базе• 20 млрд. обкачанных• 6 млрд. “хороших” документов• 500 млн. новых документов в день• 300 Тб таблица в HBase• 1 Пб данных в hdfs 23
  • 23. Итого: За Против• Готовая распределенная среда • Не подходит для real-time систем• Горизонтальная масштабируемость • Не все алгоритмы одинаково• Обработка больших данных полезны оптимальны• Отсутствие синхронизации • Не подходит для задач, где:• Read-once, пакетная обработка  Много общих данных• Fault tolerance из коробки  Высокие требования к синхронизации процессов  CPU-bound операции 24
  • 24. СПАСИБО! Алексей РоманенкоВедущий разработчик, Поиск@Mail.Ru a.romanenko@corp.mail.ru

×