- Зачем: - нужен воспроизводимый вход в курс и единое место хранения планов по модулям. - Что: - добавлены `plans/README.md`, living plan Модуля 1, `START_HERE.md` и канонический ноутбук `01_environment_and_smoke_test.ipynb`, а `cluster_smoke.py` расширен до reusable helper и CLI smoke test. - уточнены onboarding-материалы и окружение: добавлены Spark UI в `README.md`, ресурсы хоста и креды MinIO в `START_HERE.md`, использован `NB_GID` в `jupyter/Dockerfile`, в ноутбуке усилены самостоятельные задания и добавлены `cell id`, а пояснения в `cluster_smoke.py` переведены на русский для студентов. - обновлены `README.md`, `AGENTS.md` и archive howto, удалены устаревшие `spark-basic-test.ipynb` и `03_partitioning_and_schema_evolution.ipynb`. - Проверка: - `python3 -m py_compile src/spark/cluster_smoke.py src/spark/__init__.py`. - `docker compose build spark-master` и `docker compose build jupyter`. - `docker compose up -d`, `docker compose exec jupyter python3 -c "from spark.cluster_smoke import create_spark_session, run_cluster_smoke; spark=create_spark_session(app_name='module-01-validation'); print(run_cluster_smoke(spark)); spark.stop()"` и `docker compose exec jupyter jupyter nbconvert --to notebook --execute /opt/work/01_environment_and_smoke_test.ipynb --output-dir /tmp --output module1-validation-2.ipynb`.
30 lines
898 B
Docker
Executable File
30 lines
898 B
Docker
Executable File
# Берем за основу контейнер, приготовленный для spark в spark/Dockerfile
|
|
FROM de-spark-iceberg:3.5.1
|
|
|
|
USER root
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Только JupyterLab, без дополнительных пакетов
|
|
RUN pip3 install --no-cache-dir "jupyterlab==4.2.5"
|
|
|
|
# Создаём непривилегированного пользователя
|
|
ARG NB_USER=jovyan
|
|
ARG NB_UID=1000
|
|
ARG NB_GID=100
|
|
|
|
RUN if ! getent group ${NB_GID} >/dev/null; then groupadd --gid ${NB_GID} ${NB_USER}; fi \
|
|
&& useradd --uid ${NB_UID} --gid ${NB_GID} -m -s /bin/bash ${NB_USER} \
|
|
&& mkdir -p /opt/work \
|
|
&& chown -R ${NB_UID}:${NB_GID} /opt/work
|
|
|
|
USER ${NB_UID}:${NB_GID}
|
|
WORKDIR /opt/work
|
|
EXPOSE 8888
|
|
|
|
CMD ["jupyter", "lab", \
|
|
"--ip=0.0.0.0", \
|
|
"--port=8888", \
|
|
"--no-browser", \
|
|
"--NotebookApp.token=", \
|
|
"--NotebookApp.password="]
|