gobblin как etl-фреймворк / Иван Ахлестин (rambler&co)

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

Upload: ontico

Post on 22-Jan-2018

71 views

Category:

Engineering


2 download

TRANSCRIPT

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

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

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

Rambler&Co

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

Обо мне

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

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

[email protected]

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

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

● ETL - ???● Кто мы● Как и почему мы искали новое ETL-решение● Почему Gobblin крут● Как с ним жить и делать вещи

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

ExtractTransformLoad

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

Чем мы занимаемся

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

Машинное зрение

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

e-commerce рекомендации

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

Оптимизация в DSP /Переторговка в SSP

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

Медийные рекомендации

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

Наша платформа

● FreeBSD 10● Hadoop 2.6 / CDH 5.5.1● Spark 2.1.1● Hive / Tez● Kafka● Jenkins/ Airflow/ Graphite / Consul / SaltStack

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

Наша разработка

Python 2.7Python 3.6Java

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

Main pipeline

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

Kafka 0.10.1

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

Брокер сообщений Kafka в условиях повышенной нагрузки

http://backendconf.ru/2017/abstracts/2542

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

Old pipeline

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

Почему мы начали искать новый Kafka2HDFS

● Новая Kafka (0.8 → 0.10)● Сamus умер● Нет нормальной защиты от потери данных● Нет оценки качества приходящих данных● Метрики, мониторинг - малое покрытие

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

Наши критерии выбора нового ETL● Exactly-once● Бизнес-логика

– партиционирование по timestamp

– кастомные декодеры

● Метрики (graphite)– информация по отступам

– объем

– ошибки

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

Наши критерии выбора нового ETL

● Real-time– производительность не хуже, чем у camus

– линейная масштабируемость

● Kafka2HDFS-компетенция● Fault tolerance (checkpoint)● Активное сообщество

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

Коробочные решения

ProjectExatctly

onceTime-

stamping Decoders Metrics RealtimePerfoma

nceFault

toleranceCommuni

ty

Gobblin ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔kafka-

connect-hdfs

✔ ✘ ✔ ? ✔ ? ✘ ?

etl-light ✔ ✔ ✔ ✘ ✘ ? ? ✘

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

Apache Flume, почему нет???

✗ Not statefull✗ Kafka2HDFS — побочный эффект

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

Библиотеки

ProjectExatctly

once Metrics Realtime PerfomanceFault

tolerance Community

Spark Streaming ? ? ✔ ✔ ✔ ✔

Python ✘ ✘ ✔ ✘ ✘ ✔

Brod ✔ ? ✔ ✔ ✔ ✔

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

Gobblin internals - QuickTour

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

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

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

Архитектура

+ Streaming!!!

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

Gobblin pipeline

State store

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

Документация, примеры

● Хорошо описаны примеры использования и архитектура

● Почти все готовые решения - базовые и вам напрямую не подойдут

● Для полного понимания придется заглянуть в код

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

Gobblin pipeline - internals

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

Из коробки

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

ExtractTransformLoad

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

Из коробки

Используйте AVRO.

Linkedin

AVRORAW Pipeline

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

VSVS

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

ru.rambler.hobgobblin

Отдельный пакет кастомных классов:● Расширение и реализация оригинальных классов и

интерфейсов● Упрощенная развертка и отсутствие конфликтов

при переходе на новые версии Gobblin● Покрытие юнит-тестами

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

Taste it!!!

https://github.com/rambler-digital-solutions/hobgobblin

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

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;}

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

Converter

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

А что если …

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

Вывод

Tranform должен быть функционально чистым

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

Quality Checker / Policy

Проверяет качество выходного потока на соответствие ожиданиям.

● Row/Task Level● Mandatory/Optional● Redirect

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

Что получилось

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

Json pipeline

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

Failback case - HDFS2HDFS

В случае большого количества данных не прошедших проверку или при ошибках преобразования.

HDFS2HDFS!!!

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

./errors

./success

1.

2.

3.

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

Что это дает?

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

Старая платформа

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

Новый гибкий pipeline

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

Итоги:

В каких случаях стоит начать смотреть в сторону gobblin:● Kafka2HDFS● У вас Hadoop, но вокруг своя уникальная

экосистема● Если cбор и доставка данных стали вашей

головной болью● И при этом нужно что-то особенное

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

Спасибо, ваши вопросы!?

Документация:https://gobblin.readthedocs.io/en/latest

Github:https://github.com/apache/incubator-gobblin

Сообщество:https://gitter.im/gobblin/Lobby/