Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to...

125
Александр Крашенинников · Алексей Еремихин ХРАНИЛИЩА ДАННЫХ НА СЛУЖБЕ BI

Transcript of Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to...

Page 1: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Александр Крашенинников · Алексей Еремихин

ХРАНИЛИЩА ДАННЫХ

НА СЛУЖБЕ BI

Page 2: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

2

Александр Крашенинников

Алексей Еремихин

Руководим разработкой BI в Badoo

Page 3: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем
Page 4: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем
Page 5: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

План доклада• Что такое BI • Хранилища данных • Задача ETL • Обработка потока событий • Cross-database bridge

5

Page 6: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Что такое BI• Люди делающие графики из данных • BI обеспечивает работу с данными • А данные в хранилищах

6

Page 7: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Хранилища данных: Embedded

7

Embedded

Page 8: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Хранилища данных: Single-node

8

Single-node

Page 9: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Хранилища данных: Clustered

9

Clustered

Page 10: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Размеры и сложность баз

10

Embedded

Single-node Clustered

Page 11: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Размеры и сложность баз

11

Embedded

Single-node Clustered

Page 12: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Поговорим об этих базах

12

Single-node Clustered

Page 13: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Классический ETL

Extract Transform Load

13

Page 14: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Что такое ETL

14

OLTP OLAPETL

Application Reporting

Page 15: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Непонятно!

15

OLTP OLAPETL

ReportingApplication

Page 16: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Непонятно!

16

MySQL ExasolETL

ReportingApplication

Page 17: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Что такое ETL?

17

MySQL ExasolETL

Page 18: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ETL большого проекта

18

MySQL

ExasolETLHadoop

Files

Page 19: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ETL => ELT

19

MySQL

Exasol Hadoop

Files

ELT / SQL

Page 20: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Какой формат?

20

MySQL

Exasol Hadoop

Files

ELT / SQL

?

Page 21: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Формат TSV

21

● Почти как CSV (comma-separated), только tab-separated

Page 22: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Формат TSV

22

● Почти как CSV (comma-separated), только tab-separated

● Нет проблем с экранированием запятых и кавычек

Page 23: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Формат TSV

23

● Почти как CSV (comma-separated), только tab-separated

● Нет проблем с экранированием запятых и кавычек ● В BI табы и переводы строк встречаются редко

Page 24: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Формат TSV

24

● Почти как CSV (comma-separated), только tab-separated

● Нет проблем с экранированием запятых и кавычек ● В BI табы и переводы строк встречаются редко ● Удобно работать в командной строке (cut, awk, sed,

sort,...)

Page 25: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Формат TSV

25

● Почти как CSV (comma-separated), только tab-separated

● Нет проблем с экранированием запятых и кавычек ● В BI табы и переводы строк встречаются редко ● Удобно работать в командной строке (cut, awk, sed,

sort,...) ● Поддерживается везде (CSV с набором опций)

Page 26: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Формат TSV

26

● Почти как CSV (comma-separated), только tab-separated

● Нет проблем с экранированием запятых и кавычек ● В BI табы и переводы строк встречаются редко ● Удобно работать в командной строке (cut, awk, sed,

sort,...) ● Поддерживается везде (CSV с набором опций) ● Удобен в реализации

Page 27: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

TSV

27

MySQL

Exasol Hadoop

Files

ELT / SQL

TSV

Page 28: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Пример: Push уведомления

28

SendLog

Exasol

OpenLog

CREATE TABLE PushReport SELECT FROM SendLog LEFT JOIN OpenLog

Page 29: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Пример: Push уведомления

29

SendLog

Exasol

Page 30: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Передача MySQL -> Exasol• Через временный файл

30

Page 31: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

31

mysql -nsq -e 'SELECT * FROM SendLog' > /tmp/file

30 минут, 100Gb, 500M строк

Page 32: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

32

mysql -nsq -e 'SELECT * FROM SendLog' > /tmp/file

exajload -sql "IMPORT INTO staging FROM LOCAL CSV FILE '/tmp/file'"

20 минут

Page 33: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

33

50 минут

Page 34: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Передача MySQL -> Exasol• Через временный файл • Через pipe

34

Page 35: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

35

mysql -nsq -e 'SELECT * FROM SendLog'

Page 36: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

36

