Saltar a contenido

JupyterHub

Forma parte del lakehouse (visión general y esquema de interacciones).

La plantilla JupyterHub (categoría Ciencia de datos) da a cada usuario su propio servidor JupyterLab, con un volumen persistente personal e inicio de sesión mediante la cuenta de la plataforma. Quien despliega la instancia es su administrador (/hub/admin).

Campo Función
Imagen de los notebooks, Versión de la imagen Imagen Jupyter de los servidores de usuario (ds/jupyter-datastack por defecto: JupyterLab + clientes Spark Connect, PyIceberg, Trino, MLflow).
CPU máx. por usuario, Memoria máx. por usuario (pestaña Capacidad) 2 núcleos y 4 Gi por defecto, por servidor de usuario.
Almacenamiento por usuario (pestaña Capacidad) 10Gi por defecto. Volumen personal creado en el primer arranque de cada usuario. Fijado en la creación: el redimensionado de los volúmenes de usuario existentes no se hace desde esta interfaz.
Catálogo Apache Iceberg, Trino, Spark Connect, MLflow (pestaña Lakehouse, opcionales) Instancias del mismo namespace que se preconectan en los notebooks (variables de entorno).
Catálogo Iceberg (warehouse) (pestaña Lakehouse) Nombre del catálogo en Polaris, lakehouse por defecto (POLARIS_WAREHOUSE).
Bucket S3 (pestaña Almacenamiento, opcional) Claves S3 expuestas a los notebooks (AWS_*).
Endpoint S3, Región S3, Access Key ID, Secret Access Key (pestaña Almacenamiento) Rellenados por el selector de bucket, modificables después — entrada manual para un S3 externo.

Variables disponibles en cada notebook cuando el servicio correspondiente está configurado:

Variable Contenido
POLARIS_URI, POLARIS_WAREHOUSE, POLARIS_CREDENTIAL, POLARIS_SCOPE Catálogo Iceberg REST y credenciales clientId:clientSecret
TRINO_HOST Coordinador Trino (nombre:8080, acceso interno al namespace)
SPARK_REMOTE, MLFLOW_TRACKING_URI Spark Connect y MLflow (si están desplegados)
AWS_ENDPOINT_URL, AWS_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY Acceso S3 al warehouse

Ejemplo con 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())

Una instancia JupyterHub por namespace

El chart solo admite un JupyterHub por namespace; un segundo despliegue se rechaza con un mensaje explícito. Los servidores de usuario inactivos durante una hora se detienen automáticamente (el volumen personal se conserva).

Eliminación

Eliminar una instancia JupyterHub también retira su cliente OpenID de la plataforma.