webcamp:back-end developers day Турский Виктор "Распределенные...

26
Распределенные вычисления на JavaScript! Viktor Turskyi CTO at WebbyLab Webcamp 2015

Upload: geekslab

Post on 12-Aug-2015

55 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Распределенные вычисления на

JavaScript!Viktor Turskyi

CTO at WebbyLab

Webcamp 2015

Page 2: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Бизнес задача

Обработка большого массива (миллиарды записей) данных с соц. сетей.

Page 3: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Примера анализа

Расчет упоминаемости групп ключевых слов.

Источник данных - Twitter Public Stream API

Объем данных: +15ГБ ежедневно (5ТБ в год)

Page 4: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Примеры запроса

“#nike” против “#adidas”“#nike & nba” против “#adidas & nba”“(спорт|турнир) & -футбол” “волки & косметичка”

Page 5: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

MapReduce или как это делают в Google

MapReduce — модель распределённых вычислений, представленная компанией Google, используемая для параллельных вычислений над очень большими, несколько петабайт, наборами данных в компьютерных кластерах. (Wikipedia)

Page 6: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Как работает MapReduce?

Page 7: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Фазы mapreduce

map: mapper(line) -> (k1, v1)

shuffle: сортировка по k1

reduce: reducer(k1, [v1, v2, v3])

Page 8: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Подсчет слов (“hello world” из мира MR)

Page 9: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Подсчет слов

Page 10: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Когда Джефф Дин не может заснуть, он мап-редьюсит овечек

Page 11: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Экосистема Hadoop

Google MapReduce -> Hadoop Mapreduce

Google File System -> HDFS

Google BigTable -> Hbase

Page 12: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Как использовать JS c Hadoop (hadoop streaming)

Page 13: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Подсчет слов на hadoop streaming

Page 14: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Тестируем локально

cat data | ./mapper.js | sort -k1,1 | ./reducer.js

Page 15: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Boilerplate for Hadoop tasks

https://github.com/koorchik/node-hadoop-boilerplate

Page 16: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

От “hello world” к реальной задаче

Задача: сравнение упоминаемости групп ключевых слов.

Вход: данные с твиттера

Выход: график упоминаемости групп ключевых слов по дням

Время обработки: до 10 секунд

Page 17: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Общая архитектура

Page 18: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Режим работы

1) Запись и хранение данных на S32) Ежедневный пересчет (transient cluster)3) Дополнительный кластер для hbase

(хранит индексы и результаты вычислений).

4) Оплата только за используемые ресурсы

Page 19: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Инвертированный индекс

Page 20: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Построение инвертированного индекса

Page 21: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Проблемы

Установка зависимостей на кластерСклонения слов (стеминг, лематизация)Асинхронность маппераСтоп-словаТокенизация (ссылки, хеш-теги, юзернеймы)Компрессия индексаВычисление пересечений в индексеРанжирование документовОбработка словосочетаний

Page 22: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Создаем кластер на AWS EMR (демо)

1) Установка NodeJS на кластер2) Работа с зависимостями

Page 23: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Асинхронность & mystem

Page 24: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Живая демонстрация

Page 25: WebCamp:Back-end Developers Day Турский Виктор "Распределенные вычисления на JavaScript"

Ссылки

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"

Viktor [email protected]

https://twitter.com/koorchikhttps://github.com/koorchik

WebbyLabhttp://webbylab.com