2. План
● Что такое MapReduce
● Элементарные запросы
● Алгоритмы машинного обучения
3. История MapReduce
2003 г. Презентация Google MapReduce
2005 г. Начало разработки Hadoop в Yahoo
2007 г. Первый “боевой” Hadoop в Yahoo (4 500 нод)
2011 г. Стабильный релиз Hadoop 1.0
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
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
25. Фильтрация
Apache Pig Apache Hive
filtered_logs = FILTER
logs 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;
request
dump sorted_logs;
vs FROM logs ORDER BY
ip, human_time;
27. Агрегация
Apache Pig Apache Hive
logs_by_ip = SELECT ip, count (1)
GROUP logs BY ip; FROM logs
GROUP BY ip;
ip_clicks = FOREACH vs
logs_by_ip generate
group, COUNT($1);
DUMP ip_clicks;
28. Join
Apache Pig Apache Hive
moscow_geo = FILTER SELECT logs.*
geo BY FROM logs
(city_name == 'Moscow'); join geo ON logs.ip = geo.ip
vs WHERE
logs_with_geo = JOIN logs geo.city_name = "Moscow";
BY ip, moscow_geo BY ip;
DUMP logs_with_geo;
40. Apache Mahout
● появился в 2008 году
● 300 тыс. строк кода
● означает “погонщик слона”
● правильно произносить “махут”
● вышла книга “Mahout in Action”
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 ); Σ)
47. Реализация на
MapReduce
Отнесение объектов к кластерам
Map: выдаем ( x , y nearest )
Поиск новых центров кластеров
Map: выдаем ( y j ,(Σs ub x , N ))
Reduce: выдаем ( y j , x)
50. Максимум
правдоподобия
yi 1− y i
Lw ( x)= ∏i P w ( x i ) (1−P w ( x i ))
n
l(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) −1
w=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
mnc
K-средних O(mnc) O( +mn log P)
P
2 3
2 3 m n n
Логистическая O(mn +n ) O( + +n2 log P)
регрессия P P
n – размерность пространства признаков
m – число обучающих примеров
P – число ядер, на которых делается обучение
56. Недостаток
Итерационные алгоритмы
машинного обучения читают
с диска раз за разом одну и
ту же обучающую выборку,
что приводит к большим
накладным расходам
57. Vowpal Wabbit
● Проект написан на C++
● Начат в 2007 году в Yahoo
● Сейчас разрабатывается
в MicrosoftResearch
58. Предложенное решение
● Итерационые алгоритмы должны обучаться
в одну map-стадию
● Все данные загружаются в оперативную память
мапперов
● Мапперы “находят” друг друга. Выстраиваются
в бинарное дерево
● Взаимодействие через операцию AllReduce