SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
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
Пример: BI-платформа для игр
- система получает от мобильных клиентов
различные ивенты
- определяет к какому сегменту относится игрок
- дает игроку таргетированный контент
- строит отчеты
Немного истории
2012
Q4
2013
Q2
2013
Q4
2014
Q3
MySQL
Pentaho Kettle
BIRT
Greenplum
вместо
MySQL
Hive
HBase
MongoDB
Impala
Hive
HBase
С чем мы столкнулись
- методология и подходы, устаревшие 10 лет
назад
- нет понятных решений для deployment,
monitoring, scheduling, logging,...
- рынок BI-инженеров тормозит прогресс
Типичный ETL-job. Один из сотен
Нерешенные проблемы
- код-ревью: боль
- мержи и бранчинг: постоянные проблемы
- тестирование: только интеграционное, с
помощью FitNesse
- и многое другое...
- deployment: ssh-скрипты и Jenkins
- scheduling и запуск: опять Jenkins
- аггрегация логов: снова Jenkins
- мониторинг джобов: отчеты в BIRT
“Костыли” и “велосипеды”
Со всем лучшим уходим на Spark
- SQL из старых ETL переиспользуется с
помощью Spark SQL
- прежний паттерн дизайна Job’ов: иерархия
- scheduling и запуск на Jenkins
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
- есть job’ы, осуществляющие
оркестрацию
- они выстроены в иерархию
- в любой момент, можно
перезапустить с нужными
параметрами определенную
группу job’ов
Паттерн “Иерархия Job’ов”
ooyala/spark-jobserver
- сервер spark job’ов:
- spray для REST-интерфейса
- Typesafe Config для конфигурации
- Job реализует trait, запаковывается в jar и
загружается POST’ом на сервер
Тестируемость
"Session facts job" should {
"overwrite aggregates, if they already exist" in {
...
SessionFactsJob.runJob(sc, config)
=== Array(DailySessionStats(parseDate("2014-10-30"), 1, 3, 12941))
}
}
Трассировка 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, scalaby#13

Mais conteúdo relacionado

Semelhante a ETL со Spark

Говорим о СУБД языком HR
Говорим о СУБД языком HRГоворим о СУБД языком HR
Говорим о СУБД языком HRKonstantin Osipov
 
Открытое ПО и ФЗ 152
Открытое ПО и ФЗ 152Открытое ПО и ФЗ 152
Открытое ПО и ФЗ 152Petr Diyakov
 
Использование распределённой очереди задач для обработки данных в бекенде спо...
Использование распределённой очереди задач для обработки данных в бекенде спо...Использование распределённой очереди задач для обработки данных в бекенде спо...
Использование распределённой очереди задач для обработки данных в бекенде спо...Yandex
 
Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программистru_Parallels
 
разработка корп приложений на платформе 1с 8
разработка корп приложений на платформе 1с 8разработка корп приложений на платформе 1с 8
разработка корп приложений на платформе 1с 8Igor Antonov
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareMarina Gryshko
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareBAKOTECH
 
введение в SharePoint
введение в SharePointвведение в SharePoint
введение в SharePointIvan Padabed
 
Погружение в глубины черной бездны с Intel GPA
Погружение в глубины черной бездны с Intel GPAПогружение в глубины черной бездны с Intel GPA
Погружение в глубины черной бездны с Intel GPAEvgeny Gorodetsky
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET CoreAndrew Gubskiy
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Alexander Babich
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
Сервисы Azure для научных исследований
Сервисы Azure для научных исследованийСервисы Azure для научных исследований
Сервисы Azure для научных исследованийMicrosoft
 
Определение «лица» продукта в «маркетах» ДО начала его разработки
Определение «лица» продукта в «маркетах»  ДО начала его разработкиОпределение «лица» продукта в «маркетах»  ДО начала его разработки
Определение «лица» продукта в «маркетах» ДО начала его разработкиisdeforum
 
петров антон Short cv2
петров антон Short  cv2петров антон Short  cv2
петров антон Short cv2Anton Petrov
 
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...DevGAMM Conference
 
Презентация 8bitМechanic
Презентация 8bitМechanicПрезентация 8bitМechanic
Презентация 8bitМechanicDaniel Abelski
 
А.Левенчук -- управление жизненным циклом актива
А.Левенчук -- управление жизненным циклом активаА.Левенчук -- управление жизненным циклом актива
А.Левенчук -- управление жизненным циклом активаAnatoly Levenchuk
 
Инструментарий Nvidia для deep learning
Инструментарий Nvidia для deep learningИнструментарий Nvidia для deep learning
Инструментарий Nvidia для deep learningSkolkovo Robotics Center
 

Semelhante a ETL со Spark (20)

Говорим о СУБД языком HR
Говорим о СУБД языком HRГоворим о СУБД языком HR
Говорим о СУБД языком HR
 
Открытое ПО и ФЗ 152
Открытое ПО и ФЗ 152Открытое ПО и ФЗ 152
Открытое ПО и ФЗ 152
 
Использование распределённой очереди задач для обработки данных в бекенде спо...
Использование распределённой очереди задач для обработки данных в бекенде спо...Использование распределённой очереди задач для обработки данных в бекенде спо...
Использование распределённой очереди задач для обработки данных в бекенде спо...
 
Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программист
 
