Files
mini-lakehouse-lab/START_HERE.md
T

259 lines
14 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.
# START HERE
Этот документ нужен для первого входа в курс: поднять стенд, проверить сервисы, открыть интерфейсы, выполнить базовый smoke test и подготовить локальный data bundle для следующих модулей.
## Маршрут прохождения
1. Проверить prerequisites.
2. Собрать и поднять стенд.
3. Убедиться, что контейнеры живы.
4. Открыть основные UI.
5. Открыть VS Code в браузере и выполнить `notebooks/01_environment_and_smoke_test.ipynb`.
6. Перед Модулем 3 подготовить учебный датасет в `./data/nyc_taxi`.
7. При проблемах использовать логи и шаги диагностики из этого документа.
## Prerequisites
Нужно заранее установить:
- Docker;
- Docker Compose 2.17+ с BuildKit (`docker compose version`);
- современный браузер для UI;
- свободные порты на хосте.
Рекомендуемые ресурсы хоста:
- не менее `4 vCPU`;
- не менее `10 GB RAM`, иначе `Spark`, `Trino` и IDE могут стартовать нестабильно;
- хотя бы `20 GB` свободного места под образы, кэш первой сборки и контейнеры.
Python, Java, Jupyter и расширения VS Code устанавливаются при сборке Docker-образов.
На хосте не нужно создавать venv или устанавливать Python-пакеты.
Для первой сборки нужен доступ к внешним репозиториям. Если ты работаешь из РФ
или сети с ограничениями, при ошибке скачивания используй
[инструкцию по доступу к репозиториям](./docs/network_access.md): в ней есть
резервный источник MinIO и отдельные шаги для Docker и сборки зависимостей.
## Порты стенда
| Сервис | Адрес | Зачем нужен |
| --- | --- | --- |
| Spark Master UI | `http://localhost:8080` | Проверка мастера Spark и подключённых worker-ов |
| Spark Worker 1 UI | `http://localhost:8081` | Проверка первого worker-а |
| Spark Worker 2 UI | `http://localhost:8082` | Проверка второго worker-а |
| Trino UI | `http://localhost:8090` | Проверка координатора Trino |
| MinIO API | `http://localhost:9000` | S3-compatible endpoint |
| MinIO Console | `http://localhost:9001` | Просмотр бакетов и файлов |
| VS Code в браузере | `http://localhost:8889` | Основная точка входа в практику |
| JupyterLab | `http://localhost:8888` | Запасной интерфейс для ноутбуков |
| PostgreSQL | `localhost:5432` | JDBC-каталог Iceberg, нужен для диагностики |
## Быстрый запуск
Все команды выполняются из корня репозитория.
На Linux пользователь контейнера должен иметь доступ к файлам ноутбуков. Если
твой UID отличается от `1000`, перед сборкой задай его в текущем терминале:
```bash
export NB_UID=$(id -u) NB_GID=$(id -g)
```
Для Docker Desktop на macOS и Windows обычно подходят значения по умолчанию.
### 1. Скачать готовые образы и собрать окружение
```bash
docker compose pull minio minio-init postgres trino
docker compose build
```
Первая команда проверяет загрузку готовых сервисов до сборки окружения.
MinIO уже собран; для Spark, Jupyter и IDE первая сборка скачивает зависимости
и может занять несколько минут. Повторная сборка использует кэш Docker.
### 2. Поднять стенд
```bash
docker compose up -d
```
### 3. Проверить статус контейнеров
```bash
docker compose ps
```
Ожидаемое состояние:
- контейнеры `spark-master`, `spark-worker-1`, `spark-worker-2`, `minio`, `postgres-iceberg`, `trino`, `jupyter`, `ide` находятся в состоянии `Up`, у `ide` появляется статус `healthy`;
- однократные init-контейнеры вроде `minio-init` и `iceberg-catalog-init` могут завершиться после успешной инициализации.
## Куда заходить после старта
Открой в браузере:
- `http://localhost:8080` для `Spark Master UI`;
- `http://localhost:8090` для `Trino UI`;
- `http://localhost:9001` для `MinIO Console`;
- `http://localhost:8889` для `VS Code в браузере`.
Для входа в `MinIO Console` используй:
- логин: `minioadmin`;
- пароль: `minioadmin`.
Если интерфейсы открываются, переходи в VS Code и запускай:
```text
notebooks/01_environment_and_smoke_test.ipynb
```
## Роли сервисов в стенде
| Сервис | Роль в модуле |
| --- | --- |
| `MinIO` | `storage`: объектное хранилище для данных и файлов Iceberg |
| `PostgreSQL` | `catalog`: хранит метаданные JDBC-каталога Iceberg |
| `Spark` | `compute`: выполняет PySpark и Spark SQL задания |
| `Trino` | `compute`: читает те же таблицы через общий каталог |
| `VS Code / JupyterLab` | Интерфейсы для учебных ноутбуков |
## Как работать с ноутбуками
1. Открой `http://localhost:8889` в отдельной вкладке браузера.
2. Если сверху виден **Restricted Mode**, нажми **Manage → Trust** и закрой окно
Workspace Trust. Подтверди доверие только к своей копии этого учебного
репозитория: в Restricted Mode запуск ноутбуков ограничен.
3. В папке **Ноутбуки** открой `01_environment_and_smoke_test.ipynb`.
4. Нажми **Select Kernel → Python Environments** и выбери Python с путём
`/usr/bin/python3`. Он находится внутри контейнера `ide`, где уже есть
зависимости курса. Пункт **Existing Jupyter Server** здесь не нужен.
5. Запусти первую кодовую ячейку кнопкой слева или `Shift+Enter`, затем остальные
ячейки по порядку. Результат появится под ячейкой. Сохрани ноутбук через `Ctrl+S`.
Терминал VS Code тоже работает внутри контейнера. Команды `docker compose`
выполняй в терминале хоста, откуда запускал стенд.
Файлы доступны в IDE так:
- `./notebooks` смонтирован в контейнер как `/opt/work`;
- `./src` смонтирован read-only как `/opt/src`;
- весь репозиторий доступен read-only в `/opt/course`; его папка `notebooks/`
доступна для записи, поэтому правки из IDE сохраняются на хосте;
- `./data` смонтирован read-only как `/opt/data`;
- `PYTHONPATH=/opt/src`, поэтому helper-скрипты из `src/` доступны для импорта в ноутбуках;
- учебный data bundle для Модуля 3 доступен по пути `/opt/data/nyc_taxi`.
Запасной интерфейс — JupyterLab на `http://localhost:8888`. Файлы ноутбуков общие,
а ядра и переменные Python отдельные. Перед переходом сохрани ноутбук и останови
его ядро. Подключение с удалённой машины описано в
[техническом reference](./docs/stack_reference.md#vs-code-в-браузере).
Ноутбуки берут адрес кластера из
[`spark/spark-defaults.conf`](./spark/spark-defaults.conf). Если изменил его,
перезапусти ядро и заново создай Spark-сессию. Повторный запуск ячейки с
`getOrCreate()` использует текущую сессию. При перезапуске ядра переменные Python
сбрасываются, а учебные таблицы и файлы сохраняются.
## Базовая диагностика
### Посмотреть список контейнеров
```bash
docker compose ps
```
### Посмотреть логи конкретного сервиса
```bash
docker compose logs -f spark-master
docker compose logs -f trino
docker compose logs -f minio
docker compose logs -f jupyter
docker compose logs -f ide
```
### Типовые первые проверки
- Ошибка скачивания образа или зависимостей: найди имя недоступного источника
в сообщении и открой [диагностику сети](./docs/network_access.md).
- `Spark UI` не открывается: проверь `docker compose ps` и логи `spark-master`.
- `Trino UI` не открывается: проверь `docker compose ps` и логи `trino`.
- `JupyterLab` не открывается: проверь `docker compose ps` и логи `jupyter`.
- VS Code не открывается: проверь `docker compose ps ide` и логи `ide`.
- Вместо ноутбука ошибка webview/service worker: открой `http://localhost:8889`
в отдельной вкладке, без IP сервера и без встраивания в другой сайт.
- Ядро не выбирается: убедись, что рабочая область доверенная, и выбери
`/usr/bin/python3` в **Python Environments**. Для подробностей открой
**View → Output → Jupyter**.
- `MinIO Console` не открывается: проверь `docker compose ps` и логи `minio`.
- smoke test падает из ноутбука: сначала убедись, что `spark-master` и worker-ы видны в `Spark UI`.
## Restart и reset
### Мягкий перезапуск стенда
```bash
docker compose down
docker compose up -d
```
### Полный reset с удалением данных
```bash
docker compose down -v
docker compose up -d
```
Используй полный reset, если хочешь пройти практику заново с чистого состояния.
## Подготовка учебного датасета (перед Модулем 3)
Перед `notebooks/03_raw_ingest_and_first_read.ipynb` нужно заранее скачать учебный data bundle на хост, а не изнутри ноутбука.
Скачай каноническое учебное подмножество `NYC TLC Yellow Taxi Trip Records`:
```bash
curl -fLo data/nyc_taxi/yellow_tripdata_2024-01.parquet \
https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2024-01.parquet
curl -fLo data/nyc_taxi/yellow_tripdata_2024-02.parquet \
https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2024-02.parquet
curl -fLo data/nyc_taxi/yellow_tripdata_2024-03.parquet \
https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2024-03.parquet
curl -fLo data/nyc_taxi/taxi_zone_lookup.csv \
https://d37ci6vzurychx.cloudfront.net/misc/taxi_zone_lookup.csv
```
Проверь, что файлы на месте:
```bash
ls -lh data/nyc_taxi/
```
Минимальный набор для курса:
- `yellow_tripdata_2024-01.parquet`
- `yellow_tripdata_2024-02.parquet`
- `yellow_tripdata_2024-03.parquet`
- `taxi_zone_lookup.csv`
Если хочешь расширенный режим, можешь скачать все 12 месяцев `2024`, но основной маршрут курса и примеры опираются на первые 3 месяца.
## Подключение DBeaver к Trino (перед Модулем 6)
- Зачем: в Модуле 6 можно работать с Trino через DBeaver параллельно с ноутбуком — привычный SQL-интерфейс.
- Предусловие: DBeaver установлен (ссылка на [dbeaver.io/download](https://dbeaver.io/download/)). Необязателен — ноутбук работает без DBeaver.
- Шаги: New Database Connection -> Trino. Host: `localhost`. Port: `8090`. Database/Catalog: `lakehouse`. Username: любая строка (напр. `student`). Password: пусто. Test Connection -> Finish.
- Проверка: `SHOW SCHEMAS FROM lakehouse;`. Ожидаем: `bronze`, `default`, `information_schema`, `silver`.
- Troubleshooting: стенд поднят? контейнер `trino` Up? порт 8090 свободен?
## Что делать дальше
- пройти `notebooks/01_environment_and_smoke_test.ipynb`;
- пройти `notebooks/02_lakehouse_mental_model.ipynb`;
- подготовить data bundle по инструкции выше и пройти `notebooks/03_raw_ingest_and_first_read.ipynb`;
- свериться с программой курса в `docs/course_program.md`;
- после прохождения первых модулей переходить к следующим учебным материалам.