SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Наглядный 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

Mais conteúdo relacionado

Mais de Yandex

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

Mais de Yandex (20)

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

Kuznetsov mapreduce urfu_2013