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

Preview:

Citation preview

Gobblin как ETL-фреймворк

Иван Ахлестин

Rambler&Co

Обо мне

Иван Ахлестин

DevOps инженерОтдел машинного обучения Rambler&Co

j.helsinki@gmail.com

Что я вам расскажу

● 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.

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/