gobblin как etl-фреймворк / Иван Ахлестин (rambler&co)
TRANSCRIPT
Gobblin как ETL-фреймворк
Иван Ахлестин
Rambler&Co
Что я вам расскажу
● ETL - ???● Кто мы● Как и почему мы искали новое ETL-решение● Почему Gobblin крут● Как с ним жить и делать вещи
ExtractTransformLoad
Чем мы занимаемся
Машинное зрение
e-commerce рекомендации
Оптимизация в DSP /Переторговка в SSP
Медийные рекомендации
Наша платформа
● FreeBSD 10● Hadoop 2.6 / CDH 5.5.1● Spark 2.1.1● Hive / Tez● Kafka● Jenkins/ Airflow/ Graphite / Consul / SaltStack
Наша разработка
Python 2.7Python 3.6Java
Main pipeline
Kafka 0.10.1
Брокер сообщений Kafka в условиях повышенной нагрузки
http://backendconf.ru/2017/abstracts/2542
Old pipeline
Почему мы начали искать новый Kafka2HDFS
● Новая Kafka (0.8 → 0.10)● Сamus умер● Нет нормальной защиты от потери данных● Нет оценки качества приходящих данных● Метрики, мониторинг - малое покрытие
Наши критерии выбора нового ETL● Exactly-once● Бизнес-логика
– партиционирование по timestamp
– кастомные декодеры
● Метрики (graphite)– информация по отступам
– объем
– ошибки
Наши критерии выбора нового ETL
● Real-time– производительность не хуже, чем у camus
– линейная масштабируемость
● Kafka2HDFS-компетенция● Fault tolerance (checkpoint)● Активное сообщество
Коробочные решения
ProjectExatctly
onceTime-
stamping Decoders Metrics RealtimePerfoma
nceFault
toleranceCommuni
ty
Gobblin ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔kafka-
connect-hdfs
✔ ✘ ✔ ? ✔ ? ✘ ?
etl-light ✔ ✔ ✔ ✘ ✘ ? ? ✘
Apache Flume, почему нет???
✗ Not statefull✗ Kafka2HDFS — побочный эффект
Библиотеки
ProjectExatctly
once Metrics Realtime PerfomanceFault
tolerance Community
Spark Streaming ? ? ✔ ✔ ✔ ✔
Python ✘ ✘ ✔ ✘ ✘ ✔
Brod ✔ ? ✔ ✔ ✔ ✔
Gobblin internals - QuickTour
Gobblin is a universal data ingestion framework for extracting, transforming, and loading (ETL)
large volume of data from a variety of data sources,e.g., databases, rest APIs, FTP/SFTP servers, filers, etc., onto
Hadoop
Архитектура
+ Streaming!!!
Gobblin pipeline
State store
Документация, примеры
● Хорошо описаны примеры использования и архитектура
● Почти все готовые решения - базовые и вам напрямую не подойдут
● Для полного понимания придется заглянуть в код
Gobblin pipeline - internals
Из коробки
ExtractTransformLoad
Из коробки
Используйте AVRO.
AVRORAW Pipeline
VSVS
ru.rambler.hobgobblin
Отдельный пакет кастомных классов:● Расширение и реализация оригинальных классов и
интерфейсов● Упрощенная развертка и отсутствие конфликтов
при переходе на новые версии Gobblin● Покрытие юнит-тестами
Taste it!!!
https://github.com/rambler-digital-solutions/hobgobblin
Custom blocks - Converter
public abstract class Converter<SI, SO, DI, DO>; implements Closeable, FinalState {
public Converter<SI, SO, DI, DO> init(WorkUnitState workUnit) { return this; }
public abstract SO convertSchema (SI inputSchema, WorkUnitState workUnit) throws SchemaConversionException;
public abstract Iterable<DO> convertRecord (SO outputSchema, DI inputRecord, WorkUnitState workUnit) throws DataConversionException;}
Converter
А что если …
Вывод
Tranform должен быть функционально чистым
Quality Checker / Policy
Проверяет качество выходного потока на соответствие ожиданиям.
● Row/Task Level● Mandatory/Optional● Redirect
Что получилось
Json pipeline
Failback case - HDFS2HDFS
В случае большого количества данных не прошедших проверку или при ошибках преобразования.
HDFS2HDFS!!!
./errors
./success
1.
2.
3.
Что это дает?
Старая платформа
Новый гибкий pipeline
Итоги:
В каких случаях стоит начать смотреть в сторону gobblin:● Kafka2HDFS● У вас Hadoop, но вокруг своя уникальная
экосистема● Если cбор и доставка данных стали вашей
головной болью● И при этом нужно что-то особенное
Спасибо, ваши вопросы!?
Документация:https://gobblin.readthedocs.io/en/latest
Github:https://github.com/apache/incubator-gobblin
Сообщество:https://gitter.im/gobblin/Lobby/