разработка корп приложений на платформе 1с 8
разработка корп приложений на платформе 1с 8разработка корп приложений на платформе 1с 8
разработка корп приложений на платформе 1с 8
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell SoftwareМониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
Мониторинг, тюнинг и оптимизация баз данных, используя продукты Dell Software
 
введение в SharePoint
введение в SharePointвведение в SharePoint
введение в SharePoint
 
Погружение в глубины черной бездны с Intel GPA
Погружение в глубины черной бездны с Intel GPAПогружение в глубины черной бездны с Intel GPA
Погружение в глубины черной бездны с Intel GPA
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Сервисы Azure для научных исследований
Сервисы Azure для научных исследованийСервисы Azure для научных исследований
Сервисы Azure для научных исследований
 
Определение «лица» продукта в «маркетах» ДО начала его разработки
Определение «лица» продукта в «маркетах»  ДО начала его разработкиОпределение «лица» продукта в «маркетах»  ДО начала его разработки
Определение «лица» продукта в «маркетах» ДО начала его разработки
 
петров антон Short cv2
петров антон Short  cv2петров антон Short  cv2
петров антон Short cv2
 
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
 
Презентация 8bitМechanic
Презентация 8bitМechanicПрезентация 8bitМechanic
Презентация 8bitМechanic
 
McAfee Encryption 2015
McAfee Encryption 2015McAfee Encryption 2015
McAfee Encryption 2015
 
А.Левенчук -- управление жизненным циклом актива
А.Левенчук -- управление жизненным циклом активаА.Левенчук -- управление жизненным циклом актива
А.Левенчук -- управление жизненным циклом актива
 
Инструментарий Nvidia для deep learning
Инструментарий Nvidia для deep learningИнструментарий Nvidia для deep learning
Инструментарий Nvidia для deep learning
 

Mais de Vasil Remeniuk

Product Minsk - РТБ и Программатик
Product Minsk - РТБ и ПрограмматикProduct Minsk - РТБ и Программатик
Product Minsk - РТБ и ПрограмматикVasil Remeniuk
 
Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Vasil Remeniuk
 
Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14Vasil Remeniuk
 
Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3Vasil Remeniuk
 
Testing in Scala by Adform research
Testing in Scala by Adform researchTesting in Scala by Adform research
Testing in Scala by Adform researchVasil Remeniuk
 
Spark Intro by Adform Research
Spark Intro by Adform ResearchSpark Intro by Adform Research
Spark Intro by Adform ResearchVasil Remeniuk
 
Types by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaTypes by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaVasil Remeniuk
 
Types by Adform Research
Types by Adform ResearchTypes by Adform Research
Types by Adform ResearchVasil Remeniuk
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovVasil Remeniuk
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovVasil Remeniuk
 
Spark by Adform Research, Paulius
Spark by Adform Research, PauliusSpark by Adform Research, Paulius
Spark by Adform Research, PauliusVasil Remeniuk
 
Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Vasil Remeniuk
 
Spark intro by Adform Research
Spark intro by Adform ResearchSpark intro by Adform Research
Spark intro by Adform ResearchVasil Remeniuk
 
SBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaSBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaVasil Remeniuk
 
Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2Vasil Remeniuk
 
Testing in Scala. Adform Research
Testing in Scala. Adform ResearchTesting in Scala. Adform Research
Testing in Scala. Adform ResearchVasil Remeniuk
 
Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Vasil Remeniuk
 
Cassandra + Spark + Elk
Cassandra + Spark + ElkCassandra + Spark + Elk
Cassandra + Spark + ElkVasil Remeniuk
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
Funtional Reactive Programming with Examples in Scala + GWT
Funtional Reactive Programming with Examples in Scala + GWTFuntional Reactive Programming with Examples in Scala + GWT
Funtional Reactive Programming with Examples in Scala + GWTVasil Remeniuk
 

Mais de Vasil Remeniuk (20)

Product Minsk - РТБ и Программатик
Product Minsk - РТБ и ПрограмматикProduct Minsk - РТБ и Программатик
Product Minsk - РТБ и Программатик
 
Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14
 
Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14
 
Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3
 
Testing in Scala by Adform research
Testing in Scala by Adform researchTesting in Scala by Adform research
Testing in Scala by Adform research
 
Spark Intro by Adform Research
Spark Intro by Adform ResearchSpark Intro by Adform Research
Spark Intro by Adform Research
 
Types by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaTypes by Adform Research, Saulius Valatka
Types by Adform Research, Saulius Valatka
 
Types by Adform Research
Types by Adform ResearchTypes by Adform Research
Types by Adform Research
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex Gryzlov
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex Gryzlov
 
Spark by Adform Research, Paulius
Spark by Adform Research, PauliusSpark by Adform Research, Paulius
Spark by Adform Research, Paulius
 
Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)
 
Spark intro by Adform Research
Spark intro by Adform ResearchSpark intro by Adform Research
Spark intro by Adform Research
 
SBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaSBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius Valatka
 
Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2
 
Testing in Scala. Adform Research
Testing in Scala. Adform ResearchTesting in Scala. Adform Research
Testing in Scala. Adform Research
 
Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1
 
Cassandra + Spark + Elk
Cassandra + Spark + ElkCassandra + Spark + Elk
Cassandra + Spark + Elk
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
Funtional Reactive Programming with Examples in Scala + GWT
Funtional Reactive Programming with Examples in Scala + GWTFuntional Reactive Programming with Examples in Scala + GWT
Funtional Reactive Programming with Examples in Scala + GWT
 

ETL со Spark