Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ETL со Spark
Старикам здесь не место
Вводный ликбез по 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 pla...
Пример: BI-платформа для игр
- система получает от мобильных клиентов
различные ивенты
- определяет к какому сегменту отно...
Немного истории
2012
Q4
2013
Q2
2013
Q4
2014
Q3
MySQL
Pentaho Kettle
BIRT
Greenplum
вместо
MySQL
Hive
HBase
MongoDB
Impala...
С чем мы столкнулись
- методология и подходы, устаревшие 10 лет
назад
- нет понятных решений для deployment,
monitoring, s...
Типичный ETL-job. Один из сотен
Нерешенные проблемы
- код-ревью: боль
- мержи и бранчинг: постоянные проблемы
- тестирование: только интеграционное, с
пом...
- deployment: ssh-скрипты и Jenkins
- scheduling и запуск: опять Jenkins
- аггрегация логов: снова Jenkins
- мониторинг дж...
Со всем лучшим уходим на Spark
- SQL из старых ETL переиспользуется с
помощью Spark SQL
- прежний паттерн дизайна Job’ов: ...
object SessionFactsJob extends SparkJob {
override def runJob(sc: SparkContext, jobConfig: Config) = {
...
sessionsRDD.reg...
- есть job’ы, осуществляющие
оркестрацию
- они выстроены в иерархию
- в любой момент, можно
перезапустить с нужными
параме...
ooyala/spark-jobserver
- сервер spark job’ов:
- spray для REST-интерфейса
- Typesafe Config для конфигурации
- Job реализу...
Тестируемость
"Session facts job" should {
"overwrite aggregates, if they already exist" in {
...
SessionFactsJob.runJob(s...
Трассировка job’ов с NewRelic
@Trace + NewRelic.setTransactionName(null, "/HourlyJob")
Кроме этого
- кастомный процессинг (никаких UDF)
- наследование
- cross-cutting concerns
- типобезопасность
- удобство при...
Перспективы
- Flume - это ночной кошмар Spark Streaming
- SQL-интерфейс поверх ElasticSearch - мечта
- Go-to для лямбда-ар...
Спасибо!
gitter.im/scalaby/public
Facebook: Scala Enthusiasts
Belarus
scala.by
Обсуждения
вопросы
ответы
@remeniuk, scalab...
ETL со Spark
ETL со Spark
Upcoming SlideShare
Loading in …5
×

6

Share

Download to read offline

ETL со Spark

Download to read offline

Презентация на scalaby #13 ~> http://scala.by/

Related Books

Free with a 30 day trial from Scribd

See all

ETL со Spark

  1. 1. ETL со Spark Старикам здесь не место
  2. 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. 3. Пример: BI-платформа для игр - система получает от мобильных клиентов различные ивенты - определяет к какому сегменту относится игрок - дает игроку таргетированный контент - строит отчеты
  4. 4. Немного истории 2012 Q4 2013 Q2 2013 Q4 2014 Q3 MySQL Pentaho Kettle BIRT Greenplum вместо MySQL Hive HBase MongoDB Impala Hive HBase
  5. 5. С чем мы столкнулись - методология и подходы, устаревшие 10 лет назад - нет понятных решений для deployment, monitoring, scheduling, logging,... - рынок BI-инженеров тормозит прогресс
  6. 6. Типичный ETL-job. Один из сотен
  7. 7. Нерешенные проблемы - код-ревью: боль - мержи и бранчинг: постоянные проблемы - тестирование: только интеграционное, с помощью FitNesse - и многое другое...
  8. 8. - deployment: ssh-скрипты и Jenkins - scheduling и запуск: опять Jenkins - аггрегация логов: снова Jenkins - мониторинг джобов: отчеты в BIRT “Костыли” и “велосипеды”
  9. 9. Со всем лучшим уходим на Spark - SQL из старых ETL переиспользуется с помощью Spark SQL - прежний паттерн дизайна Job’ов: иерархия - scheduling и запуск на Jenkins
  10. 10. object SessionFactsJob extends SparkJob { override def runJob(sc: SparkContext, jobConfig: Config) = { ... sessionsRDD.registerTempTable("sessions") sqlContext.sql(s""" SELECT timestamp, count(distinct userId) uniqueUsersCount, sum(duration)/count(*) avgSessionLength FROM sessions WHERE timestamp > ${config.getLong(FromDate)} ETL-job на Spark
  11. 11. - есть job’ы, осуществляющие оркестрацию - они выстроены в иерархию - в любой момент, можно перезапустить с нужными параметрами определенную группу job’ов Паттерн “Иерархия Job’ов”
  12. 12. ooyala/spark-jobserver - сервер spark job’ов: - spray для REST-интерфейса - Typesafe Config для конфигурации - Job реализует trait, запаковывается в jar и загружается POST’ом на сервер
  13. 13. Тестируемость "Session facts job" should { "overwrite aggregates, if they already exist" in { ... SessionFactsJob.runJob(sc, config) === Array(DailySessionStats(parseDate("2014-10-30"), 1, 3, 12941)) } }
  14. 14. Трассировка job’ов с NewRelic @Trace + NewRelic.setTransactionName(null, "/HourlyJob")
  15. 15. Кроме этого - кастомный процессинг (никаких UDF) - наследование - cross-cutting concerns - типобезопасность - удобство при интеграции с внешними системами
  16. 16. Перспективы - Flume - это ночной кошмар Spark Streaming - SQL-интерфейс поверх ElasticSearch - мечта - Go-to для лямбда-архитектуры
  17. 17. Спасибо! gitter.im/scalaby/public Facebook: Scala Enthusiasts Belarus scala.by Обсуждения вопросы ответы @remeniuk, scalaby#13
  • AlexandrOshlakov

    Feb. 12, 2016
  • PaulNazarov

    Apr. 27, 2015
  • syaroslavtsev

    Apr. 21, 2015
  • mesilov

    Feb. 16, 2015
  • alexclear

    Feb. 16, 2015
  • HenadziShutko

    Jan. 24, 2015

Презентация на scalaby #13 ~> http://scala.by/

Views

Total views

1,450

On Slideshare

0

From embeds

0

Number of embeds

460

Actions

Downloads

20

Shares

0

Comments

0

Likes

6

×