Your SlideShare is downloading. ×
MapReduce взгляд вглубь
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

MapReduce взгляд вглубь

730
views

Published on

Слайды с лекция в МГТУ им. Баумана. …

Слайды с лекция в МГТУ им. Баумана.
11.03.2013


0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
730
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
22
Comments
0
Likes
5
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. Map Reduceвзгляд вглубь Павел Мезенцев p.mezentsev@rambler-co.ru
  • 2. План● Что такое MapReduce● Элементарные запросы● Алгоритмы машинного обучения
  • 3. История MapReduce2003 г. Презентация Google MapReduce2005 г. Начало разработки Hadoop в Yahoo2007 г. Первый “боевой” Hadoop в Yahoo (4 500 нод)2011 г. Стабильный релиз Hadoop 1.0
  • 4. Где используется Hadoop?
  • 5. Из чего состоит HadoopРаспределенная файловая система HDFS● Name Node● Data NodeСистема вычислений MapReduce● Job Tracker● Task Tracker
  • 6. Архитектура Hadoop
  • 7. Парадигма MapReduce● Map(k 1, v 1 )→list (k 2, v 2 )● Shuffle & sort● Reduce(k 2 , list (v 2 ))→list (k 3, v 3 )
  • 8. Свойства MapReduceОтказоустойчивость● Репликация● Промежуточные данные хранятся на дискеВычислительная эффективность● Последовательная работа с диском● Data Locality● Speculative Execution
  • 9. Элементарные операции● Filter● Sort● Aggregate● Join
  • 10. Логи Апача ip - - [time] "GET url HTTP 1.0" responce size referrer "user agent"234.248.187.116 - - [01/May/2012:00:11:14 +0400] "GET http://news.rambler.ru/84459.html HTTP 1.0" 200 3347 - "Mozilla/5.0 (Windows; I; Windows NT 5.1; ru; rv:1.9.2.1...234.248.187.116 - - [01/May/2012:00:12:47 +0400] "GET http://news.rambler.ru/14545.html HTTP 1.0" 200 12905 http://news.rambler.ru/84459.html "Mozilla/5.0 (Windows; I...234.248.187.116 - - [01/May/2012:00:15:39 +0400] "GET http://news.rambler.ru/92834.html HTTP 1.0" 200 13995 http://news.rambler.ru/14545.html "Mozilla/5.0 (Windows; I...234.248.187.116 - - [01/May/2012:00:15:50 +0400] "GET http://news.rambler.ru/59243.html HTTP 1.0" 200 15434 http://news.rambler.ru/92834.html "Mozilla/5.0 (Windows; I...234.248.187.116 - - [01/May/2012:00:16:22 +0400] "GET http://news.rambler.ru/26836.html HTTP 1.0" 200 19972 http://news.rambler.ru/59243.html "Mozilla/5.0 (Windows; I...234.248.187.116 - - [01/May/2012:00:17:33 +0400] "GET http://news.rambler.ru/69898.html HTTP 1.0" 200 5339 http://news.rambler.ru/26836.html "Mozilla/5.0 (Windows; I...234.248.187.116 - - [01/May/2012:00:19:01 +0400] "GET http://news.rambler.ru/33116.html HTTP 1.0" 200 17092 http://news.rambler.ru/69898.html "Mozilla/5.0 (Windows; I...234.248.187.116 - - [01/May/2012:00:19:44 +0400] "GET http://news.rambler.ru/70344.html HTTP 1.0" 200 17505 http://news.rambler.ru/33116.html "Mozilla/5.0 (Windows; I...234.248.187.116 - - [01/May/2012:00:22:29 +0400] "GET http://news.rambler.ru/36486.html HTTP 1.0" 200 5631 http://news.rambler.ru/70344.html "Mozilla/5.0 (Windows; I...234.248.187.116 - - [01/May/2012:00:22:55 +0400] "GET http://news.rambler.ru/86889.html HTTP 1.0" 200 12829 http://news.rambler.ru/36486.html "Mozilla/5.0 (Windows; I...234.248.187.116 - - [01/May/2012:00:24:30 +0400] "GET http://news.rambler.ru/92288.html HTTP 1.0" 200 2567 http://news.rambler.ru/86889.html "Mozilla/5.0 (Windows; I...206.93.190.212 - - [01/May/2012:00:25:31 +0400] "GET http://news.rambler.ru/19636.html HTTP 1.0" 200 18800 - "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trid...234.248.187.116 - - [01/May/2012:00:26:17 +0400] "GET http://news.rambler.ru/71652.html HTTP 1.0" 200 9754 http://news.rambler.ru/92288.html "Mozilla/5.0 (Windows; I...206.93.190.212 - - [01/May/2012:00:26:22 +0400] "GET http://news.rambler.ru/77419.html HTTP 1.0" 200 13543 http://news.rambler.ru/19636.html "Mozilla/5.0 (compatible...56.134.253.176 - - [01/May/2012:00:26:22 +0400] "GET http://news.rambler.ru/22870.html HTTP 1.0" 200 4941 - "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us...234.248.187.116 - - [01/May/2012:00:26:59 +0400] "GET http://news.rambler.ru/16899.html HTTP 1.0" 200 16334 http://news.rambler.ru/71652.html "Mozilla/5.0 (Windows; I...56.134.253.176 - - [01/May/2012:00:27:19 +0400] "GET http://news.rambler.ru/75525.html HTTP 1.0" 200 19956 http://news.rambler.ru/22870.html "Mozilla/5.0 (iPad; U; C...234.248.187.116 - - [01/May/2012:00:28:21 +0400] "GET http://news.rambler.ru/89381.html HTTP 1.0" 200 2163 http://news.rambler.ru/16899.html "Mozilla/5.0 (Windows; I...206.93.190.212 - - [01/May/2012:00:28:53 +0400] "GET http://news.rambler.ru/51517.html HTTP 1.0" 200 4098 http://news.rambler.ru/77419.html "Mozilla/5.0 (compatible...56.134.253.176 - - [01/May/2012:00:29:18 +0400] "GET http://news.rambler.ru/82514.html HTTP 1.0" 200 15383 http://news.rambler.ru/75525.html "Mozilla/5.0 (iPad; U; C...206.93.190.212 - - [01/May/2012:00:30:15 +0400] "GET http://news.rambler.ru/16247.html HTTP 1.0" 200 15262 http://news.rambler.ru/51517.html "Mozilla/5.0 (compatible...234.248.187.116 - - [01/May/2012:00:30:20 +0400] "GET http://news.rambler.ru/95348.html HTTP 1.0" 200 2282 http://news.rambler.ru/89381.html "Mozilla/5.0 (Windows; I...206.93.190.212 - - [01/May/2012:00:30:42 +0400] "GET http://news.rambler.ru/77261.html HTTP 1.0" 200 2396 http://news.rambler.ru/16247.html "Mozilla/5.0 (compatible...56.134.253.176 - - [01/May/2012:00:32:05 +0400] "GET http://news.rambler.ru/35353.html HTTP 1.0" 200 5436 http://news.rambler.ru/82514.html "Mozilla/5.0 (iPad; U; C...206.93.190.212 - - [01/May/2012:00:32:42 +0400] "GET http://news.rambler.ru/94600.html HTTP 1.0" 200 13284 http://news.rambler.ru/77261.html "Mozilla/5.0 (compatible...234.248.187.116 - - [01/May/2012:00:32:43 +0400] "GET http://news.rambler.ru/33780.html HTTP 1.0" 200 14543 http://news.rambler.ru/95348.html "Mozilla/5.0 (Windows; I...206.93.190.212 - - [01/May/2012:00:32:58 +0400] "GET http://news.rambler.ru/63754.html HTTP 1.0" 200 7173 http://news.rambler.ru/94600.html "Mozilla/5.0 (compatible...206.93.190.212 - - [01/May/2012:00:33:10 +0400] "GET http://news.rambler.ru/53586.html HTTP 1.0" 200 6737 http://news.rambler.ru/63754.html "Mozilla/5.0 (compatible...234.248.187.116 - - [01/May/2012:00:34:27 +0400] "GET http://news.rambler.ru/66747.html HTTP 1.0" 200 4256 http://news.rambler.ru/33780.html "Mozilla/5.0 (Windows; I...….................................................................................................................................................................................................................................................................................................
  • 11. FilterТолько map стадияПример:Найти все логи поисковых переходов
  • 12. Пример Java кодаpublic static class FilterMapper extends Mapper <LongWritable, Text, Text, NullWritable>{ protected void map (LongWritable key, Text logLine, Context context) { ApacheLogLine apacheLogLine = new ApacheLogLine (logLine.toString ()); if (apacheLogLine.getReferrer ().contains ("yandex.ru")) { context.write(logLine, NullWritable.get ()); } }}
  • 13. Драйвер задачиpublic class FilterPrimitive{ public static int main (String [] args) throws Exception { Job job = new Job (); job.setJarByClass(FilterPrimitive.class); job.setMapperClass(FilterMapper.class); job.setNumReduceTasks (0); job.setOutputKeyClass (Text.class); job.setOutputValueClass(NullWritable.class); FileInputFormat.addInputPath(job, new Path (args [0])); FileOutputFormat.setOutputPath(job, new Path (args [1])); int returnCode = job.waitForCompletion(true) ? 1 : 0; return returnCode; }}
  • 14. SortИспользуется 1 редьюсерПример:отсортировать логи по IP
  • 15. Пример Java кодаpublic static class SortMapper extends Mapper <LongWritable, Text, Text, NullWritable>{ @Override protected void map (LongWritable key, Text logLine, Context context) throws IOException, InterruptedException { context.write(logLine, NullWritable.get ()); }}public static class SortReducer extends Reducer <Text, NullWritable, Text, NullWritable>{ @Override protected void reduce (Text logline, Iterable <NullWritable> clicks, Context context) throws IOException, InterruptedException { for (NullWritable click : clicks) { context.write(logline, click); } }}
  • 16. AggregateMap-Reduce операция общего видаПример:посчитать число кликов, сделанных скажого из ip
  • 17. Пример Java кодаpublic static class AggregateMapper extends Mapper <LongWritable, Text, Text, NullWritable>{ protected void map (LongWritable key, Text logLine, Context context) { ApacheLogLine apacheLogLine = new ApacheLogLine (logLine.toString ()); context.write(new Text (apacheLogLine.getIp ()), NullWritable.get ()); }}public static class AggregateReducer extends Reducer <Text, NullWritable, Text, LongWritable>{ protected void reduce (Text ip, Iterable <NullWritable> clicks, Context context) { int clicksCount = 0; for (NullWritable click : clicks) { clicksCount ++; } context.write (ip, new LongWritable (clicksCount)); }}
  • 18. JoinПример задачи: имея таблицу соотвия “IP–география” отфильтровать логи, сделанные с московских IPшников.Как можно сделать Join при помощи MapReduce?
  • 19. JoinПример задачи: имея таблицу соотвия “IP–география” отфильтровать логи, сделанные с московских IPшников.Как можно сделать Join при помощи MapReduce?● Map-Side Join● Reduce-Side Join
  • 20. JoinMultipleInputs.addInputPath (conf, hdfsPath, TextInputFormat.class, JoinMapper.class);
  • 21. Пример Java кода Мапперы:public static class Join1Mapper extends Mapper <LongWritable, Text, Text, Text>{ public void map (LongWritable lineNum, Text logLine, Context context) { ApacheLogLine apacheLogLine = new ApacheLogLine (logLine.toString ()); context.write(new Text (apacheLogLine.getIp ()), new Text ("log:" + logLine.toString ())); }}public static class Join2Mapper extends Mapper <LongWritable, Text, Text, Text>{ protected void map (LongWritable key, Text logLine, Context context) { String [] fields = logLine.toString ().split ("t"); context.write(new Text (fields [0]), new Text ("city_name:" + fields [1])); }}
  • 22. Пример Java кодаpublic static class JoinReducer extends Reducer <Text, Text, Text, NullWritable>{ protected void reduce (Text ip, Iterable <Text> logsAndGeo, Context context) { List <String> logsList = new LinkedList <String> (); boolean isChosenCity = false; while (logsAndGeo.hasNext()) { String logOrGeo = logsAndGeo.next ().toString (); if (logOrGeo == "city_name:Moscow") { isChosenCity = true; } else { logsList.add (logOrGeo.substring (5)); } } if (isChosenCity) { for (String logLine : logsList) { context.write(new Text (logLine), NullWritable.get ()); } } }
  • 23. Языки высокого уровняApache Pig Apache Hive vs● Скриптовый язык ● SQL подобный язык● Разработан в Yahoo ● Разработан в Facebook
  • 24. Загрузка данных Apache Pig Apache Hivelogs = LOAD /user/mezentsev/logs as ( create table logs ( ip:chararray, ip STRING, empty1:chararray, empty1 STRING, empty2:chararray, empty2 STRING, human_time:chararray, request:chararray, vs human_time STRING, request STRING, return_code:int, return_code INT, size:int, size INT, referrer:chararray, referrer STRING, user_agent:chararray); user_agent STRING) LOCATION /user/mezentsev/logs;
  • 25. Фильтрация Apache Pig Apache Hivefiltered_logs = FILTERlogs by select * from logs where(referrer matches.*yandex.ru.*); vs referrer like "%yandex.ru%";dump filtered_logs;
  • 26. Сортировка Apache Pig Apache Hive SELECT ip,sorted_logs = ORDER human_time,logs BY ip, human_time; requestdump sorted_logs; vs FROM logs ORDER BY ip, human_time;
  • 27. Агрегация Apache Pig Apache Hivelogs_by_ip = SELECT ip, count (1)GROUP logs BY ip; FROM logs GROUP BY ip;ip_clicks = FOREACH vslogs_by_ip generategroup, COUNT($1);DUMP ip_clicks;
  • 28. Join Apache Pig Apache Hivemoscow_geo = FILTER SELECT logs.*geo BY FROM logs(city_name == Moscow); join geo ON logs.ip = geo.ip vs WHERElogs_with_geo = JOIN logs geo.city_name = "Moscow";BY ip, moscow_geo BY ip;DUMP logs_with_geo;
  • 29. Как обрабатыватьданные быстро?
  • 30. Как обрабатыватьданные быстро?● 2010 г. Google Dremel● 2012 г. Cloudera Impala● 2012 г. Amazon Redshift● 2013 г. Apache Drill
  • 31. Как обрабатыватьданные быстро?● SQL образный синтаксис запросов● Результаты вычислений “не большие”● Отсутствует отказоустойчивость
  • 32. MPP Архитектура
  • 33. Impala vs Hive●Работают с одним хранилищемметаданных●Производительность Impala в 4-30 разбольше
  • 34. Часть II Машинное обучение на MapReduce
  • 35. Что такое машинноеобучение? Алгоритмы искуственного интеллекта, способные обучаться [Wikipedia]
  • 36. Классификация
  • 37. Кластеризация
  • 38. Регрессия
  • 39. Рекомендации
  • 40. Apache Mahout● появился в 2008 году● 300 тыс. строк кода● означает “погонщик слона”● правильно произносить “махут”● вышла книга “Mahout in Action”
  • 41. Реализованные алгоритмы Классификация Кластеризация● Логистическая регрессия ● К-средних● Байесовские классификаторы ● Нечеткий алгоритм K-средних● Случайный лес ● Минимизация ожидания● Скрытые марковские цепи ● Minhash кластеризация …............. А также ● Коллаборативная фильтрация ● Генетические алгоритмы ● Алгоритмы уменьшения размерностей
  • 42. Машинное обучениена MapReduce● статья “MapReduce for Machine Learning on Multicore” (2008)● Алгоритм должен быть представим в аддитивной форме по входным данным
  • 43. Наивный Байес () (1) xПризнаки x ⃗ = ... Класс y = {0, 1} (n) xФормула Байеса: (1) (n) (1) (n) P( x ,.... , x ∣ y)P( y∣x , .... , x )=P ( y) (1) (n) P(x ,.... , x )Наивное предположение: ∣x (1) ,.... , x (n))=P ( y) ∏i P(x (i)∣ y ) P( y С
  • 44. Наивный Байесна MapReduce 1 ν( y) ∑ j 1( y j = y)● Выражение P( y)= = ν(all) ∑1 j● Map: выдаем ( y j , Σ s ub ) (total , Σ s ub )● Reduce: выдаем ( y j , Σ) (total , Σ)
  • 45. Наивный Байесна MapReduce 2 (i) Выражение (i) ν( x , y)● P( x ∣ y)= ν( y )● Map: выдаем ((x i , y j ); Σ s ub )● Reduce: выдаем ((x i , y j ); Σ)
  • 46. Кластеризация K средних
  • 47. Реализация наMapReduceОтнесение объектов к кластерам Map: выдаем ( x , y nearest )Поиск новых центров кластеров Map: выдаем ( y j ,(Σs ub x , N )) Reduce: выдаем ( y j , x)
  • 48. Логистическаярегрессия
  • 49. Вероятность класса 1 P w ( x)= 1+exp(−w⋅x)
  • 50. Максимумправдоподобия yi 1− y iLw ( x)= ∏i P w ( x i ) (1−P w ( x i )) nl(w)=∑i=1 y i log p ( x i )+(1− y i )log(1− p ( x i ))w=argmax w l (w )
  • 51. МетодНьютона-РафсонаВ скалярном виде: В векторном виде l (w) −1w=w− w=w−H ∇ w l(w) l (w) 2 2 ( ) ( ) ∂ l(w) ∂ l(w) ∂ l(w) ... ∂ w1 ∂ w1 ∂ w1 ∂ w1 ∂ wn ∇ w l(w )= ... H= ... ... ... ∂ l(w) 2 ∂ l(w) 2 ∂ l(w) ... ∂ wn ∂ w n ∂ w1 ∂ wn ∂ wn
  • 52. MapReduceдля Градиента Выражение ∂ l(w ) m =∑i=1 ( y i − p w (x i )) x i● (k) ∂ wk Map: вычисляем grad s ub [k ]=∑i ( y− pw ( x i )) x● (k i ) выдаем (k , grad s ub [k ])● Reduce: вычисляем grad [k ]=∑ grad s ub [k ] выдаем (k , grad [k ])
  • 53. MapReduce дляГамильтониана 2 ∂ l(w) m =∑i=1 p w (x i )( p w ( x i )−1) x i x i ( j) (k)● Выражение ∂ wk ∂ w j● Map: вычисляем H s ub [k , j]=∑s ub .... выдаем ((k , j); H s ub [k , j])● Reduce: вычисляем H [k , j]=H s ub [k , j] выдаем ((k , j); H [k , j])
  • 54. АсимптотикаАлгоритм Классическая Сложность MapReduce сложность mnНаивный Байес O(mn+nc) O( +nc log P) P mncK-средних O(mnc) O( +mn log P) P 2 3 2 3 m n nЛогистическая O(mn +n ) O( + +n2 log P)регрессия P Pn – размерность пространства признаковm – число обучающих примеровP – число ядер, на которых делается обучение
  • 55. Недостаток
  • 56. Недостаток Итерационные алгоритмы машинного обучения читают с диска раз за разом одну и ту же обучающую выборку, что приводит к большим накладным расходам
  • 57. Vowpal Wabbit● Проект написан на C++● Начат в 2007 году в Yahoo● Сейчас разрабатывается в MicrosoftResearch
  • 58. Предложенное решение● Итерационые алгоритмы должны обучаться в одну map-стадию● Все данные загружаются в оперативную память мапперов● Мапперы “находят” друг друга. Выстраиваются в бинарное дерево● Взаимодействие через операцию AllReduce
  • 59. AllReduce: sum - 1 1 2 3 4 5 6 7
  • 60. AllReduce: sum - 2 1 11 16 4 5 6 7
  • 61. AllReduce: sum - 3 28 11 16 4 5 6 7
  • 62. AllReduce: sum - 4 28 28 28 28 28 28 28
  • 63. Реализованные алгоритмы● Метод сопряженных градиентов● LBFGS