Как обрабатывать большой объем данных быстро с наименьшими затратами? Мы смогли этого добиться в компании
RetailRocket. Обработка данных – это наш бизнес! У нас много данных: более 100 Тбайт, в сутки нам поступает более 100 млн
событий для обработки. До недавнего времени у нас все работало на кластере на базе Hadoop относительно устаревшего
дистрибутива Cloudera CDH 4.5, программный код был написан на Pig, Hive, Python и Java. Это порождало ряд проблем с
архитектурой, производительностью. Тестирование превращалось в настоящую головную боль. В конце лета RetailRocket
перешел на Yarn на базе CDH 5.1.2. Это открыло путь к более совершенным технологиям семейства Spark. Сейчас мы
находимся в фазе полного перехода на Spark на функциональном языке Scala. Это позволило нам избавиться от зоопарка
технологий, упростив архитектуру решений и автоматизировав тестирование. Первые результаты не заставили себя ждать –
получен прирост производительности на том же железе в три-пять раз. А это значит, что мы будем меньше инвестировать в
расширение парка серверов кластера. В докладе будет рассказано о проблемах, с которыми мы столкнулись, и о том как мы
их решили. Будут примеры исходного кода для оптимизации производительности и повышения удобства работы, который мы
закоммитили в наш публичный GitHub
1. retailrocket
На
пути
к
Apache
Spark
Роман
Зыков
Со-‐основатель
и
директор
по
аналитике
12
ноября
2014,
Москва
Платформа
для
мультиканальной
персонализации
интернет-‐магазина
на
основе
big
data
2. Как
работает
Retail
Rocket
Платформа
для
мультиканальной
персонализации
интернет-‐магазина
на
основе
big
data
3. Мы
используем
сложную
big
data
модель
для
формирования
товарных
рекомендаций
1.
Наш
сервис
собирает
всю
информацию
о
пользователях
и
их
поведении
на
сайте
магазина.
2.
Мощный
аналитический
аппарат
превращает
огромное
количество
данных
в
рекомендации.
3.
Персональные
рекомендации
через
виджеты
или
серверный
API
размещаются
на
сайте
магазина,
в
персональных
email-‐сообщениях,
в
CRM
у
операторов
колл-‐центра
и
в
любых
других
каналах
коммуникации.
Система
постоянно
самообучается
и
увеличивает
эффективность.
1
2
3
4. Что
дает
Retail
Rocket
Платформа
для
мультиканальной
персонализации
интернет-‐магазина
на
основе
big
data
5. Что
дает
Retail
Rocket?
+
Персонализация
сайта
–
Более
10
сценариев,
разработанных
создателями
рекомендательных
систем
Ozon.ru
и
Wikimart.ru
–
Рост
продаж
от
10%
до
50%
(по
результатам
независимых
А/Б
тестов)
–
Месяц
на
бесплатное
тестирование
+
Персонализация
email
–
Полностью
автоматизированные
рассылки
без
затрат
на
персонал
–
Средняя
конверсия
из
переходов
в
заказы
–
>10%
(!)
–
Оплата
только
за
результат
(CPO
или
Revenue
Share)
6. *
Согласно
независимому
исследованию
InSales
от
30.10.2014
Платформа
для
мультиканальной
персонализации
интернет-‐магазина
на
основе
big
data
7. Архитектура
Retail
Rocket
Платформа
для
мультиканальной
персонализации
интернет-‐магазина
на
основе
big
data
8. • CDH
5.1.2
• Spark
1.1
• High
Availability:
2
Namenodes,
3
Journalnodes
• 18
Datanodes
• 100
Tb
несжатых
данных
• 100
млн
новых
событий
в
сутки
9.
10. Проблемы!!!
• Зоопарк
языков
программирования
• Сложность
реализации
итеративных
алгоритмов
• Инвестиции
в
железо
11. Apache
Spark
Платформа
для
мультиканальной
персонализации
интернет-‐магазина
на
основе
big
data
12. Решение
• Один
язык
программирования
-‐
Scala
• Расчеты
в
памяти
–
поддержка
итеративных
алгоритмов
• Производительность
(в
3-‐5
раз)
• Лучше
использует
память
• Spark
SQL
вместо
Hive
• Spark
Streaming
• Parquet
13. Переезд
хуже
пожара
–
нужен
Yarn
Old
cluster
Name
nodes
Journal
nodes
New
cluster
Name
nodes
Journal
nodes
Puppet
CDH
4.5
CDH
5.1
Yarn
hzps://github.com/RetailRocket/puppet-‐cdh5
14. Spark
Scala
• Проблема
«мелких»
файлов
• Капризен
к
опциям
параллелизации
(reduce)
• Нет
удобного
notebook
• Лучше
писать
свои
сериализаторы
на
базе
Kryo
15. Проблема
мелких
файлов
• По-‐умолчанию
Hadoop:
1
маппер
на
файл
• org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
• Pig:
• pig.splitCombinaƒon
=
true
• pig.maxCombinedSplitSize
• Hive:
• hive.input.format
=
org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
• hive.hadoop.supports.splizable.combineinpuˆormat=true
• Spark/Scala
• hzps://github.com/RetailRocket/SparkMulƒTool
Retail
Rocket:
100000
файлов
-‐
100000(ДО),
3000(после)
Скорость
чтения
выросла
в
«три»
раза
16. Ссылки
• Книга
Learning
on
Spark
(hzp://shop.oreilly.com/product/0636920028512.do)
• Курс
Coursera
курс
по
Scala
(hzps://www.coursera.org/course/progfun)
• Видео
Spark
Summit
2014
(hzp://spark-‐summit.org/2014)
• Spark
should
be
bezer
than
MapReduce
(if
only
it
worked)
• Retail
Rocket
Public
GitHub
(hzps://github.com/RetailRocket)