Files
clickstream-data-platform/README.md
T
ddadmin bb8605eed7 feat(labs): добавлено сохранение наблюдений под учебной учеткой
Зачем: студенту нужен понятный путь от сохраненного состояния к SQL-сравнению без доступа технической учетной записи к изменению хранилища.

Что: добавлен student с чтением источников и записью только в default; лабораторная сохраняет заказы и итоги в две локальные таблицы. Обновлены настройка доступа и программа, уточнено округление productPrice.

Проверка: DDL и INSERT SELECT под student, пустое наблюдение, восемь переходов сохраненной истории и запрет вставки в пять прикладных баз на обеих нодах. config-test, lint стенда и генератора, 54 ссылки, независимое ревью.
2026-09-22 04:56:45 -04:00

161 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Учебная дата-платформа кликстрима
> Этим стендом можно пользоваться самостоятельно. Он также входит в
> [план обучения Data Engineering Roadmap](https://de.dementev.space) как
> курсовая работа. Если вам нужна помощь, обратитесь к автору материалов —
> ментору [@dementev_dev](https://t.me/dementev_dev).
Здесь вы будете работать с хранилищем данных небольшого интернет-магазина:
загружать и обрабатывать данные в ClickHouse, строить витрины, проверять
качество данных и создавать графики. Стенд рассчитан на тех, кто уже изучил
основы ClickHouse и хочет попрактиковаться.
Генератор создает заказы и кликстрим — записи о действиях посетителей
магазина. Данные поступают через Kafka в ClickHouse и проходят четыре слоя
обработки: STG, ODS, DDS и DM. В кластере ClickHouse два шарда и отдельный
ClickHouse Keeper. Airflow управляет загрузкой и обработкой, Superset
показывает отчеты, а Prometheus и Grafana помогают следить за работой стенда.
При первом запуске стенд загрузит данные за неделю работы магазина.
После запуска начните с [путеводителя](docs/handbook/README.md): он объясняет
устройство хранилища. Затем переходите к [учебным заданиям](docs/labs/README.md).
## Быстрый старт
Для запуска нужны Docker с Compose, `make`, `curl` и `jq`.
Выделите Docker около 8 ГБ оперативной памяти. В Docker Desktop и WSL2
проверьте лимит памяти виртуальной машины: он может быть меньше, чем общий
объем памяти компьютера. Команда `docker info --format '{{.MemTotal}}'`
покажет доступный Docker объем в байтах. В WSL2 лимит задается параметром
`memory` в файле `.wslconfig` в домашнем каталоге пользователя Windows.
После изменения выполните `wsl --shutdown`. Если ресурсов компьютера
недостаточно, стенд можно запустить на VPS.
По умолчанию должны быть свободны порты
`23000`, `28080`, `28088`, `28123`, `28124`, `29000`, `29001`, `29090`
и `29092`. Для работы с командами `make` в каталоге `generator/` также
понадобится `uv`.
В каталоге репозитория скопируйте образец настроек:
```bash
cp .env.example .env
```
В `.env` задаются имя экземпляра стенда, внешние порты, учебные логины,
пароли и ключи. Проверьте `DOCKER_GID`: это числовой идентификатор группы
`docker` на вашей машине. Узнать его можно командой `getent group docker`.
Если число отличается от образца, замените значение в `.env`. От этой
настройки зависит запуск генератора из Airflow.
Запустите стенд:
```bash
make up
```
Команда запустит службы и дождется загрузки начальных данных. Порядок запуска
и проверки результата описаны в [справочнике проверок](docs/architecture/testing.md).
Если обязательной настройки в `.env` не хватает, Compose сообщит об ошибке.
Внутренние адреса служб, имена топиков и версии образов заданы в `compose.yaml`
и Dockerfile.
Логины и пароли Postgres и Grafana сохраняются при первом запуске в томах
Docker. Простая правка `.env` их не изменит. Чтобы задать новые значения
через `.env`, потребуется `make clean` и повторный `make up`. При этом
будут удалены все локальные данные стенда.
## Адреса и пароли
С настройками из `.env.example` порты доступны только с локальной машины:
- узел ClickHouse 1 — `http://127.0.0.1:28123`, нативный порт `29000`;
- узел ClickHouse 2 — `http://127.0.0.1:28124`, нативный порт `29001`;
- Kafka — `127.0.0.1:29092`;
- Airflow — `http://127.0.0.1:28080`, пользователь `admin`, пароль `airflow`;
- Superset — `http://127.0.0.1:28088`, пользователь `admin`, пароль `superset`;
- Prometheus — `http://127.0.0.1:29090`;
- Grafana — `http://127.0.0.1:23000`, пользователь `admin`, пароль `admin`.
Подробнее о службах, правах пользователей и изменении настроек —
в [справочнике стенда](docs/architecture/stand.md).
## Добавить данные за следующие дни
Время в учебном магазине идет отдельно от календарного. В документации оно
называется модельным временем, а сам магазин с его посетителями и заказами —
миром.
В Airflow запустите `world_next_day`. Это даг — набор связанных задач,
которые Airflow выполняет в заданном порядке. Он создаст и загрузит данные
за следующий день работы магазина. В форме запуска можно задать число дней.
Чтобы новые данные поступали непрерывно, снимите с паузы даг `world_live`.
Он будет запускать генерацию день за днем; один модельный день занимает
около 24 минут. Подробности — в [справочнике генератора и модельного
времени](docs/architecture/world.md#даги-модельного-времени).
## Восстановить начальные данные
Если хотите начать заново, поставьте `world_live` на паузу и дождитесь
завершения уже запущенного дага генерации. Затем выполните
`make rebuild-storage`.
Команда удалит прикладные базы ClickHouse, топики и позиции потребителей
Kafka, затем заново создаст схему хранилища и загрузит начальные данные.
Службы и их тома останутся на месте.
## Остановить или удалить стенд
`make down` остановит стенд и сохранит данные. Для повторного запуска
выполните `make up`.
`make clean` удалит контейнеры и все данные в томах Docker. Для обычного
завершения работы достаточно `make down`.
## Подключиться из DBeaver
Драйвер ClickHouse в DBeaver подключается по JDBC через HTTP-порт. Укажите хост
`127.0.0.1`, порт `28123`, пользователя `analyst` и пароль из переменной
`CLICKHOUSE_ANALYST_PASSWORD` в `.env`; в образце это `analyst-26-reader`.
Для подключения ко второму узлу укажите порт `28124`.
Пользователь `analyst` может читать данные во всех слоях и справочниках.
Для заданий с собственными таблицами наблюдений используйте `student` и пароль
из `CLICKHOUSE_STUDENT_PASSWORD` в `.env`. Он читает те же источники, а создавать,
заполнять и удалять таблицы может только в базе `default`.
Для создания учебных витрин используйте подключение, описанное
в [инструкции к заданиям](docs/labs/README.md#как-применить-свой-ddl).
Нативные порты `29000` и `29001` нужны `clickhouse-client`, но не DBeaver.
Остальные пользователи и роли описаны в
[справочнике стенда](docs/architecture/stand.md#пользователи-и-роли-clickhouse).
## Документация
- [docs/handbook/](docs/handbook/) — путеводитель по стенду и порядок чтения.
- [docs/labs/](docs/labs/) — учебные задания с порядком прохождения и
самопроверкой.
- [docs/specs/](docs/specs/) — требования к стенду и программа обучения.
- [docs/adr/](docs/adr/) — решения об устройстве стенда: что выбрали,
какие варианты отклонили и почему.
- [docs/architecture/](docs/architecture/) — технические справочники:
- [хранилище](docs/architecture/storage.md) — правила именования,
распределение данных по шардам, прием событий и список таблиц.
- [конвейер](docs/architecture/etl.md) — движение данных между слоями и
работа дагов.
- [мир и модельное время](docs/architecture/world.md) — начальные данные,
создание данных за следующие дни и управление генератором.
- [стенд](docs/architecture/stand.md) — службы, доступ и настройка.
- [проверки](docs/architecture/testing.md) — команды `make` для проверки
стенда и правила добавления новых проверок.
- [мониторинг](docs/architecture/monitoring/README.md) — сбор метрик и
устройство дашборда.
- [Superset](docs/architecture/superset.md) — подключения, наборы данных и
автоматическая настройка при запуске.
- [docs/research/](docs/research/) — исследования; сейчас это формат
кликстрима Яндекса, по которому строится модель события.
- [docs/formats/](docs/formats/) — форматы исходных данных, необходимые
для их загрузки и обработки. Эти документы собираются из кода командой
`make docs` в `generator/`; вручную их менять не нужно.
- [AGENTS.md](AGENTS.md) — правила работы в репозитории для ИИ-агентов.