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

  • 878 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
878
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
4
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