Аналитика показателей продаж OZON на базе современного стека инструментов - airbyte, postgres, dagster, dbt, superset.
- Декларативный подход к организации обработки данных
- Орекстрация данных ELT через одно «окно».
- Визализация и аналитика показателей в Apache Superset.
- Развернуть сервисы в YC
- Настроить коннекторы для выгрузки и загрузки данных.
- Провести трансформацию данных для BI
- «Уложить» все в оркестратор dagster
- Визуализировать в BI
- ГуглДрайв - источник данных
- Airbyte - сервис для выгрузки и загрузки сырых данных.
- PostgreSQL – хранилище данных (DWH).
- Dagster – оркестратор.
- DBT - трансформация данных.
- Superset - визуацлизация данных.
-
Исходный набор данных “Продажи OZON 2020” размещен на гугл диске
-
Архитектура проекта
- Развертывание инфраструктуры
- БД Postgres развернут через маркетплейс Yandex Cloud.
- ВМ airbyte-dagster-dbt-node для airbyte, dagster, dbt. Где airbyte развернут при помощи docker, dagster - локально, dbt - локально в корень папки дагстера для удосбтва подключения моделей к оркестратору.
- ВМ superset-node для BI Superset - развернут при помощи docker.
Инструкция по развертыванию представлена вконце раздела.
- Airbyte - http://158.160.121.23:8000
- Источник данных для проекты был выбран ГуглДрайв, т.к. часто приходится работать с ручными выгрузками в формате csv, а ГуглДрайв самый быстрый и простой способ размещения информации, а забор данных с Airbyte становится очень простым.
- Dagster - http://158.160.121.23:3000
- Удобный инструемент для оркестрации всего в одном месте и визуализации.
- Конфиг Для того чтобы связать airbyte/dbt - dagster:
import os
from pathlib import Path
from dagster_dbt import DbtCliResource
DBT_DIRECTORY = Path(__file__).joinpath("..", "..", "dbt_projects/otus").resolve()
DBT_PROJECT_DIR = 'home/yc-user/otus_projects/dbt_projects/otus'
DBT_PROFILES_DIR = 'home/yc-user/otus_projects/dbt_projects/otus'
DBT_CONFIG = {"project_dir": DBT_PROJECT_DIR, "profiles_dir": DBT_PROFILES_DIR}
#Airbyte configs
AIRBYTE_CONNECTION_ID = os.environ.get("AIRBYTE_CONNECTION_ID", "e6b2e408-2654-4f54-beec-dd4d56aeec01")
AIRBYTE_CONFIG = {
"host": os.environ.get("AIRBYTE_HOST", "158.160.121.23"),
"port": os.environ.get("AIRBYTE_PORT", "8000"),
"username": "airbyte",
"password": "password",
#"password": {"env":"AIRBYTE_PASSWORD"},
}- Повзоляет быстро вносить изменения, генерировать документацию по проекту. Скорощает написание повторяющегося кода за счет джинжи и макросов.
- Airbyte - http://158.160.104.146:8080
- Построенный стек позволяет построить пайпланы загрузки и обработки данных за короткий срок без использования кода. Airbyte хорош, особенно когда есть опыт создания собственных коннекторов. Подходит для любых задач. Есть многое из «коробки».
- Dagster может контролировать все. На нашем примере мы можем оркестровать задачи ayrbite и dbt, следить за ходом отработки пайплайнов на графах. Смотреть код, и статистическую информацию.
- Порог вхождения в DBT высок, но как только встаешь на «рельсы» инструмент кажется незаменимым. Легко вносить изменения в проект и быстро их применять к модели данных.
- Superset в связке с dbt кажется вполне рабочим инструментом, за счет того, что можно подать на вход готовые витрины под каждый чарт.
- В планах:
- Подключить к стеку данных CH для обработки больших объёмов данных. Postgres использовать как промежуточную БД.
- Минимизировать количество операций по развертыванию инфраструктуры. Dagster и dbt развернуть через docker.
- Внедрить DataVault средствами dbt
Пусть к ssh-key указываем свой.
yc compute instance create \
--name airbytedagsterdbt-node \
--ssh-key ~/.ssh/id_ed25519.pub \
--create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2004-lts,size=100,auto-delete=true \
--network-interface subnet-name=default-ru-central1-a,nat-ip-version=ipv4 \
--memory 16G \
--cores 4 \
--zone ru-central1-a \
--hostname airbyte-dagster-dbt-nodeОбновляем компоненты yc
yc components updateПодключаемся к ВМ через ssh
ssh yc-user@xx.xx.xx.xxУстанавливаем докер
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.ascДобавдяем в репозиторий Apt источники:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginПроверка установки докера.
sudo docker psgit clone --depth=1 https://github.com/airbytehq/airbyte.gitЗапускаем Airbyte
cd airbyte
sudo ./run-ab-platform.shПосле развертывания Airbyte на своих серверах обязательно измените логин и пароль на свои в .env файле:
BASIC_AUTH_USERNAME=your_new_username_here
BASIC_AUTH_PASSWORD=your_new_password_heredbt размещаем локально в корень паки с дагстером. Создаем виртуальную среду:
sudo apt update
sudo apt install python3.11-venv
python3.11 -m venv dbt-env
source venv/bin/activate
alias env_dbt='source venv/bin/activate'Устанавливаем все библиотеки из requirements.txt. Некоторые библиотеки не устанавливаются из-за несовместимости с версией питона, их ставим вручную или пропускаем.
python3.11 -m pip install -r /path/to/requirements.txtСоздаем проект дагстера.
dagster project scaffold --name otus_projectsСоздаем проект dbt.
cd cd /home/yc-user/otus_projects/dbt_projects
dbt init
dbt debugНастраиваем airbyte-dagster-dbt-postgres Готово!
yc compute instance create \
--name superset-node \
--ssh-key ~/.ssh/id_ed25519.pub \
--create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2004-lts,size=100,auto-delete=true \
--network-interface subnet-name=default-ru-central1-a,nat-ip-version=ipv4 \
--memory 16G \
--cores 4 \
--zone ru-central1-a \
--hostname superset-nodeОбновляем компоненты yc
yc components updateПодключаемся к ВМ через ssh ssh yc-user@xx.xx.xx.xx
#Устанавливаем докер
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.ascAdd the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginПроверка установки докера.
sudo docker psГенерируем ключ
openssl rand -base64 42Запускаем
sudo docker run -d -p 8080:8088 -e "SUPERSET_SECRET_KEY=your_secret_key_here" --name superset apache/supersetПроверка
sudo docker psДобавляем админа:
sudo docker exec -it superset superset fab create-admin \
--username admin \
--firstname Superset \
--lastname Admin \
--email admin@superset.com \
--password adminИнициализируем БД
sudo docker exec -it superset superset db upgradeЗагрузка примеров
sudo docker exec -it superset superset load_examplesИнициализируем суперсет
sudo docker exec -it superset superset initГотово!