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

1,177 views

Published on

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

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

No Downloads
Views
Total views
1,177
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
29
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

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

  1. 1. Map Reduceвзгляд вглубь Павел Мезенцев p.mezentsev@rambler-co.ru
  2. 2. План● Что такое MapReduce● Элементарные запросы● Алгоритмы машинного обучения
  3. 3. История MapReduce2003 г. Презентация Google MapReduce2005 г. Начало разработки Hadoop в Yahoo2007 г. Первый “боевой” Hadoop в Yahoo (4 500 нод)2011 г. Стабильный релиз Hadoop 1.0
  4. 4. Где используется Hadoop?
  5. 5. Из чего состоит HadoopРаспределенная файловая система HDFS● Name Node● Data NodeСистема вычислений MapReduce● Job Tracker● Task Tracker
  6. 6. Архитектура Hadoop
  7. 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. 8. Свойства MapReduceОтказоустойчивость● Репликация● Промежуточные данные хранятся на дискеВычислительная эффективность● Последовательная работа с диском● Data Locality● Speculative Execution
  9. 9. Элементарные операции● Filter● Sort● Aggregate● Join
  10. 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. 11. FilterТолько map стадияПример:Найти все логи поисковых переходов
  12. 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. 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. 14. SortИспользуется 1 редьюсерПример:отсортировать логи по IP
  15. 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. 16. AggregateMap-Reduce операция общего видаПример:посчитать число кликов, сделанных скажого из ip
  17. 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. 18. JoinПример задачи: имея таблицу соотвия “IP–география” отфильтровать логи, сделанные с московских IPшников.Как можно сделать Join при помощи MapReduce?
  19. 19. JoinПример задачи: имея таблицу соотвия “IP–география” отфильтровать логи, сделанные с московских IPшников.Как можно сделать Join при помощи MapReduce?● Map-Side Join● Reduce-Side Join
  20. 20. JoinMultipleInputs.addInputPath (conf, hdfsPath, TextInputFormat.class, JoinMapper.class);
  21. 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. 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. 23. Языки высокого уровняApache Pig Apache Hive vs● Скриптовый язык ● SQL подобный язык● Разработан в Yahoo ● Разработан в Facebook
  24. 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. 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. 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. 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. 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. 29. Как обрабатыватьданные быстро?
  30. 30. Как обрабатыватьданные быстро?● 2010 г. Google Dremel● 2012 г. Cloudera Impala● 2012 г. Amazon Redshift● 2013 г. Apache Drill
  31. 31. Как обрабатыватьданные быстро?● SQL образный синтаксис запросов● Результаты вычислений “не большие”● Отсутствует отказоустойчивость
  32. 32. MPP Архитектура
  33. 33. Impala vs Hive●Работают с одним хранилищемметаданных●Производительность Impala в 4-30 разбольше
  34. 34. Часть II Машинное обучение на MapReduce
  35. 35. Что такое машинноеобучение? Алгоритмы искуственного интеллекта, способные обучаться [Wikipedia]
  36. 36. Классификация
  37. 37. Кластеризация
  38. 38. Регрессия
  39. 39. Рекомендации
  40. 40. Apache Mahout● появился в 2008 году● 300 тыс. строк кода● означает “погонщик слона”● правильно произносить “махут”● вышла книга “Mahout in Action”
  41. 41. Реализованные алгоритмы Классификация Кластеризация● Логистическая регрессия ● К-средних● Байесовские классификаторы ● Нечеткий алгоритм K-средних● Случайный лес ● Минимизация ожидания● Скрытые марковские цепи ● Minhash кластеризация …............. А также ● Коллаборативная фильтрация ● Генетические алгоритмы ● Алгоритмы уменьшения размерностей
  42. 42. Машинное обучениена MapReduce● статья “MapReduce for Machine Learning on Multicore” (2008)● Алгоритм должен быть представим в аддитивной форме по входным данным
  43. 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. 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. 45. Наивный Байесна MapReduce 2 (i) Выражение (i) ν( x , y)● P( x ∣ y)= ν( y )● Map: выдаем ((x i , y j ); Σ s ub )● Reduce: выдаем ((x i , y j ); Σ)
  46. 46. Кластеризация K средних
  47. 47. Реализация наMapReduceОтнесение объектов к кластерам Map: выдаем ( x , y nearest )Поиск новых центров кластеров Map: выдаем ( y j ,(Σs ub x , N )) Reduce: выдаем ( y j , x)
  48. 48. Логистическаярегрессия
  49. 49. Вероятность класса 1 P w ( x)= 1+exp(−w⋅x)
  50. 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. 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. 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. 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. 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. 55. Недостаток
  56. 56. Недостаток Итерационные алгоритмы машинного обучения читают с диска раз за разом одну и ту же обучающую выборку, что приводит к большим накладным расходам
  57. 57. Vowpal Wabbit● Проект написан на C++● Начат в 2007 году в Yahoo● Сейчас разрабатывается в MicrosoftResearch
  58. 58. Предложенное решение● Итерационые алгоритмы должны обучаться в одну map-стадию● Все данные загружаются в оперативную память мапперов● Мапперы “находят” друг друга. Выстраиваются в бинарное дерево● Взаимодействие через операцию AllReduce
  59. 59. AllReduce: sum - 1 1 2 3 4 5 6 7
  60. 60. AllReduce: sum - 2 1 11 16 4 5 6 7
  61. 61. AllReduce: sum - 3 28 11 16 4 5 6 7
  62. 62. AllReduce: sum - 4 28 28 28 28 28 28 28
  63. 63. Реализованные алгоритмы● Метод сопряженных градиентов● LBFGS

×