Gobblin как
ETL-фреймворк
Иван Ахлестин
Rambler&Co
Обо мне
Иван Ахлестин
DevOps инженер
Отдел машинного обучения Rambler&Co
j.helsinki@gmail.com
Что я вам расскажу
● ETL - ???
● Кто мы
● Как и почему мы искали новое ETL-решение
● Почему Gobblin крут
● Как с ним жить и делать вещи
Extract
Transform
Load
Чем мы занимаемся
Машинное зрение
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.7
Python 3.6
Java
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)
● Активное сообщество
Коробочные решения
Project
Exatctly
once
Time-
stamping
Decoders Metrics Realtime
Perfoma
nce
Fault
tolerance
Communi
ty
Gobblin ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔
kafka-
connect-
hdfs
✔ ✘ ✔ ? ✔ ? ✘ ?
etl-light ✔ ✔ ✔ ✘ ✘ ? ? ✘
Apache Flume, почему нет???
✗ Not statefull
✗ Kafka2HDFS — побочный эффект
Библиотеки
Project
Exatctly
once
Metrics Realtime Perfomance
Fault
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
Из коробки
Extract
Transform
Load
Из коробки
Используйте AVRO.
Linkedin
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/

Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)