BigПочта: как мы строили DataLake в Почте России / Алексей...

Preview:

Citation preview

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

Кейс из жизни

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

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

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

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

Ритейл

Логистика

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

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

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

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

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

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

Требования

• OpenSource• Exadata + OracleBI

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

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

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

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

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

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

Front REST(in)

Map-Reduce

Front REST(in)

Map-Reduce

Oozie

Front REST(in)

Map-Reduce

Oozie

Front REST(in)

SQL

Релиз 0

Map-Reduce

Oozie

Front REST(in)

SQL

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

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

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

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

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

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

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

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

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

Лидеры

Map-Reduce

Oozie

Front REST(in)

SQL

было

Map-Reduce

Oozie

Front REST(in)

стало

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

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

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

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

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

• Кандидаты:

Релиз 1

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Новые задачи

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

Выбор streaming

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

• Kafka -> Cassandra

• Kafka -> Hadoop (Hive)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Проблемы Spark Streaming

Producer ?? Consumer

Producer Message Message Consumer

Producer Message Consumer

At-Most-Once

At-Least-Once

Exactly-Once

Проблемы Spark Streaming

Producer Message Message Consumer

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

• Spark Kafka Direct API

• Spark checkpoint

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

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

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

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

было

Релиз 2

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

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

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

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

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

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

Map-Reduce

Oozie

Cluster

DockerFront REST(out)

REST(in)

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

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

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

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

Map-Reduce

Sqoop

Oozie

Job1

JobN

Cluster

DockerFront REST(out)

REST(in)

Релиз 3

Map-Reduce

Oozie

Cluster

Spark SQL Thrift

Front REST(in)

Map-Reduce

Sqoop

Oozie

Job1

JobN

Cluster

DockerFront REST(out)

REST(in)

Релиз 3

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

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

•ClickHouse + docker

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

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

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

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

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

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

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

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

• Решение – Flink

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

Map-Reduce

Sqoop

Oozie

Job1

JobN

Cluster

DockerFront REST(out)

REST(in)

Релиз 3

Map-Reduce

Sqoop

Oozie

Job1

JobN

ClickHouse

Cluster

CH Front DockerFront REST

(out)REST

(in)

Flink

Релиз 3.5

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

data

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

data data

Job1

data data

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

data data

Job1

data data

data data

JobN

data data

JobM

Cluster

data

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

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

data data

JobN

data data

JobM

Cluster

data

export

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

Oozie

data

data

data

data

Oozie

data

data

Cluster

data

ClickHouse

data

data

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

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)

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

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

• 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)

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

Map-Reduce

Sqoop

Oozie

Job1

JobN

ClickHouse

Cluster

CH Front DockerFront REST

(out)REST

(in)

Flink

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

CH Front

ClickHouse

Map-Reduce

Sqoop

Oozie

Job1

JobN

Cluster

DockerFront REST(out)

REST(in)

Flink

Streaming only, no Hadoop

Map-Reduce

Sqoop

Oozie

Flink

Job1

JobN

ClickHouse

Cluster

CH Front DockerFront REST

(out)REST

(in)

Hadoop only, no Streaming

Job1

JobN

Map-Reduce

Sqoop

OozieClickHouse

Cluster

CH Front DockerFront REST

(out)REST

(in)

Flink

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

REST(out)

Cluster

Job1

JobN

Map-Reduce

Sqoop

OozieClickHouse

CH Front DockerFront REST

(in)

Flink

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

ClickHouse

CH Front REST(out)

Cluster

Job1

JobN

Map-Reduce

Sqoop

Oozie

DockerFront REST(in)

Flink

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

• Flink->prod

• More data -> more nodes

• CI/CD full automatic

• Monitoring/puppet everything

• Sleep at the nights!

Что дальше?

• DataLab (Spark ML, …)

• IgNite

• Spark structured streaming

Выводы

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

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

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

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

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

AVovchenko@luxoft.comSkype: itsneinhttps://www.linkedin.com/comm/in/alexey-vovchenko-3a1b6744

Recommended