2 я.студент леванов map reduce

Post on 21-Nov-2014

359 Views

Category:

Education

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Я.Студент в Нске: MapReduce

TRANSCRIPT

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 в мире

Яндекс

Google

Twitter

Facebook

Microsoft

Yahoo

Last.fm

IBM

Ebay

Любая компания, где много данных

28

Спасибо за внимание!

Дмитрий Леванов

Ведущий разработчик Крипта

levanov@yandex-team.ru

top related