2. Вводный ликбез по BI
date user_id platform_id
01/01/15 1 1
01/01/15 1 2
platform_id platform_name
1 iOS
2 Desktop
date platform uniques
01/01/15 iOS 1
01/01/15 Desktop 2
материализация
раз в час
ETL
3. Пример: BI-платформа для игр
- система получает от мобильных клиентов
различные ивенты
- определяет к какому сегменту относится игрок
- дает игроку таргетированный контент
- строит отчеты
6. С чем мы столкнулись
- методология и подходы, устаревшие 10 лет
назад
- нет понятных решений для deployment,
monitoring, scheduling, logging,...
- рынок BI-инженеров тормозит прогресс
8. Нерешенные проблемы
- код-ревью: боль
- мержи и бранчинг: постоянные проблемы
- тестирование: только интеграционное, с
помощью FitNesse
- и многое другое...
9. - deployment: ssh-скрипты и Jenkins
- scheduling и запуск: опять Jenkins
- аггрегация логов: снова Jenkins
- мониторинг джобов: отчеты в BIRT
“Костыли” и “велосипеды”
10. Со всем лучшим уходим на Spark
- SQL из старых ETL переиспользуется с
помощью Spark SQL
- прежний паттерн дизайна Job’ов: иерархия
- scheduling и запуск на Jenkins
12. - есть job’ы, осуществляющие
оркестрацию
- они выстроены в иерархию
- в любой момент, можно
перезапустить с нужными
параметрами определенную
группу job’ов
Паттерн “Иерархия Job’ов”
13. ooyala/spark-jobserver
- сервер spark job’ов:
- spray для REST-интерфейса
- Typesafe Config для конфигурации
- Job реализует trait, запаковывается в jar и
загружается POST’ом на сервер
14. Тестируемость
"Session facts job" should {
"overwrite aggregates, if they already exist" in {
...
SessionFactsJob.runJob(sc, config)
=== Array(DailySessionStats(parseDate("2014-10-30"), 1, 3, 12941))
}
}
15. Трассировка job’ов с NewRelic
@Trace + NewRelic.setTransactionName(null, "/HourlyJob")
16. Кроме этого
- кастомный процессинг (никаких UDF)
- наследование
- cross-cutting concerns
- типобезопасность
- удобство при интеграции с внешними системами
17. Перспективы
- Flume - это ночной кошмар Spark Streaming
- SQL-интерфейс поверх ElasticSearch - мечта
- Go-to для лямбда-архитектуры