apache-airflow-providers-notebook¶
SparkNotebookOperator draait een Jupyter-notebook als een geplande, cluster-mode Spark-job: het checkt een notebook uit een git-repository uit, dient een SparkApplication custom resource in (onder de motorkap via SparkKubernetesOperator/SparkKubernetesSensor), en de resulterende driver-pod draait het notebook via papermill_runner.py tegen dezelfde platform-image en Hive Metastore catalog die interactieve JupyterHub-sessies gebruiken.
Gebruik¶
from airflow.providers.notebook.operators.spark_notebook import (
SparkNotebookOperator,
)
run_notebook = SparkNotebookOperator(
task_id="run_notebook",
repo_url="https://dev.azure.com/<org>/<project>/_git/example-dags",
repo_branch="main",
notebook_path="open_data_notebook.ipynb",
notebook_parameters='{"a": 1}', # optional, passed to papermill
# + optional driver/executor sizing knobs, extra_spark_conf
)
Alles voorbij task_id/repo_url/repo_branch/notebook_path is bewust geen parameter die vanuit een DAG in te stellen is. Het publieke oppervlak van de operator is agressief geminimaliseerd, zodat een DAG-auteur niet per ongeluk kan afwijken van hoe het platform daadwerkelijk is gedeployed. In plaats daarvan:
Instelling |
Bron |
|---|---|
Container-image |
Env var |
Kubernetes-namespace |
Automatisch gedetecteerd uit de ServiceAccount-projectie van de pod — nooit vanuit de DAG in te stellen |
Spark-versie, Hive Metastore-connectie, checkout-image, |
Hardgecodeerde module-constanten, één per Airflow-deploymentversie |
Delta Lake warehouse dir / S3A-endpoint |
Env vars |
S3A access/secret key |
Een vaste Kubernetes Secret-naam ( |
Git checkout-credentials |
De Airflow-connectie |
Zowel de taak-pod die de SparkApplication indient als de resulterende driver-pod draaien onder het namespace-gebonden spark-driver-ServiceAccount van de klant, dezelfde identiteit die een JupyterHub-notebookkernel in client mode gebruikt. De Airflow-instantie van een klant heeft geen breder bereik in het cluster dan dat.
Vereisten voor de Airflow-deployment¶
Iedereen die Airflow met deze provider deployt moet ervoor zorgen, in de namespace waarin de workers van Airflow draaien:
Drie env vars ingesteld op de Airflow-deployment:
DATAPROCESSING_IMAGE,LAKE_WAREHOUSE_DIR,CUBEFS_S3_ENDPOINT.Een Kubernetes Secret genaamd
cubefs-lakehouse-credentialsmet de keysCUBEFS_ACCESS_KEY/CUBEFS_SECRET_KEY.Het
spark-driver-ServiceAccount met RBAC opsparkapplicationsensparkapplications/status(een aparte sub-resource).Een Airflow-connectie
git_default(typegit) met leestoegang tot welkerepo_urleen DAG ook doorgeeft.
Zie de eigen deployment-repo van het platform voor hoe deze worden geprovisioned.