Aller au contenu

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.