60
BigПочта Алексей Вовченко

BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

  • Upload
    ontico

  • View
    262

  • Download
    13

Embed Size (px)

Citation preview

Page 1: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

BigПочтаАлексей Вовченко

Page 2: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Кейс из жизни

2012 год – посылка из США под новый год, с подарками всем друзьям•27 ноября - экспорт из США•25 декабря - появилась у нас на границе•30 декабря – поездка в центральный офис EMS

вызволять (5 часов)

Page 3: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Ответ – Матрешка

Page 4: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Что такое почта?

Ритейл

Логистика

Нельзя терять данные

Page 5: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

47 тыс. отделений2 млн. новых отправлений в день200-400 млн. событий в сутки

ДанныеПочтыРоссии

Page 6: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Задача - Построить отказоустойчивую инфраструктуру для решения задач почты

Получение Хранение Очистка Валидация

Обработка Аналитика Экспорт

Page 7: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Требования

• OpenSource• Exadata + OracleBI

• уже работает, нужно лучше

Page 8: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Задачи на релиз 0

1. Получить данные от всех логистических систем

2. Построить модель данных (матрешка)

3. Построить отчет «Остатки» состояние на вчера

4. Предоставить доступ к отчету пользователям

Page 9: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Front REST(in)

Page 10: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Front REST(in)

Page 11: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Front REST(in)

Page 12: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Front REST(in)

SQL

Релиз 0

Page 13: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Front REST(in)

SQL

Новые задачи • Нагрузкапользователей

• Доступ к данным по ключу

• Обработки данных не укладываются в реляционную логику

Page 14: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Выбор SQL движка

• Загрузка из HDFS

• Нагрузка – много пользователей

• Тяжелые OLAP запросы

Page 15: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Выбор SQL движка – выводы:

Все SQL движки над HDFS – медленные

Лидеры

Page 16: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Front REST(in)

SQL

было

Page 17: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Front REST(in)

стало

• Доступ к данным по ключу

Page 18: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Доступ к данным по ключу

по ID из 100млрд записей найти 10-100 нужных (pochta.ru)

• Решение key-value базы• Пробовали SparkSQL

• Пробовали Hadoop/Hive/in-memory/Vertica

• Кандидаты:

Page 19: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Релиз 1

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Page 20: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Новые задачи

• А теперь давайте считать real-time…

Page 21: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Выбор streaming

Задачи:• Kafka -> Kafka

• Kafka -> Cassandra

• Kafka -> Hadoop (Hive)

Page 22: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Page 23: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Проблемы Spark Streaming

Producer ?? Consumer

Producer Message Message Consumer

Producer Message Consumer

At-Most-Once

At-Least-Once

Exactly-Once

Page 24: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Проблемы Spark Streaming

Producer Message Message Consumer

• Spark checkpoint когда изменился код• Offsets Zookeeper – медленно

• Spark Kafka Direct API

• Spark checkpoint

• Реализовали свой механизм• PostgreSQL (ключ: topic, clientid, partition id, value: offset)

Page 25: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Page 26: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

• Данные в batch != streaming

Page 27: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Page 28: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

было

Page 29: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Релиз 2

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Page 30: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

• Pentaho не держит нагрузку

• Прием не держит пики

• SparkThrift +Cassandra – не стабильны

• Spark Streaming -высокодоступность

Page 31: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Масштабируемость фронтов

Page 32: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Cluster

DockerFront REST(out)

REST(in)

Page 33: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Высокодоступность SparkStreaming

• Ночью кластер занят на 100%

• Если streaming-job падает, он не может подняться

• Yarn очереди – жалко терять ресурсы

Page 34: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Sqoop

Oozie

Job1

JobN

Cluster

DockerFront REST(out)

REST(in)

Релиз 3

Page 35: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Page 36: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Sqoop

Oozie

Job1

JobN

Cluster

DockerFront REST(out)

REST(in)

Релиз 3

Page 37: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Пилотирование Yandex ClickHouse

•Очень быстрая база

•ClickHouse + docker

•Универсальный загрузчик данных (Spark+Scala+local-table+paritions)

Page 38: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Пилотирование Yandex ClickHouse

•Провели нагрузочное тестирование• Результат – для наших задач не подходит• Под нагрузкой – 100% (3600%)CPU• Скорость сопоставима с Vertica, но очень большая

