View
359
Download
2
Category
Preview:
DESCRIPTION
Я.Студент в Нске: MapReduce
Citation preview
1
2
Модель распределенных
вычислений MapReduce
Дмитрий Леванов
Ведущий разработчик Крипта
3
Крипта
Отвечает на вопрос «Кто?»
Определяет интересы по поведению в
интернете
Используется для таргетинга рекламы
От др.-греч. κρυπτή — крытый подземный ход,
тайник
4
Как учили Крипту
Матрикснет
Обучение Контроль
Логи +
5
Крипта
6
Простая задача
09:00 Петя http://vk.com/me
09:25 Таня http://sibmama.ru/index.php?r=35
10:07 Петя http://vk.com/im
10:42 Вася http://yandex.ru/yandsearch?text=крипта
11:10 Вася http://habrahabr.ru/post/179993
...
Количество посещений для каждого сайта?
7
Простая задача
09:00 Петя http://vk.com/me
09:25 Таня http://sibmama.ru/index.php?r=35
10:07 Петя http://vk.com/im
10:42 Вася http://yandex.ru/yandsearch?text=крипта
11:10 Вася http://habrahabr.ru/post/179993
...
Количество посещений для каждого сайта?
Логи приходят со скоростью 10ТБ/час
8
Простая задача
09:00 Петя http://vk.com/me
09:25 Таня http://sibmama.ru/index.php?r=35
10:07 Петя http://vk.com/im
10:42 Вася http://yandex.ru/yandsearch?text=крипта
11:10 Вася http://habrahabr.ru/post/179993
...
Количество посещений для каждого сайта?
Логи приходят со скоростью 10ТБ/час
А давайте распараллелим!
Отказоустойчивость?
Хранение данных?
Распределение задач?
9
MapReduce
Модель вычислений
Придумали в Гугле
Две операции: Map и Reduce
Хорошо подходит для распределенных
вычислений
Фреймворки: Hadoop, YAMR
10
<MATH>
11
Map(k,v)
С англ. «отобразить, преобразовать»
(k,v) – ключ и значение (часто строки)
(k,v)→Ø
(k,v)→(k*,v*)
(k,v)→{(k1*,v1
*), (k2*,v2
*),…,(kn*,vn
*)}
12
Reduce(k,{v1,…,vm})
С англ. «сворачивать»
(k,{v1,…,vm}) – ключ и все значения,
соответствующие этому ключу
(k,{v1,…,vn})→Ø
(k,{v1,…,vn})→(k*,v*)
(k,{v1,…,vm})→{(k1*,v1
*), (k2*,v2
*),…,(kn*,vn
*)}
13
</MATH>
14
Шаг 1: Map
//10:42 Вася http://yandex.ru/yandsearch?text=крипта
function Map(String record) {
String[] parts = record.Split();
Emit(GetSiteFromURL(parts[2]), 1); //(yandex.ru,1)
}
15
Шаг 1: Map
09:00 Петя http://vk.com/me
09:25 Таня http://sibmama.ru/index.php?r=35
10:07 Петя http://vk.com/im
10:42 Вася http://yandex.ru/yandsearch?text=крипта
11:10 Вася http://habrahabr.ru/post/179993
...
(vk.com,1)
(sibmama.ru,1)
(vk.com,1)
(yandex.ru,1)
(habrahabr.ru,1)
...
16
Группировка
(vk.com,1)
(yandex.ru,1)
(vk.com,1)
(yandex.ru,1)
(yandex.ru,1)
... Особая магия
(vk.com,{1,1})
(yandex.ru,{1,1,1})
...
17
Шаг 2: Reduce
//(yandex.ru,{1,1,1})
function Reduce(String key, String[] values) {
Emit(key, Count(values)); //(yandex.ru,3)
}
(vk.com,{1,1})
(yandex.ru,{1,1,1})
...
(vk.com,2)
(yandex.ru,3)
...
18
Маленькие хитрости
Reduce получает значения отсортированными
Еще может быть подключ – участвует в
сортировке, но не в группировке
Есть массив чисел и сортировка по
возрастанию. Как сделать так, чтобы массив
отсортировался по убыванию?
19
Почти реальная задача
//10:42 Вася http://yandex.ru/yandsearch?text=крипта
function Map(String record) {
String[] parts = record.Split();
String user = parts[1];
String site = GetSiteFromURL(parts[2]);
Emit(user + “@“ + site, 1); //(Вася@yandex.ru,1)
}
Теперь ищем самый посещаемый сайт для
каждого пользователя
20
Почти реальная задача
//(Вася@ yandex.ru,{1,1})
function Reduce(String key, String[] values) {
String[] parts = key.Split(“@”);
Emit(parts[0], -Count(values), parts[1]);
//(Вася, -2, yandex.ru)
}
//(Вася, {(-2, yandex.ru), (-1,vk.com)})
function Reduce(String key, String[] subkeys,
String[] values) {
Emit(key, values[0]); //(Вася, yandex.ru)
}
21
Всё понятно?
22
DIY
Если известен пол каждого посетителя,
посчитайте «пол» сайта
09:00 М http://yandex.ru/yandsearch?text=футбол
09:25 Ж http://yandex.ru/yandsearch?text=маникюр
10:07 М http://yandex.ru/yandsearch?text=авто
10:42 М http://yandex.ru/yandsearch?text=охота
11:10 Ж http://yandex.ru/yandsearch?text=прически
yandex.ru 60%М, 40%Ж
23
О чем заботится фреймворк
Распределение задач между узлами
Распределенное хранение данных
Группировка данных перед Reduce
Сортировки и слияния
Отказоустойчивость
Дальше действовать буду я!
© MapReduce
24
MapReduce – серебряная пуля?
Хорошо для MapReduce:
Объем данных достаточно велик
Есть много мелких независимых подзадач
Каждая операция относительно проста
Трудоемкость операций одинакова
Плохо для MapReduce:
Мало данных
Мало подзадач
Подзадачи имеют зависимости
Сложно оценить трудоемкость подзадач
25
MapReduce в Крипта
Парсинг логов
Агрегация данных из разных источников
Фильтрация противоречивых данных
Подготовка выборок для Матрикснет
Классификация пользователей
И еще много задач
26
MapReduce в Яндексе
Крипта
Поиск
Статистика
Антивсё
И еще много сервисов
27
MapReduce в мире
Яндекс
Microsoft
Yahoo
Last.fm
IBM
Ebay
Любая компания, где много данных
28
Спасибо за внимание!
Дмитрий Леванов
Ведущий разработчик Крипта
levanov@yandex-team.ru
Recommended