WebCamp:Back-end Developers Day Турский Виктор "Распределенные...
-
Upload
geekslab -
Category
Technology
-
view
49 -
download
0
Transcript of WebCamp:Back-end Developers Day Турский Виктор "Распределенные...
![Page 1: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/1.jpg)
Распределенные вычисления на
JavaScript!Viktor Turskyi
CTO at WebbyLab
Webcamp 2015
![Page 2: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/2.jpg)
Бизнес задача
Обработка большого массива (миллиарды записей) данных с соц. сетей.
![Page 3: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/3.jpg)
Примера анализа
Расчет упоминаемости групп ключевых слов.
Источник данных - Twitter Public Stream API
Объем данных: +15ГБ ежедневно (5ТБ в год)
![Page 4: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/4.jpg)
Примеры запроса
“#nike” против “#adidas”“#nike & nba” против “#adidas & nba”“(спорт|турнир) & -футбол” “волки & косметичка”
![Page 5: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/5.jpg)
MapReduce или как это делают в Google
MapReduce — модель распределённых вычислений, представленная компанией Google, используемая для параллельных вычислений над очень большими, несколько петабайт, наборами данных в компьютерных кластерах. (Wikipedia)
![Page 6: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/6.jpg)
Как работает MapReduce?
![Page 7: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/7.jpg)
Фазы mapreduce
map: mapper(line) -> (k1, v1)
shuffle: сортировка по k1
reduce: reducer(k1, [v1, v2, v3])
![Page 8: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/8.jpg)
Подсчет слов (“hello world” из мира MR)
![Page 9: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/9.jpg)
Подсчет слов
![Page 10: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/10.jpg)
Когда Джефф Дин не может заснуть, он мап-редьюсит овечек
![Page 11: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/11.jpg)
Экосистема Hadoop
Google MapReduce -> Hadoop Mapreduce
Google File System -> HDFS
Google BigTable -> Hbase
![Page 12: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/12.jpg)
Как использовать JS c Hadoop (hadoop streaming)
![Page 13: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/13.jpg)
Подсчет слов на hadoop streaming
![Page 14: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/14.jpg)
Тестируем локально
cat data | ./mapper.js | sort -k1,1 | ./reducer.js
![Page 15: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/15.jpg)
Boilerplate for Hadoop tasks
https://github.com/koorchik/node-hadoop-boilerplate
![Page 16: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/16.jpg)
От “hello world” к реальной задаче
Задача: сравнение упоминаемости групп ключевых слов.
Вход: данные с твиттера
Выход: график упоминаемости групп ключевых слов по дням
Время обработки: до 10 секунд
![Page 17: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/17.jpg)
Общая архитектура
![Page 18: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/18.jpg)
Режим работы
1) Запись и хранение данных на S32) Ежедневный пересчет (transient cluster)3) Дополнительный кластер для hbase
(хранит индексы и результаты вычислений).
4) Оплата только за используемые ресурсы
![Page 19: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/19.jpg)
Инвертированный индекс
![Page 20: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/20.jpg)
Построение инвертированного индекса
![Page 21: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/21.jpg)
Проблемы
Установка зависимостей на кластерСклонения слов (стеминг, лематизация)Асинхронность маппераСтоп-словаТокенизация (ссылки, хеш-теги, юзернеймы)Компрессия индексаВычисление пересечений в индексеРанжирование документовОбработка словосочетаний
![Page 22: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/22.jpg)
Создаем кластер на AWS EMR (демо)
1) Установка NodeJS на кластер2) Работа с зависимостями
![Page 23: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/23.jpg)
Асинхронность & mystem
![Page 24: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/24.jpg)
Живая демонстрация
![Page 25: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/25.jpg)
Ссылки
Hadoop streaming utils for NodeJS https://www.npmjs.com/package/hadoop-streaming-utils
Node Hadoop boilerplate https://github.com/koorchik/node-hadoop-boilerplate
NodeJS Mystem3 - https://www.npmjs.com/package/mystem3
MapReduce: Simplified Data Processing on Large Clusters http://research.google.com/archive/mapreduce.html
Amazon Elastic MapReduce http://aws.amazon.com/elasticmapreduce/
![Page 26: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ca587fbb61eb1c598b4612/html5/thumbnails/26.jpg)
Viktor [email protected]
https://twitter.com/koorchikhttps://github.com/koorchik
WebbyLabhttp://webbylab.com