- Зачем: - нужно убрать смешение маршрута студента с внутренними документами сопровождения репозитория. - Что: - переработан README.md как верхнеуровневый вход в репозиторий без ссылок на внутренние maintainer-документы. - добавлен docs/stack_reference.md для технического reference стенда и уточнены его роли относительно START_HERE.md. - синхронизированы AGENTS.md и docs/maintainer_guide.md под новую границу между onboarding и внутренней документацией. - Проверка: - сверены README.md, START_HERE.md, docs/stack_reference.md, AGENTS.md и docs/maintainer_guide.md на согласованность маршрута и аудиторий.
5.9 KiB
Технический reference стенда
Этот документ описывает сам стенд как runtime-среду: сервисы, порты, доступ, основные команды и smoke-тесты.
Если нужен первый student onboarding, используй START_HERE.md. Если нужна программа курса, используй course_program.md.
Состав сервисов
| Сервис | Контейнер | Порт на хосте | Назначение |
|---|---|---|---|
| Spark master | spark-master |
7077, 8080 |
мастер Spark и его UI |
| Spark worker 1 | spark-worker-1 |
8081 |
первый worker Spark |
| Spark worker 2 | spark-worker-2 |
8082 |
второй worker Spark |
| Trino | trino |
8090 |
SQL engine и Web UI |
| MinIO API | minio |
9000 |
S3-compatible endpoint |
| MinIO Console | minio |
9001 |
веб-консоль бакетов и объектов |
| PostgreSQL | postgres-iceberg |
5432 |
JDBC-каталог Iceberg |
| JupyterLab | jupyter |
8888 |
практические ноутбуки |
Основные команды
Все команды выполняются из корня репозитория.
Сборка и запуск
docker compose build
docker compose up -d
docker compose ps
Логи
docker compose logs -f spark-master
docker compose logs -f trino
docker compose logs -f minio
docker compose logs -f jupyter
Остановка и reset
docker compose down
docker compose down -v
down -v удаляет volumes и возвращает стенд в чистое состояние.
Доступ к сервисам
Spark
- Master UI:
http://localhost:8080 - Worker UI:
http://localhost:8081иhttp://localhost:8082 - Spark master endpoint внутри сети compose:
spark://spark-master:7077
Пример запуска smoke-скрипта:
docker compose exec spark-master \
/opt/spark/bin/spark-submit /opt/src/spark/cluster_smoke.py
Trino
- Web UI:
http://localhost:8090
CLI внутри контейнера:
docker compose exec -it trino trino --catalog lakehouse
Примеры первых команд:
SHOW CATALOGS;
SHOW SCHEMAS FROM lakehouse;
SHOW TABLES FROM lakehouse.default;
MinIO
- S3 endpoint:
http://localhost:9000 - Console:
http://localhost:9001 - логин:
minioadmin - пароль:
minioadmin
Бакет lakehouse обычно создаётся автоматически контейнером minio-init.
PostgreSQL
Подключение с хоста:
psql -h localhost -p 5432 -U iceberg -d iceberg
Служебные таблицы JDBC-каталога создаёт iceberg-catalog-init.
Если нужен повторный запуск инициализации:
docker compose run --rm iceberg-catalog-init
JupyterLab
- адрес:
http://localhost:8888 ./notebooksсмонтирован как/opt/work./srcсмонтирован read-only как/opt/srcPYTHONPATH=/opt/src
Первый ноутбук курса: notebooks/01_environment_and_smoke_test.ipynb.
Как связаны Spark, Trino, PostgreSQL и MinIO
Sparkиспользует каталогlakehouseчерезJdbcCatalog.Trinoиспользует тот же каталогlakehouseчерезiceberg.jdbc-catalog.- метаданные таблиц лежат в
PostgreSQL; - данные и metadata-файлы Iceberg лежат в
MinIOв бакетеlakehouse.
Именно поэтому таблица, созданная в Spark, может читаться в Trino без копирования данных.
Где лежат ключевые конфиги
| Файл | Что задаёт |
|---|---|
docker-compose.yml |
состав сервисов, порты, volumes, init-контейнеры |
spark/spark-defaults.conf |
Spark catalog lakehouse, s3a, Iceberg extensions |
trino/catalog/lakehouse.properties |
каталог Trino lakehouse, JDBC и S3-доступ |
spark/Dockerfile |
образ Spark с Iceberg, S3A и Python-зависимостями |
jupyter/Dockerfile |
образ JupyterLab на базе Spark |
Smoke-тесты
1. Проверка, что Spark-кластер жив
docker compose exec spark-master \
/opt/spark/bin/spark-submit /opt/src/spark/cluster_smoke.py
2. Проверка Spark -> Trino через общий каталог
docker compose cp src/spark/iceberg_smoke.py spark-master:/tmp/
docker compose cp src/trino/iceberg_smoke.sql trino:/tmp/
docker compose exec spark-master /opt/spark/bin/spark-submit /tmp/iceberg_smoke.py
docker compose exec trino trino --file /tmp/iceberg_smoke.sql
Ожидаемый результат:
- в Spark создаётся
lakehouse.default.spark_trino_smoke; - в Trino видна та же таблица;
- выборка возвращает строку
1, from_spark.
Опциональная очистка:
docker compose exec spark-master \
/opt/spark/bin/spark-sql -e "DROP TABLE IF EXISTS lakehouse.default.spark_trino_smoke"
Когда какой документ использовать
README.md— чтобы понять, что это за репозиторий и куда идти дальше.START_HERE.md— чтобы впервые поднять стенд и пройти Модуль 1.stack_reference.md— чтобы быстро вспомнить порты, команды, точки доступа и smoke-тесты.course_program.md— чтобы понять учебную траекторию дальше первого модуля.