Этот документ описывает сам стенд как 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 psdocker compose logs -f spark-master
docker compose logs -f trino
docker compose logs -f minio
docker compose logs -f jupyterdocker compose down
docker compose down -vdown -v удаляет volumes и возвращает стенд в чистое состояние.
- 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- 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;Подключение через DBeaver:
- Host:
localhost, Port:8090, Catalog:lakehouse, User: любая строка, Password: нет. - Driver: Trino (встроен в DBeaver).
- Проверка:
SHOW SCHEMAS FROM lakehouse;.
- S3 endpoint:
http://localhost:9000 - Console:
http://localhost:9001 - логин:
minioadmin - пароль:
minioadmin
Бакет lakehouse обычно создаётся автоматически контейнером minio-init.
Подключение с хоста:
psql -h localhost -p 5432 -U iceberg -d icebergСлужебные таблицы JDBC-каталога создаёт iceberg-catalog-init.
Если нужен повторный запуск инициализации:
docker compose run --rm iceberg-catalog-init- адрес:
http://localhost:8888 ./notebooksсмонтирован как/opt/work./srcсмонтирован read-only как/opt/src./dataсмонтирован read-only как/opt/dataPYTHONPATH=/opt/src
Первый ноутбук курса: notebooks/01_environment_and_smoke_test.ipynb.
Для Модуля 3 локально скачанный data bundle должен лежать на хосте в ./data/nyc_taxi и будет доступен внутри Jupyter по пути /opt/data/nyc_taxi.
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 |
docker compose exec spark-master \
/opt/spark/bin/spark-submit /opt/src/spark/cluster_smoke.pydocker 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"| Путь | Назначение |
|---|---|
s3a://lakehouse/raw/nyc_taxi/ |
raw-зона: исходные Parquet и CSV |
s3a://lakehouse/warehouse/bronze/ |
bronze-таблицы Iceberg |
s3a://lakehouse/warehouse/silver/ |
silver-таблицы Iceberg |
| Таблица | Создаётся в |
|---|---|
lakehouse.bronze.nyc_taxi_yellow |
Модуль 4 |
lakehouse.bronze.taxi_zone_lookup |
Модуль 4 (самостоятельное задание) |
lakehouse.silver.nyc_taxi_yellow |
Модуль 5 |
-- Просмотр структуры каталога
SHOW TABLES IN lakehouse.bronze;
-- Метаданные Iceberg
SELECT * FROM <table>.snapshots;
SELECT * FROM <table>.files;
-- Обслуживание (Модуль 8)
CALL lakehouse.system.rewrite_data_files(table => '<namespace>.<table>');
CALL lakehouse.system.expire_snapshots(table => '<namespace>.<table>', retain_last => N);
-- Rollback (Модуль 7)
CALL lakehouse.system.rollback_to_snapshot(table => '<namespace>.<table>', snapshot_id => <id>);
-- Time travel (Модуль 7)
SELECT * FROM <table> VERSION AS OF <snapshot_id>;SHOW SCHEMAS FROM lakehouse;
SHOW TABLES FROM lakehouse.silver;
DESCRIBE lakehouse.silver.nyc_taxi_yellow;
-- Time travel (синтаксис Trino)
SELECT * FROM <table> FOR VERSION AS OF <snapshot_id>;| Хост | Контейнер | Режим |
|---|---|---|
./notebooks |
/opt/work |
read-write |
./src |
/opt/src |
read-only |
./data |
/opt/data |
read-only |
README.md— чтобы понять, что это за репозиторий и куда идти дальше.START_HERE.md— чтобы впервые поднять стенд и пройти Модуль 1.stack_reference.md— чтобы быстро вспомнить порты, команды, точки доступа, шпаргалку и smoke-тесты.course_program.md— чтобы понять учебную траекторию дальше первого модуля.glossary.md— чтобы вернуться к определению термина (storage, catalog, compute, snapshot и др.).mentor_notes.md— заметки для ведения курса с ментором (опционально).