JupyterHub¶
Fait partie du lakehouse (vue d'ensemble et schéma des interactions).
Le modèle JupyterHub (catégorie Data science) donne à chaque utilisateur son propre serveur JupyterLab, avec un volume persistant personnel et la connexion via le compte de la plateforme. La personne qui déploie l'instance en est administratrice (/hub/admin).
| Champ | Rôle |
|---|---|
| Image des notebooks, Version de l'image | Image Jupyter des serveurs utilisateurs (ds/jupyter-datastack par défaut : JupyterLab + clients Spark Connect, PyIceberg, Trino, MLflow). |
| CPU max par utilisateur, Mémoire max par utilisateur (onglet Capacité) | 2 cœurs et 4 Gi par défaut, par serveur utilisateur. |
| Stockage par utilisateur (onglet Capacité) | 10Gi par défaut. Volume personnel créé au premier démarrage de chaque utilisateur. Fixé à la création : le redimensionnement des volumes utilisateurs existants ne se fait pas depuis cette interface. |
| Catalogue Apache Iceberg, Trino, Spark Connect, MLflow (onglet Lakehouse, optionnels) | Instances du même namespace à pré-câbler dans les notebooks (variables d'environnement). |
| Catalogue Iceberg (warehouse) (onglet Lakehouse) | Nom du catalogue côté Polaris, lakehouse par défaut (POLARIS_WAREHOUSE). |
| Bucket S3 (onglet Stockage, optionnel) | Clés S3 exposées aux notebooks (AWS_*). |
| Endpoint S3, Région S3, Access Key ID, Secret Access Key (onglet Stockage) | Remplis par le sélecteur de bucket, modifiables après coup — saisie manuelle pour un S3 externe. |
Variables disponibles dans chaque notebook quand le service correspondant est renseigné :
| Variable | Contenu |
|---|---|
POLARIS_URI, POLARIS_WAREHOUSE, POLARIS_CREDENTIAL, POLARIS_SCOPE |
Catalogue Iceberg REST et identifiants clientId:clientSecret |
TRINO_HOST |
Coordinateur Trino (nom:8080, accès interne au namespace) |
SPARK_REMOTE, MLFLOW_TRACKING_URI |
Spark Connect et MLflow (si déployés) |
AWS_ENDPOINT_URL, AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY |
Accès S3 au warehouse |
Exemple avec PyIceberg :
import os
from pyiceberg.catalog.rest import RestCatalog
catalog = RestCatalog(
"lakehouse",
uri=os.environ["POLARIS_URI"],
warehouse=os.environ["POLARIS_WAREHOUSE"],
credential=os.environ["POLARIS_CREDENTIAL"],
scope=os.environ["POLARIS_SCOPE"],
**{"s3.endpoint": os.environ["AWS_ENDPOINT_URL"],
"s3.access-key-id": os.environ["AWS_ACCESS_KEY_ID"],
"s3.secret-access-key": os.environ["AWS_SECRET_ACCESS_KEY"]},
)
print(catalog.list_namespaces())
Une instance JupyterHub par namespace
Le chart ne supporte qu'un JupyterHub par namespace ; un second déploiement est refusé avec un message explicite. Les serveurs utilisateurs inactifs depuis une heure sont arrêtés automatiquement (le volume personnel est conservé).
Suppression¶
Supprimer une instance JupyterHub retire aussi son client OpenID de la plateforme.