Распределенные вычисления на JavaScript! Viktor Turskyi CTO at WebbyLab Webcamp 2015
Aug 12, 2015
Распределенные вычисления на
JavaScript!Viktor Turskyi
CTO at WebbyLab
Webcamp 2015
Бизнес задача
Обработка большого массива (миллиарды записей) данных с соц. сетей.
Примера анализа
Расчет упоминаемости групп ключевых слов.
Источник данных - Twitter Public Stream API
Объем данных: +15ГБ ежедневно (5ТБ в год)
Примеры запроса
“#nike” против “#adidas”“#nike & nba” против “#adidas & nba”“(спорт|турнир) & -футбол” “волки & косметичка”
MapReduce или как это делают в Google
MapReduce — модель распределённых вычислений, представленная компанией Google, используемая для параллельных вычислений над очень большими, несколько петабайт, наборами данных в компьютерных кластерах. (Wikipedia)
Как работает MapReduce?
Фазы mapreduce
map: mapper(line) -> (k1, v1)
shuffle: сортировка по k1
reduce: reducer(k1, [v1, v2, v3])
Подсчет слов (“hello world” из мира MR)
Подсчет слов
Когда Джефф Дин не может заснуть, он мап-редьюсит овечек
Экосистема Hadoop
Google MapReduce -> Hadoop Mapreduce
Google File System -> HDFS
Google BigTable -> Hbase
Как использовать JS c Hadoop (hadoop streaming)
Подсчет слов на hadoop streaming
Тестируем локально
cat data | ./mapper.js | sort -k1,1 | ./reducer.js
Boilerplate for Hadoop tasks
https://github.com/koorchik/node-hadoop-boilerplate
От “hello world” к реальной задаче
Задача: сравнение упоминаемости групп ключевых слов.
Вход: данные с твиттера
Выход: график упоминаемости групп ключевых слов по дням
Время обработки: до 10 секунд
Общая архитектура
Режим работы
1) Запись и хранение данных на S32) Ежедневный пересчет (transient cluster)3) Дополнительный кластер для hbase
(хранит индексы и результаты вычислений).
4) Оплата только за используемые ресурсы
Инвертированный индекс
Построение инвертированного индекса
Проблемы
Установка зависимостей на кластерСклонения слов (стеминг, лематизация)Асинхронность маппераСтоп-словаТокенизация (ссылки, хеш-теги, юзернеймы)Компрессия индексаВычисление пересечений в индексеРанжирование документовОбработка словосочетаний
Создаем кластер на AWS EMR (демо)
1) Установка NodeJS на кластер2) Работа с зависимостями
Асинхронность & mystem
Живая демонстрация
Ссылки
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/
Viktor [email protected]
https://twitter.com/koorchikhttps://github.com/koorchik
WebbyLabhttp://webbylab.com