Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Kuznetsov mapreduce urfu_2013

374 views

Published on

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

Published in: Education
  • Be the first to comment

  • Be the first to like this

Kuznetsov mapreduce urfu_2013

  1. 1. Наглядный MapReduce Дмитрий Кузнецов, Яндекс 91
  2. 2. 92
  3. 3. Логи music-front00$ head listen_1384096375.log ! 1384096375 user32873 song6544 1384096376 user59961 song9291 1384096377 user3187 song6544 93
  4. 4. Рейтинг 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
  5. 5. Наивное решение 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
  6. 6. Сервис растёт Стало Было 96
  7. 7. Сервис растёт • Данные больше не помещаются в память • Ограничить количество данных :-( количество VS качество • Купить ещё RAM :-( временное решение • Изменить способ обработки данных 97
  8. 8. Шардирование • Свою часть логов для каждой песни можно обрабатывать независимо от других • Независимые вычисления можно производить на разных машинах4 • Независимые вычисления можно делать параллельно 98
  9. 9. Шардирование [ [ song1: 10 song2: 8 song3: 4 song7: 9 song8: 4 song9: 3 ] ] Осталось выполнить слияние ответов с каждой машины 99
  10. 10. Всё хорошо, но есть нюансы: • Надёжность вычислений • Надёжность хранения данных • Что если мы хотим что-то ещё посчитать по другому разбиению? • Хранить ещё одну копию данных • Можно пересылать данные между машинами перед самим вычислением Программировать это всё каждый раз заново? 910
  11. 11. MapReduce • MapReduce: Простая модель, на которую хорошо ложится много задач 911
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. MapReduce (song1, 1) (song1, 1) map reduce Особая магия MapReduce Исходные данные (song2, 1) (song3, 1) map (song1, 1) (song3, 1) map 915 reduce reduce
  16. 16. 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
  17. 17. 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])
  18. 18. MapReduce • Внутри реализации MapReduce можно спрятать много проблем, которые не придётся решать каждый раз заново: • надёжность хранения данных • надёжность вычислений • оптимизация использования диска и сети • балансировка нагрузки 918
  19. 19. MapReduce: у менеджера есть для вас новые задачи! 919
  20. 20. MapReduce: немного посложнее • Что такое “два пользователя похожи”? ! ! 920
  21. 21. MapReduce: немного посложнее • Что такое “два пользователя похожи”? Что любит Петя ! Что любит Вася AC/DC • ! ! • Киркоров • • KISS • Black Sabbath Григорий Лепс ! J(Вася, Петя) = 0.4 921
  22. 22. MapReduce: немного посложнее • Можно снова попробовать написать наивное решение с перебором всех пар • O(n2) - время работы пропорционально квадрату от количества пользователей • Если нашим сервисом пользуется 1 млн. пользователей (пользователей у Spotify > 20 млн), то (1 млн)2 = 1000000000000 922
  23. 23. MapReduce: немного посложнее • Давайте попытаемся сделать так, чтобы те пользователи, кто может с высокой вероятностью оказаться похожими, попадали в один reduce • • • Для этого им следует назначить одинаковый ключ Внутри одного reduce’а мы сможем выполнить попарное сравнение Однако, мы не хотим допустить случая, когда число сраниваемых пар окажется слишком большим 923
  24. 24. MinHash Вася Петя … Тамара AC/DC 1 1 … 0 KISS 1 0 … 0 Лепс 1 0 … 1 Киркоров 1 0 … 1 924
  25. 25. MinHash Вася . … Тамара Лепс • Петя 1 0 … 1 Киркоров 1 0 … 1 AC/DC 1 1 … 0 KISS 1 0 … 0 925
  26. 26. MinHash Вася Петя … Тамара AC/DC 1 1 … 0 KISS 1 0 … 0 Лепс 1 0 … 1 Киркоров 1 0 … 1 AC/DC AC/DC … Лепс MinHash: 926
  27. 27. MinHash Вася Петя … Тамара Лепс 1 0 … 1 Киркоров 1 0 … 1 AC/DC 1 1 … 0 KISS 1 0 … 0 Лепс AC/DC … Лепс MinHash: 927
  28. 28. Посмотрим на строчки матрицы для Васи и Пети Вася 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
  29. 29. Вычисления Вася Петя … Тамара 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
  30. 30. Вычисления Вася Петя … Тамара 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
  31. 31. Вычисления Вася Петя … Тамара 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
  32. 32. Вычисления Вася Петя … Тамара 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
  33. 33. Вычисления Вася Петя … Тамара 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
  34. 34. MinHash • У нас есть волшебная монетка (minhash) • Если на ней выпал орёл, то тогда двум пользователям достаётся одинаковый ключ • Чтобы повысить шансы совпадения, можно кидать несколько монеток (несколько хэш-функций) • Но тогда будет много лишних пар с одним ключом? 934
  35. 35. Хорошо, а где MapReduce? Вася Петя … корзинка 1 1002 3212 … … корзинка 2 … … … корзинка 3 … … … 935 Тамара
  36. 36. Хорошо, а где MapReduce? См. книжку: Mining of Massive Datasets (Rajaraman, Ullman), глава 3 936
  37. 37. MapReduce в Яндексе • Несколько больших кластеров • Самый большой: более 1000 машин и более 5 петабайт данных • Лекции про MapReduce: • http://video.yandex.ru/users/ya-events/view/199 • http://tech.yandex.ru/events/yac/2013/talks/1091/ 937
  38. 38. MapReduce в Яндексе • Обработка поисковых логов • Подготовка саджеста (поисковых подсказок) • Машинный перевод • Исследовательская аналитика 938
  39. 39. Хочу попробовать! В университете есть маленький MapReduce-кластер (Hadoop) 939
  40. 40. Спасибо! • Лекции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

×