mysql -nsq -e 'SELECT * FROM SendLog' | exajload -sql "IMPORT INTO staging FROM LOCAL CSV FILE '/dev/stdin'"

Page 37: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

37

mysql -nsq -e 'SELECT * FROM SendLog' | exajload -sql "IMPORT INTO staging FROM LOCAL CSV FILE '/dev/stdin'"

Page 38: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

38

set -o pipefail; mysql -nsq -e 'SELECT * FROM SendLog' | exajload -sql "IMPORT INTO staging FROM LOCAL CSV FILE '/dev/stdin'"

Не забыть!!!

Page 39: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

39

30 минут

Page 40: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Передача MySQL -> Exasol• Данные с одной машины • А что, если шардинг?

40

Page 41: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

41

( mysql -nsq -h host1 'SELECT ….' && mysql -nsq -h host2 'SELECT ….' && mysql -nsq -h host3 'SELECT ….' ) | exajload -sql "IMPORT … '/dev/stdin'"

Page 42: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

42

( mysql -nsq -h host1 'SELECT ….' && mysql -nsq -h host2 'SELECT ….' && mysql -nsq -h host3 'SELECT ….' ) | exajload -sql "IMPORT … '/dev/stdin'"

Последовательно 8(

Page 43: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

MySQL => Exasol : multi pipe

43

fdlinecombine

Multiplex multiple input streams into stdout using \n as separators.

Does One Thing, But Does It Well.

https://github.com/vi/fdlinecombine

Page 44: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

44

fdlinecombine < (mysql -nsq -h host1 'SELECT ….') < (mysql -nsq -h host2 'SELECT ….') < (mysql -nsq -h host3 'SELECT ….') |exajload -sql "IMPORT … '/dev/stdin'"

Page 45: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

45

fdlinecombine < (mysql -nsq -h host1 'SELECT ….') < (mysql -nsq -h host2 'SELECT ….') < (mysql -nsq -h host3 'SELECT ….') |exajload -sql "IMPORT … '/dev/stdin'" Bash Pitfalls

Page 46: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

MySQL => Exasol : multi pipe

46

Сделай сам! PHP: proc_open() Python: subprocess.Popen()

Page 47: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

MySQL => Exasol : multi pipe

47

Сделай сам! Универсальные альтернативы: /dev/fd/%N mkfifo - создать named pipe /dev/stdin, /dev/stdout

Page 48: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

А почему бы не использовать GNU parallel?

48

“GNU parallel makes sure output from the commands is the same output as you would get had you run the commands sequentially. This makes it possible to use output from GNU parallel as input for other programs.”

Page 49: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

GNU parallel

49

● Может мержить потоки (опция --line-buffer)

Page 50: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

GNU parallel

50

● Может мержить потоки (опция --line-buffer)

● При этом жрёт много ресурсов

Page 51: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

GNU parallel

51

● Может мержить потоки (опция --line-buffer)

● При этом жрёт много ресурсов ● Сложен в отладке

Page 52: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

GNU parallel

52

● Может мержить потоки (опция --line-buffer)

● При этом жрёт много ресурсов ● Сложен в отладке ● Мы находили баги (теряли данные)

Page 53: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

MySQL => Exasol

53

MySQL

ExasolMySQL

MySQL

fdlinecombine

Page 54: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

MySQL => Exasol

54

MySQL

MySQL

MySQL

fdlinecombineExasol

Exasol

Exasol

Exasol

Page 55: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

MySQL => Exasol

55

MySQL Exasol

MySQL

MySQL

Exasol

ExasolExasol

Page 56: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

MySQL => Exasol

56

MySQL Exasol

MySQL

MySQL

Exasol

ExasolExasol

UDF

UDF

UDF

UDF

SELECT * FROM T1

В 5 раз быстрее

Page 57: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ETL граф

57

Page 58: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ETL граф

58

Page 59: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ETL граф

59

Page 60: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ETL граф

60

Page 61: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ETL большого проекта

61

Page 62: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

62

Обработка потока событий

Page 63: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Продуктовая разработка• Вопросы про данные

63

Page 64: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Продуктовая разработка• Вопросы про данные

– Собираем больше информации

64

Page 65: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Продуктовая разработка• Вопросы про данные

– Собираем больше информации • Эксперименты и новые метрики

65

Page 66: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Продуктовая разработка• Вопросы про данные

– Собираем больше информации • Эксперименты и новые метрики

– Настраиваем ETL – ALTER TABLE …. – Генерируем отчёты

66

Page 67: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

67

Доколе!?

Page 68: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Автоматизируй это!• Формальное, machine-readable

описание данных • Автоматизация доставки в хранилища

• Автоматизация репортинга

68

Page 69: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Формальное описание событий• Единый формат для всех платформ

• Строгая типизация атрибутов

• Понятно человеку и машине

69

Page 70: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

70

Событие «Авторизация»

Page 71: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

71

Событие «Авторизация»

Page 72: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

72

ENUM «Способы авторизации»

Page 73: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Доставка в хранилища• Сгенерировать события на backend

• Преобразовать

• Загрузить в хранилище

73

Page 74: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

74

Page 75: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

75

Page 76: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Схема в Hadoop (Hive)• Единая таблица для хранения всех

событий

• Хранение атрибутов в map<string,

string>

76

Page 77: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Схема в Hadoop (Hive)• Единая таблица для хранения всех

событий

• Хранение атрибутов в map<string,

string>

• Модный формат хранения ORC 77

Page 78: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Схема в Hive: преимущества• Поддержка любых атрибутов событий

• Top-level reporting по всему объему

данных

• Оперативное обновление

78

Page 79: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Схема в Hive: недостатки• Большое количество партиций

• Overhead на хранение атрибутов в

строках

79

Page 80: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Доставка в Hive• Накопить данные в HDFS

• Сделать временную таблицу (JSON)

• INSERT OVERWRITE TABLE table_name

SELECT …. FROM table_temporary

80

Page 81: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

81

Page 82: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Схема хранения в Exasol• Таблица на каждый тип события

• Каждому атрибуту – отдельная колонка

• Общая информация о событиях в отдельной таблице

82

Page 83: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

83

head_id method job_id

12345678901234 Email job_one

98765432109876 Facebook job_two

Событие SignIn

head_id profile_id job_id

12345678901234 1567854 job_one

98765432109876 4589783 job_one

Событие ViewProfile

head_id 12345678901234

user_id 100500

gender Male

country Russia

platform Android

Header

Page 84: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Схема в Exasol: преимущества• Оптимизация хранилища под типы

данных • Быстрый репортинг по отдельным

событиям

84

Page 85: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Схема в Exasol: недостатки• Надо поддерживать согласованность

конфига событий и схемы таблиц • Нет сквозного репортинга по всем

данным

85

Page 86: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Доставка в Exasol• Взять данные из Hadoop

• Сформировать открыть транзакцию в

Exasol

• Вставить данные

• COMMIT в Exasol 86

Page 87: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

87

Page 88: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Hadoop -> Exasol• Объём исходных данных – до 150 Gb

• У каждого события – своя схема

88

Page 89: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Схема pipeline• Выбрать данные из Hive в Spark • Для каждого события получаем

колонки из Exasol • Формируем TSV-файлы в HDFS • Импортируем в Exasol

89

Page 90: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

IMPORT INTO data.click_event

FROM CSV AT

‘http://hadoop:50070/etl_xxxx/signin/'

FILE '1.csv.gz', ...

FILE 'XXX.csv.gz';

90

Hadoop WebHDFS

Page 91: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

IMPORT INTO data.click_event

FROM CSV AT

‘http://hadoop:50070/etl_xxxx/signin/'

FILE '1.csv.gz', ...

FILE 'XXX.csv.gz';

91

Параллельная обработка событий одного типа

Page 92: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Преимущества• Распределение дисковой нагрузки

– HDFS – Spark Workers

• Node-to-node взаимодействие при IMPORT • Идемпотентность - перезаливка части

событий из job_id

92

Page 93: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

93

Cross-database bridges

Page 94: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Зачем строить мосты?

94

• Каждая база хороша по-своему • Не все задачи можно выполнить

внутри одного хранилища

Page 95: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Зачем строить мосты?

95

• Каждая база хороша по-своему • Не все задачи можно выполнить

внутри одного хранилища • Требуется обмен данными

между большими системами

Page 96: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

96

Page 97: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

97

• Сверхбыстрая выборка в пределах таблицы

• Real-time вставка данных • Можно делать мелкие вставки

Page 98: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

98

• Слабый JOIN – не все аналитические задачи решаются

• Важно думать о data locality – иначе не сделать

JOIN больших таблиц

Page 99: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

99

• Принимает данные в любых форматах • Лёгкое масштабирование • Удобное управление репликацией и

retention • Можно делать любые JOIN

– хоть и не всегда быстро

Page 100: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

100

• Надо думать о партицировании данных • Плохо работает с маленькими вставками • Высокое значение latency

Page 101: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

101

• Высокая скорость сканирования • Любые аналитические операции • Всё быстро

Page 102: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

102

• Дорого хранить исторические данные • Вставка большими порциями и редко

Page 103: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Всё круто, и всё же – мосты?

103

• Ни одно хранилище не обладает 100% информации

• Будем брать лучшее, и доставлять недостающее

Page 104: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

104

Page 105: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Hadoop to ClickHouse

105

• Запрос в ClickHouse на импорт данных • Используя Spark

Page 106: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

SELECT * FROM

hdfs(

'hdfs://hdfs1:9000/file',

TSV,

'id UInt64, number Float64'

) 106

Page 107: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

SELECT * FROM

hdfs(

'hdfs://hdfs1:9000/file',

TSV,

'id UInt64, number Float64'

) 107

--- URL файла

--- формат данных

--- схема данных

Page 108: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Hadoop to ClickHouse via SQL

108

• Нативно, внутри ClickHouse • Поддержка лишь одного файла за раз

– в разработке поддержка globbing

• Требуется согласованность форматов данных • Всё прокачивается через

1 машину ClickHouse

Page 109: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Hadoop to ClickHouse via Spark

109

• Читаем данные в Spark • Преобразуем • Каждую партицию данных пишем через

JDBC-коннектор + нестандартный метод sendRowBinaryStream

Page 110: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Hadoop to ClickHouse via Spark

110

• Не только SQL для преобразований • Параллелизм обработки • Пишем в любые ноды ClickHouse

Page 111: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Hadoop to ClickHouse via Spark

111

• Не только SQL для преобразований • Параллелизм обработки • Пишем в любые ноды ClickHouse • Надо программировать • Ограничено Spark + Java/Scala • Накладные расходы от Spark

Page 112: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ClickHouse to Hadoop

112

• Запрос в ClickHouse на экспорт данных • Через Spark

Page 113: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

CREATE TABLE hdfs_table

(id Int32)

ENGINE = HDFS('hdfs://hdfs1:9000/file', 'TSV');

INSERT INTO hdfs_table

SELECT * FROM another_table;

113

Page 114: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ClickHouse to Hadoop via SQL

114

• Запись только в один файл • Обрабатывается через 1 машину

ClickHouse

Page 115: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ClickHouse to Hadoop via Spark

115

• JDBC + нестандартный метод executeQueryClickHouseRowBinaryStream

• Программное управление топологией данных

Page 116: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

116

Page 117: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ClickHouse to Exasol и обратно

117

• Через IMPORT/EXPORT команды Exasol

Page 118: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

IMPORT INTO exasol_table

FROM CSV AT

'http://clickhouse1:8123/'

FILE '?query=SELECT * FROM clickhouse_table'

118

Page 119: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

EXPORT exasol_table

INTO CSV AT

'http://clickhouse1:8123/'

FILE

'?query=INSERT INTO clickhouse_table FORMAT CSV'

119

Page 120: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

ClickHouse to Exasol и обратно

120

• Дёшево и просто • Ограничено взаимодействием двух

машин – исправить: через Spark – в связке с Exasol sub-connections

Page 121: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

121

Page 122: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Hadoop to Exasol

122

• WebHDFS + TSV + Exasol IMPORT query • Через Spark + Exasol sub-connections

Page 123: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Exasol to Hadoop

123

• Exasol EXPORT query – более одного файла – только CSV

• Exasol UDF – высокая производительность – любые форматы – требует программирования

Page 124: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

Выводы

124

• BI – это круто :) • Подбираем хранилище данных под задачу • Берём лучшее от разных систем • В экспериментах рождается прогресс

Page 125: Хранилища данных на службе BI PDF · 1 машину ClickHouse. Hadoop to ClickHouse via Spark 109 • Читаем данные в Spark • Преобразуем

СПАСИБО! [email protected]

[email protected]