kuznetsov mapreduce urfu_2013

40
Наглядный MapReduce Дмитрий Кузнецов, Яндекс 1

Upload: yandex

Post on 14-Jun-2015

225 views

Category:

Education


0 download

DESCRIPTION

Дмитрий Кузнецов на Я.Студенте в УрФУ. Наглядный MapReduce

TRANSCRIPT

Page 1: Kuznetsov mapreduce urfu_2013

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

91

Page 2: Kuznetsov mapreduce urfu_2013

92

Page 3: Kuznetsov mapreduce urfu_2013

Логи

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

93

Page 4: Kuznetsov mapreduce urfu_2013

Рейтинг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

Page 5: Kuznetsov mapreduce urfu_2013

Наивное решение 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

Page 6: Kuznetsov mapreduce urfu_2013

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

Было

Стало

96

Page 7: Kuznetsov mapreduce urfu_2013

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

• Ограничить количество данных

:-( количество VS качество

• Купить ещё RAM

:-( временное решение

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

97

Page 8: Kuznetsov mapreduce urfu_2013

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

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

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

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

98

Page 9: Kuznetsov mapreduce urfu_2013

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

[ song1: 10 song2: 8 song3: 4 ]

[ song7: 9 song8: 4 song9: 3 ]

Осталось выполнить слияние ответов с каждой машины

99

Page 10: Kuznetsov mapreduce urfu_2013

Всё хорошо, но есть нюансы:

• Надёжность вычислений • Надёжность хранения данных • Что если мы хотим что-то ещё посчитать по другому разбиению? • Хранить ещё одну копию данных • Можно пересылать данные между машинами перед

самим вычислением

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

Page 11: Kuznetsov mapreduce urfu_2013

MapReduce

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

911

Page 12: Kuznetsov mapreduce urfu_2013

MapReduce!

!

Map:

!

!

!

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

Данные на входе: 1384096375 user32873 song1 1384096376 user59961 song2 1384096386 user59961 song3

Ответ: ( song1, 1 ) ( song2, 1 ) ( song3, 1 )

912

Page 13: Kuznetsov mapreduce urfu_2013

MapReduce!

!

!

• Reduce:

!

!

!

!

function reduce(song_id, [ ones ]) { count = 0 foreach c in ones { count = count + 1 } emit(song_id, count) }

( song1, 1 ) ( song1, 1 ) ( song2, 1 ) ( song3, 1 ) ( song3, 1 ) ( song3, 1 )

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

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

Ответ: ( song1, 2 ) ( song2, 1 ) ( song3, 3 )

913

Page 14: Kuznetsov mapreduce urfu_2013

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

Page 15: Kuznetsov mapreduce urfu_2013

MapReducemap

map

map

reduce

reduce

reduce

(song1, 1) (song1, 1)

(song2, 1) (song3, 1)

(song1, 1) (song3, 1)

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

apReduce

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

915

Page 16: Kuznetsov mapreduce urfu_2013

MapReducemap

map

map

reduce

reduce

reduce

(song1, 1) (song1, 1)

(song2, 1) (song3, 1)

(song1, 1) (song3, 1)

(song1, [1, 1])

(song2, [1])

(song3, [1, 1])Особая магия M

apReduce

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

916

Page 17: Kuznetsov mapreduce urfu_2013

MapReducemap

map

map

reduce

reduce

reduce

(song1, 1) (song1, 1)

(song2, 1) (song3, 1)

(song1, 1) (song3, 1)

(song1, [1, 1])

(song2, [1])

(song3, [1, 1])

(song1, 2)

(song2, 1)

(song3, 2)

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

apReduce

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

917

Page 18: Kuznetsov mapreduce urfu_2013

MapReduce

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

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

918

Page 19: Kuznetsov mapreduce urfu_2013

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

919

Page 20: Kuznetsov mapreduce urfu_2013

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

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

!

!

920

Page 21: Kuznetsov mapreduce urfu_2013

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

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

!

!

!

!

• AC/DC

• KISS • Black Sabbath

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

• Киркоров

J(Вася, Петя) = 0.4

Что любит ВасяЧто любит Петя

921

Page 22: Kuznetsov mapreduce urfu_2013

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

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

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

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

922

Page 23: Kuznetsov mapreduce urfu_2013

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

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

• Для этого им следует назначить одинаковый ключ

• Внутри одного reduce’а мы сможем выполнить попарное сравнение

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

923

Page 24: Kuznetsov mapreduce urfu_2013

MinHash

Вася Петя … Тамара

AC/DC 1 1 … 0

KISS 1 0 … 0

Лепс 1 0 … 1

Киркоров 1 0 … 1

924

Page 25: Kuznetsov mapreduce urfu_2013

MinHash

• .

Вася Петя … Тамара

Лепс 1 0 … 1

Киркоров 1 0 … 1

AC/DC 1 1 … 0

KISS 1 0 … 0

925

Page 26: Kuznetsov mapreduce urfu_2013

MinHash

Вася Петя … Тамара

AC/DC 1 1 … 0

KISS 1 0 … 0

Лепс 1 0 … 1

Киркоров 1 0 … 1

MinHash: AC/DC AC/DC … Лепс

926

Page 27: Kuznetsov mapreduce urfu_2013

MinHash

Вася Петя … Тамара

Лепс 1 0 … 1

Киркоров 1 0 … 1

AC/DC 1 1 … 0

KISS 1 0 … 0

MinHash: Лепс AC/DC … Лепс

927

Page 28: Kuznetsov mapreduce urfu_2013

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

0 11 01 01 11 10 0 Z

Y

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

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

928

Page 29: Kuznetsov mapreduce urfu_2013

ВычисленияВася Петя … Тамара 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

Page 30: Kuznetsov mapreduce urfu_2013

ВычисленияВася Петя … Тамара 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

Page 31: Kuznetsov mapreduce urfu_2013

ВычисленияВася Петя … Тамара 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

Page 32: Kuznetsov mapreduce urfu_2013

ВычисленияВася Петя … Тамара 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

Page 33: Kuznetsov mapreduce urfu_2013

ВычисленияВася Петя … Тамара 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

Page 34: Kuznetsov mapreduce urfu_2013

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

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

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

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

934

Page 35: Kuznetsov mapreduce urfu_2013

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

Вася Петя … Тамара

корзинка 1 1 0 0 2 3 2 1 2 … …

корзинка 2 … … …

корзинка 3 … … …

935

Page 36: Kuznetsov mapreduce urfu_2013

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

См. книжку: Mining of Massive Datasets (Rajaraman, Ullman), глава 3

936

Page 37: Kuznetsov mapreduce urfu_2013

MapReduce в Яндексе• Несколько больших кластеров

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

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

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

• http://tech.yandex.ru/events/yac/2013/talks/1091/

937

Page 38: Kuznetsov mapreduce urfu_2013

MapReduce в Яндексе

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

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

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

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

938

Page 39: Kuznetsov mapreduce urfu_2013

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

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

939

Page 40: Kuznetsov mapreduce urfu_2013

Спасибо!• Лекции4

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

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

• Оффлайн-поиск на основе 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