SlideShare a Scribd company logo
Наглядный MapReduce
Дмитрий Кузнецов, Яндекс

91
92
Логи

music-front00$ head listen_1384096375.log
!
1384096375 user32873 song6544
1384096376 user59961 song9291
1384096377 user3187 song6544

93
Рейтинг
1

AC/DC: Highway to
Hell

> 200 тысяч
прослушиваний

2

Филипп Киркоров:
зайка

>150 тысяч

3

Black Sabbath: Iron
Man

>120 тысяч

4

KISS: I Was Made for
Lovin’ You

> 90 тысяч

5

Григорий Лепс:
купола

> 80 тысяч

94
Наивное решение
1384096375 user32873 song6544
1384096376 user59961 song9291
!
!
count = {}
for line in logfile:
timestamp, user, song = line.rstrip().split(“t”)
count[song] = count.get(song, 0) + 1
!
r = sorted(count.iteritems(), key=lambda (k, v): -v)
for song, c in r:
print song, c
!
!
song6544 120
song9291 87
song1324 61
95
Сервис растёт

Стало

Было

96
Сервис растёт
•

Данные больше не помещаются в память
•

Ограничить количество данных
:-( количество VS качество

•

Купить ещё RAM
:-( временное решение

•

Изменить способ обработки данных
97
Шардирование
•

Свою часть логов для каждой песни можно
обрабатывать независимо от других

•

Независимые вычисления можно производить на
разных машинах4

•

Независимые вычисления можно делать
параллельно

98
Шардирование

[

[
song1: 10
song2: 8
song3: 4

song7: 9
song8: 4
song9: 3

]

]

Осталось выполнить слияние ответов с каждой
машины
99
Всё хорошо, но есть нюансы:
•

Надёжность вычислений

•

Надёжность хранения данных

•

Что если мы хотим что-то ещё посчитать по
другому разбиению?
•

Хранить ещё одну копию данных

•

Можно пересылать данные между машинами перед
самим вычислением

Программировать это всё каждый раз заново?
910
MapReduce

•

MapReduce: Простая модель, на которую
хорошо ложится много задач

911
MapReduce
Данные на входе:
!
1384096375 user32873
1384096376 user59961
!
1384096386 user59961

song1
song2
song3

Map:
!
!

function map(log_record) {
timestamp, user, song = log_record.split
emit(song, “1")
}

!

Ответ: ( song1, 1 )
( song2, 1 )
( song3, 1 )
912
MapReduce
( song1, 1 )
( song1, 1 )
!
( song2, 1 )
( song3, 1 )
!
( song3, 1 )
!
( song3, 1 )
•

Reduce:

!
!
!
!

Особая магия MapReduce

( song1, [1, 1] )
( song2, [1] )
( song3, [1, 1, 1] )

function reduce(song_id, [ ones ]) {
count = 0
foreach c in ones {
count = count + 1
}
emit(song_id, count)
}
Ответ: ( song1, 2 )
( song2, 1 )
( song3, 3 )
913
MapReduce
•

Map:
!
!

•

Reduce:
!

!

function map(log_record) {
timestamp, user, artist, song = log_record.split
emit(artist, song)
}

function reduce(artist, songs) {
artist_songs = dict()
foreach s in songs {
artist_songs[s].increment()
}
emit(artist, most_popular(artist_songs))
}
914
MapReduce
(song1, 1)
(song1, 1)
map

reduce

Особая магия MapReduce

Исходные данные

(song2, 1)
(song3, 1)
map

(song1, 1)
(song3, 1)
map

915

reduce

reduce
MapReduce
(song1, 1)
(song1, 1)

(song1, [1, 1])

map

reduce

Особая магия MapReduce

Исходные данные

(song2, 1)
(song3, 1)
map

(song1, 1)
(song3, 1)
map

916

(song2, [1])
reduce

(song3, [1, 1])
reduce
MapReduce
(song1, 1)
(song1, 1)

(song1, [1, 1])
reduce

Особая магия MapReduce

Исходные данные

(song2, 1)
(song3, 1)
map

(song1, 1)
(song3, 1)
map

917

(song1, 2)

reduce

map

(song2, 1)

reduce

(song3, 2)

(song2, [1])

(song3, [1, 1])
MapReduce
•

Внутри реализации MapReduce можно спрятать
много проблем, которые не придётся решать
каждый раз заново:
•

надёжность хранения данных

•

надёжность вычислений

•

оптимизация использования диска и сети

•

балансировка нагрузки

918
MapReduce: у менеджера есть для
вас новые задачи!

919
MapReduce: немного посложнее

•

Что такое “два пользователя похожи”?
!
!

920
MapReduce: немного посложнее
•

Что такое “два пользователя похожи”?
Что любит Петя

!
Что любит Вася

AC/DC

•

!
!

•

Киркоров
•

•

KISS

•

Black Sabbath

Григорий Лепс

!

J(Вася, Петя) = 0.4
921
MapReduce: немного посложнее
•

Можно снова попробовать написать наивное
решение с перебором всех пар
•

O(n2) - время работы пропорционально
квадрату от количества пользователей

•

Если нашим сервисом пользуется 1 млн.
пользователей (пользователей у Spotify > 20 млн), то
(1 млн)2 = 1000000000000

922
MapReduce: немного посложнее
•

Давайте попытаемся сделать так, чтобы те
пользователи, кто может с высокой вероятностью
оказаться похожими, попадали в один reduce
•
•

•

Для этого им следует назначить одинаковый ключ
Внутри одного reduce’а мы сможем выполнить попарное
сравнение

Однако, мы не хотим допустить случая, когда
число сраниваемых пар окажется слишком
большим
923
MinHash
Вася

Петя

…

Тамара

AC/DC

1

1

…

0

KISS

1

0

…

0

Лепс

1

0

…

1

Киркоров

1

0

…

1

924
MinHash
Вася

.

…

Тамара

Лепс

•

Петя

1

0

…

1

Киркоров

1

0

…

1

AC/DC

1

1

…

0

KISS

1

0

…

0

925
MinHash
Вася

Петя

…

Тамара

AC/DC

1

1

…

0

KISS

1

0

…

0

Лепс

1

0

…

1

Киркоров

1

0

…

1

AC/DC

AC/DC

…

Лепс

MinHash:

926
MinHash
Вася

Петя

…

Тамара

Лепс

1

0

…

1

Киркоров

1

0

…

1

AC/DC

1

1

…

0

KISS

1

0

…

0

Лепс

AC/DC

…

Лепс

MinHash:

927
Посмотрим на строчки
матрицы для Васи и Пети
Вася
0
1
1
1
1
0

Петя
1
0
0
1
1
0

Y
X

J(Вася, Петя) = x / (x + y)

Z

Pr{MinHash(Вася) = MinHash(Петя)} = x / (x + y)

928
Вычисления
Вася

Петя

…

Тамара

h1

h2

0 (Лепс)

1

0

…

1

1

0

1 (Киркоров)

1

0

…

1

2

3

2 (AC/DC)

1

1

…

0

0

1

3 (KISS)

1

0

…

0

3

2

929
Вычисления
Вася

Петя

…

Тамара

h1

h2

0 (Лепс)

1

0

…

1

1

0

1 (Киркоров)

1

0

…

1

2

3

2 (AC/DC)

1

1

…

0

0

1

3 (KISS)

1

0

…

0

3

2

h1

-

-

-

-

h2

-

-

-

-

930
Вычисления
Вася

Петя

…

Тамара

h1

h2

0 (Лепс)

1

0

…

1

1

2

1 (Киркоров)

1

0

…

1

2

3

2 (AC/DC)

1

1

…

0

0

1

3 (KISS)

1

0

…

0

3

1

h1

1

-

-

1

h2

2

2

-

-

931
Вычисления
Вася

Петя

…

Тамара

h1

h2

0 (Лепс)

1

0

…

1

1

2

1 (Киркоров)

1

0

…

1

2

3

2 (AC/DC)

1

1

…

0

0

1

3 (KISS)

1

0

…

0

3

1

h1

1

2

-

1

h2

2

2

-

-

932
Вычисления
Вася

Петя

…

Тамара

h1

h2

0 (Лепс)

1

0

…

1

1

2

1 (Киркоров)

1

0

…

1

2

3

2 (AC/DC)

1

1

…

0

0

1

3 (KISS)

1

0

…

0

3

1

h1

0

2

-

0

h2

1

2

-

1

933
MinHash
•

У нас есть волшебная монетка (minhash)

•

Если на ней выпал орёл, то тогда двум
пользователям достаётся одинаковый ключ

•

Чтобы повысить шансы совпадения, можно кидать
несколько монеток (несколько хэш-функций)

•

Но тогда будет много лишних пар с одним ключом?

934
Хорошо, а где MapReduce?
Вася

Петя

…

корзинка 1

1002
3212

…

…

корзинка 2

…

…

…

корзинка 3

…

…

…

935

Тамара
Хорошо, а где MapReduce?

См. книжку: Mining of Massive Datasets (Rajaraman, Ullman), глава 3
936
MapReduce в Яндексе
•

Несколько больших кластеров

•

Самый большой: более 1000 машин и более 5
петабайт данных

•

Лекции про MapReduce:
•

http://video.yandex.ru/users/ya-events/view/199

•

http://tech.yandex.ru/events/yac/2013/talks/1091/
937
MapReduce в Яндексе
•

Обработка поисковых логов

•

Подготовка саджеста (поисковых подсказок)

•

Машинный перевод

•

Исследовательская аналитика

938
Хочу попробовать!

В университете есть маленький
MapReduce-кластер (Hadoop)

939
Спасибо!
•

Лекции4
•

•

Yandex Table: http://bit.ly/18QRxDo

•

•

MapReduce в Яндексе: http://bit.ly/1e1GMjR

Оффлайн-поиск на основе MapReduce: http://bit.ly/17S2Eze

Книжки4
•

Mining of Massive Datasets: http://stanford.io/hMPF31

•

MapReduce Design Patterns: http://amzn.to/1gGJ3EB

•

Hadoop: The Defenitive Guide: http://amzn.to/1hDkRVc
940

More Related Content

PPTX
User Defined Materials in LS-DYNA
PDF
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
PDF
О.В.Сухорослов "MapReduce: инструменты и практические примеры"
ODP
Мезенцев Павел - Машинное обучение на MapReduce
PDF
Solit 2014, MapReduce и машинное обучение на hadoop и mahout, Слисенко Конста...
PDF
О.В.Сухорослов "MapReduce"
PDF
Лекция 5. MapReduce в Hadoop (алгоритмы)
PDF
Лекция 4. MapReduce в Hadoop (введение)
User Defined Materials in LS-DYNA
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
О.В.Сухорослов "MapReduce: инструменты и практические примеры"
Мезенцев Павел - Машинное обучение на MapReduce
Solit 2014, MapReduce и машинное обучение на hadoop и mahout, Слисенко Конста...
О.В.Сухорослов "MapReduce"
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 4. MapReduce в Hadoop (введение)

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Ad

Kuznetsov mapreduce urfu_2013