YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: ETL со Spark

ETL со SparkСтарикам здесь не место

Page 2: 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 platform uniques

01/01/15 iOS 1

01/01/15 Desktop 2материализация

раз в час

ETL

Page 3: ETL со Spark

Пример: BI-платформа для игр

- система получает от мобильных клиентов различные ивенты

- определяет к какому сегменту относится игрок- дает игроку таргетированный контент

- строит отчеты

Page 4: ETL со Spark

Немного истории

2012Q4

2013Q2

2013Q4

2014Q3

MySQLPentaho KettleBIRT

Greenplum вместоMySQL

Hive HBaseMongoDB

ImpalaHive HBase

Page 5: ETL со Spark
Page 6: ETL со Spark

С чем мы столкнулись

- методология и подходы, устаревшие 10 лет назад

- нет понятных решений для deployment, monitoring, scheduling, logging,...

- рынок BI-инженеров тормозит прогресс

Page 7: ETL со Spark

Типичный ETL-job. Один из сотен

Page 8: ETL со Spark

Нерешенные проблемы

- код-ревью: боль- мержи и бранчинг: постоянные проблемы- тестирование: только интеграционное, с

помощью FitNesse- и многое другое...

Page 9: ETL со Spark

- deployment: ssh-скрипты и Jenkins - scheduling и запуск: опять Jenkins- аггрегация логов: снова Jenkins- мониторинг джобов: отчеты в BIRT

“Костыли” и “велосипеды”

Page 10: ETL со Spark

Со всем лучшим уходим на Spark

- SQL из старых ETL переиспользуется с помощью Spark SQL

- прежний паттерн дизайна Job’ов: иерархия- scheduling и запуск на Jenkins

Page 11: ETL со Spark

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

Page 12: ETL со Spark

- есть job’ы, осуществляющие оркестрацию

- они выстроены в иерархию

- в любой момент, можно перезапустить с нужными параметрами определенную группу job’ов

Паттерн “Иерархия Job’ов”

Page 13: ETL со Spark

ooyala/spark-jobserver

- сервер spark job’ов:- spray для REST-интерфейса- Typesafe Config для конфигурации

- Job реализует trait, запаковывается в jar и загружается POST’ом на сервер

Page 14: ETL со Spark

Тестируемость

"Session facts job" should {

"overwrite aggregates, if they already exist" in {

...

SessionFactsJob.runJob(sc, config)

=== Array(DailySessionStats(parseDate("2014-10-30"), 1, 3, 12941))

}

}

Page 15: ETL со Spark

Трассировка job’ов с NewRelic

@Trace + NewRelic.setTransactionName(null, "/HourlyJob")

Page 16: ETL со Spark

Кроме этого- кастомный процессинг (никаких UDF)- наследование- cross-cutting concerns- типобезопасность- удобство при интеграции с внешними системами

Page 17: ETL со Spark

Перспективы

- Flume - это ночной кошмар Spark Streaming

- SQL-интерфейс поверх ElasticSearch - мечта

- Go-to для лямбда-архитектуры

Page 18: ETL со Spark

Related Documents