docs(course): make JupyterLab the primary notebook interface

This commit is contained in:
ddadmin committed 2026-10-21 10:22:00 +02:00
1 parent 863d658a5f
commit db8f275ea0
8 files changed
+138 -88

No files matched your search

+23 -16
View File
@@ -17,8 +17,8 @@
Дождись `healthy` у `ide`, `trino` и `postgres-iceberg`. У двух init-контейнеров
нормальное состояние — `Exited (0)`. Повторять сборку перед каждым занятием
не нужно; она понадобится после изменения образов или зависимостей.
3. Открой [VS Code в браузере](http://localhost:8889) и нужный ноутбук.
При запросе ядра выбери **Select Kernel → Python Environments → /usr/bin/python3**.
3. Открой [JupyterLab](http://localhost:8888) и нужный ноутбук в списке файлов слева.
При запросе ядра выбери **Python 3 (ipykernel)**.
4. После остановки стенда переменные Python нужно создать заново: выполни
импорты, создание Spark-сессии и подключений в начале текущего ноутбука.
Сохраненный вывод ячеек может быть виден еще до их запуска.
@@ -30,6 +30,11 @@
Docker volumes подключаются. После переименования папки или запуска с другим
`-p` можно получить новый пустой набор данных вместо предыдущего.
Вместе с JupyterLab доступен [VS Code в браузере](./stack_reference.md#vs-code-в-браузере).
Там же описаны выбор ядра и ограничения совместимости. Перед сменой интерфейса
сохрани файл, выполни `spark.stop()` и останови ядро. Файлы общие, переменные
Python — нет; не редактируй один ноутбук в двух интерфейсах одновременно.
## Как проходить ноутбук
Ноутбук состоит из пояснений и кодовых ячеек. Ядро Python выполняет код и хранит
@@ -38,11 +43,11 @@ Docker volumes подключаются. После переименования
- Прочитай пояснение, запусти ячейку через `Shift+Enter`, дождись окончания и
сравни результат с описанием. Следующая ячейка может использовать предыдущие
переменные, поэтому порядок важен.
- В самостоятельном задании заполни `TODO` и проверь результат. **Run All**
- В самостоятельном задании заполни `TODO` и проверь результат. **Run → Run All Cells**
запускает код, но не выполняет задание за тебя.
- Checkpoint — вопросы и проверки в конце урока. Покажи результат в своем
стенде и объясни его своими словами перед переходом к следующему модулю.
- Сохраняй изменения через **File → Save** (`Ctrl+S`; на macOS — `Cmd+S`).
- Сохраняй изменения через **File → Save Notebook** (`Ctrl+S`; на macOS — `Cmd+S`).
Файл ноутбука вместе с ответами и выводом записывается в `notebooks/` на хосте.
- Перед следующим модулем выполни завершающую ячейку `spark.stop()`, если она
есть; иначе вызови `spark.stop()` после окончания вычислений. Это освобождает
@@ -51,12 +56,13 @@ Docker volumes подключаются. После переименования
Держи одну активную Spark-сессию: если несколько ноутбуков одновременно занимают
все ядра worker-ов, новое задание может ждать ресурсы. Для своих SQL/Python-опытов
можно создать дополнительный ноутбук в папке **Ноутбуки**. `src/`, документация
и конфиги в IDE доступны только для чтения; их меняют в копии репозитория на хосте.
можно создать дополнительный ноутбук через **File → New → Notebook**. Он появится
в `notebooks/` на хосте. Примеры `src/` доступны Python по пути `/opt/src` только
для чтения; документацию и конфиги открывай в копии репозитория на хосте.
### Если нужно перезапустить ядро
Сначала сохрани ноутбук. В верхней панели нажми **Restart** и подтверди перезапуск.
Сначала сохрани ноутбук. Выбери **Kernel → Restart Kernel…** и подтверди перезапуск.
Затем заново выполни импорты и создание Spark-сессии. Переменные Python исчезнут;
файлы и записанные учебные таблицы сохранятся.
@@ -86,12 +92,13 @@ Docker volume — хранилище вне файловой системы ко
| Что | Где находится | После `stop` или `down` без `-v` |
| --- | --- | --- |
| Код, ответы и сохраненный вывод ноутбуков | `notebooks/` на хосте; `/opt/work` и `/opt/course/notebooks` в IDE | Сохраняются |
| Код, ответы и сохраненный вывод ноутбуков | `notebooks/` на хосте; `/opt/work` в JupyterLab | Сохраняются |
| Скачанные Parquet и CSV | `data/nyc_taxi/` на хосте; `/opt/data/nyc_taxi` в контейнере | Сохраняются |
| Raw-файлы, данные и metadata-файлы Iceberg | Бакет `lakehouse`, volume `minio-data` | Сохраняются |
| Записи каталога Iceberg | PostgreSQL, volume `postgres-data` | Сохраняются |
| Переменные Python и живая Spark-сессия | Память процессов | Теряются; создай заново |
| Настройки IDE, доверие рабочей области | Файловая система контейнера `ide` | При `stop` сохраняются; при удалении или пересоздании контейнера могут сброситься |
| Настройки интерфейса JupyterLab | Файловая система контейнера `jupyter` | При `stop` сохраняются; при удалении или пересоздании контейнера могут сброситься |
| Настройки VS Code, доверие рабочей области | Файловая система контейнера `ide` | При `stop` сохраняются; при удалении или пересоздании контейнера могут сброситься |
`docker compose down` удаляет контейнеры и сеть проекта. Именованные volumes
остаются, поэтому после `up -d` таблицы доступны снова. Для обычного окончания
@@ -128,13 +135,13 @@ docker compose up -d
| Образ или зависимость не скачивается | Найди адрес источника и сервис в ошибке | Пройди [диагностику сети](./network_access.md) |
| `port is already allocated` / `address already in use` | Какой порт занят, не запущена ли другая копия стенда? | Освободи нужный порт; [список портов](../START_HERE.md#порты-стенда) |
| Сервис завершился, `unhealthy` или долго `starting` | `docker compose ps -a`, затем `docker compose logs --tail=100 <service>` | Для `postgres-iceberg` используй сервис `postgres`; проверь первую ошибку в логах |
| VS Code не открывается | `docker compose ps -a ide`, логи `ide` | Дождись `healthy`, открой `http://localhost:8889`; для сервера используй [SSH-туннель](./stack_reference.md#vs-code-в-браузере) |
| Ошибка notebook webview / service worker | Адрес в браузере и отдельная вкладка | Открой `http://localhost:8889`, без IP удаленного сервера и без встраивания в другой сайт |
| Не выбирается ядро, нет `pyspark` | Рабочая область доверенная? Выбран `/usr/bin/python3`? | Повтори [выбор ядра](../START_HERE.md#как-работать-с-ноутбуками); детали в **View → Output → Jupyter** |
| JupyterLab не открывается | `docker compose ps -a jupyter`, логи `jupyter` | Открой `http://localhost:8888`; для сервера используй [SSH-туннель](./stack_reference.md#jupyterlab) |
| VS Code не открывает ноутбук или сообщает об ошибке webview / service worker | Адрес `http://localhost:8889`, отдельная вкладка | Проверь [ограничения совместимости](./stack_reference.md#vs-code-в-браузере); продолжи в JupyterLab |
| Не выбирается ядро, нет `pyspark` | Выбрано **Python 3 (ipykernel)** в JupyterLab стенда? | Повтори [выбор ядра](../START_HERE.md#как-работать-с-ноутбуками); проверь логи `jupyter` |
| `NameError`, потерялась переменная | Ядро перезапускалось или выбран другой ноутбук? | Выполни импорты и подготовительные ячейки по порядку |
| Spark долго ждет, `Initial job has not accepted any resources` | В Spark UI два worker-а `ALIVE`? Есть другие приложения в `Running Applications`? | Заверши свою предыдущую сессию через `spark.stop()`; проверь логи worker-ов |
| Ядро умерло, контейнер убит, подозрение на память | `docker stats --no-stream`, лимит памяти Docker/WSL2 | Сверь [системные требования](../START_HERE.md#системные-требования), закрой другие вычисления; одного кода 137 недостаточно для вывода об OOM |
| Ноутбук не сохраняется (`Permission denied`) | Это файл в папке **Ноутбуки**? Совпадает UID? | Проверь `.env` и [настройку прав перед сборкой](../START_HERE.md#быстрый-запуск); после изменения UID/GID повтори `docker compose build`, затем `docker compose up -d` |
| Ноутбук не сохраняется (`Permission denied`) | Это файл из `notebooks/`? Совпадает UID? | Проверь `.env` и [настройку прав перед сборкой](../START_HERE.md#быстрый-запуск); после изменения UID/GID повтори `docker compose build`, затем `docker compose up -d` |
| Нет файлов Taxi или таблицы из прошлого модуля | Файлы в `data/nyc_taxi`, предыдущие модули, прежняя папка проекта | Для raw нужен Модуль 3, для bronze — 4, для silver — 5; после сброса восстанови их по порядку |
### Что передать ментору
@@ -145,9 +152,9 @@ docker compose up -d
```bash
docker compose version
docker compose ps -a
docker compose logs --tail=100 ide
docker compose logs --tail=100 jupyter
```
В последней команде замени `ide` на проблемный сервис, если ошибка в другом компоненте.
Для ошибки ноутбука добавь выбранный путь Python и вывод ячейки. Пароли, токены
В последней команде замени `jupyter` на проблемный сервис, если ошибка в другом компоненте.
Для ошибки ноутбука добавь имя выбранного ядра и вывод ячейки. Пароли, токены
и адреса прокси с учетными данными в сообщение не включай.