нагрузка на оборудование

Page 39: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Пилотирование Flink

• Flume не всегда стабилен

• Flume сложно мониторить

• Шаг влево-вправо – сложно

• Решение – Flink

• Пробовали NiFi – не понравился

Page 40: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Sqoop

Oozie

Job1

JobN

Cluster

DockerFront REST(out)

REST(in)

Релиз 3

Page 41: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Map-Reduce

Sqoop

Oozie

Job1

JobN

ClickHouse

Cluster

CH Front DockerFront REST

(out)REST

(in)

Flink

Релиз 3.5

Page 42: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Путь данных: Прием

data

Page 43: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Путь данных: Онлайн обработка

data data

Job1

data data

Page 44: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Путь данных: Снова онлайн обработка

data data

Job1

data data

Page 45: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

data data

JobN

data data

JobM

Cluster

data

Путь данных: онлайн сохранение в Cassandra

Page 46: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Путь данных: вся онлайн обработка

data data

JobN

data data

JobM

Cluster

data

export

Page 47: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Путь данных: batch обработка

Oozie

data

data

data

data

Page 48: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Oozie

data

data

Cluster

data

ClickHouse

data

data

Путь данных: batch экспорт

Page 49: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Front+Docker+nginx Node

(0.5X)

DataCloud front docker (Pentaho, rest, DC services)

KafkaVerticaNode (SAS 10k)

Kafka Cluster + Vertica Cluster + ClickHouse Cluster + Spark

Streaming Cluster

Cassandra (SSD)

Cassandra (SSD)

Cassandra Cluster + HadoopControl (main ring)

DataNode (SATA)

DataNode (SATA)

DataNode (SATA)

DataNode (SATA)

DataNode (SATA)

Hadoop Cluster

DataNode (SATA)

А как же инфраструктура?

Page 50: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Одна инфраструктура

• DataLake (for RAW data)• Batch ETL• Real-time processing• Analytics OLAP/OLTP processing• High-load rest (export)• High-load rest (input)• DataBus• BI• ML

• Hortonworks HDP+HDF• Hadoop• Yarn• Hive(tez)• Spark (+streaming)• Flume• Kafka

• Vertica• ClickHouse• PostgreSQL• Cassandra• Pentaho BI• Docker (scalable rest)

Page 51: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Можно миксовать

Map-Reduce

Sqoop

Oozie

Job1

JobN

ClickHouse

Cluster

CH Front DockerFront REST

(out)REST

(in)

Flink

Page 52: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Нет свободной аналитики

CH Front

ClickHouse

Map-Reduce

Sqoop

Oozie

Job1

JobN

Cluster

DockerFront REST(out)

REST(in)

Flink

Page 53: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Streaming only, no Hadoop

Map-Reduce

Sqoop

Oozie

Flink

Job1

JobN

ClickHouse

Cluster

CH Front DockerFront REST

(out)REST

(in)

Page 54: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Hadoop only, no Streaming

Job1

JobN

Map-Reduce

Sqoop

OozieClickHouse

Cluster

CH Front DockerFront REST

(out)REST

(in)

Flink

Page 55: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Нет задач доступа по ключу

REST(out)

Cluster

Job1

JobN

Map-Reduce

Sqoop

OozieClickHouse

CH Front DockerFront REST

(in)

Flink

Page 56: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Hadoop only, нет задачи и BI

ClickHouse

CH Front REST(out)

Cluster

Job1

JobN

Map-Reduce

Sqoop

Oozie

DockerFront REST(in)

Flink

Page 57: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Что осталось?

• Flink->prod

• More data -> more nodes

• CI/CD full automatic

• Monitoring/puppet everything

• Sleep at the nights!

Page 58: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Что дальше?

• DataLab (Spark ML, …)

• IgNite

• Spark structured streaming

Page 59: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

Выводы

• Не нужно останавливаться на достигнутом

• Каждую задачу должен решать свой инструмент

• Не надо бояться расширять архитектуру за счет хороших и

подходящих инструментов

Page 60: BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)

BigПочта – вопросы?Алексей Вовченко

[email protected]: itsneinhttps://www.linkedin.com/comm/in/alexey-vovchenko-3a1b6744