Puedes leer todo sin registrarte. Solo crearemos un perfil anónimo cuando decidas guardar tu progreso.
Professional
Spark UI, Query Profile y system tables
Combina señales de ejecución, plataforma y datos para reducir el tiempo de diagnóstico.
- Localizar cuellos en Spark UI y Query Profile
- Consultar historial de Jobs y auditoría
- Usar CLI y REST para automatizar diagnóstico
01Modelo mentalSpark UI: jobs, stages y executors
Lee Spark UI de arriba abajo: job, stage, task y executor, manteniendo una hipótesis que conecte tiempo con datos y recursos.
+
Spark UI: jobs, stages y executors
Lee Spark UI de arriba abajo: job, stage, task y executor, manteniendo una hipótesis que conecte tiempo con datos y recursos.
- Objetivo
- Lee Spark UI de arriba abajo: job, stage, task y executor, manteniendo una hipótesis que conecte tiempo con datos y recursos.
- Duración estimada
- 17 min aprox.
- Dificultad
- Professional
- Prerrequisitos
- m25
Spark UI es la herramienta de detalle para compute clásico. Empieza por la timeline y el job más largo, entra en su stage crítico y compara tareas. Scheduling delay señala falta de slots o overhead; shuffle read/write muestra movimiento; spill, GC y duración extrema orientan a memoria o skew. Los executors permiten comprobar si el trabajo se distribuyó y si hubo pérdidas.
No conviertas cada métrica en una receta. Un stage con 90 % de tiempo en una tarea no mejora con más workers; una etapa I/O-bound puede necesitar mejor layout o pruning. Conserva IDs de job, stage y run, captura percentiles y anota el plan o commit analizado para que otra persona reproduzca el diagnóstico.
Modelo mental
Spark UI es una reconstrucción causal de una ejecución. Un job nace de una acción; cada job contiene stages separados por exchanges; cada stage ejecuta tareas equivalentes sobre particiones; los executors aportan procesos, memoria y cores. Leer de arriba abajo evita saltar a una métrica llamativa sin contexto. Primero se identifica el camino crítico, después la etapa dominante, luego la distribución por tarea y finalmente el recurso que explica esa distribución. El plan SQL conecta esas métricas con operadores y datos de negocio. Una hipótesis completa suena así: este join produce un shuffle, una clave concentra bytes, cinco tareas derraman a disco y determinan la duración. No basta decir que el clúster está lento.
Conjunto de tareas que pueden ejecutarse sin un nuevo shuffle y comparten el mismo plan físico local.
Sitúa la frontera donde cambian distribución y dependencia, permitiendo localizar el camino crítico.Ejecución concreta de una tarea, incluida una repetición tras fallo o especulación.
Mezclar intentos puede inflar métricas y ocultar que la fiabilidad, no el volumen, causa el tiempo.Cadena de etapas y tareas que determina el tiempo mínimo de finalización del job.
Optimizar trabajo paralelo fuera de esa cadena puede no mejorar el SLA.spark.sparkContext.setJobGroup(
"daily-margin-2026-07-21",
"Daily margin aggregation · release 4f2c9ab",
)
result = build_daily_margin(spark.table("prod.silver.order_lines"))
result.write.mode("overwrite").saveAsTable("prod.gold.daily_margin")El job group facilita localizar la ejecución correcta; no registres secretos ni datos personales en la descripción.
Puntos clave
- Navega desde la duración global hasta la tarea que explica el cuello.
- Correlaciona tiempo, bytes, registros, spill y ejecutor.
- Guarda identificadores y baseline para reproducibilidad.
Evita
- Mirar sólo la página Executors y perder la etapa concreta que causa el problema.
- Comparar una ejecución fría con otra caliente sin registrar caché y volumen.
Recuerdo activo
¿Qué vista usarías para demostrar que cinco tareas concentran el shuffle de una etapa?
Borrador privado · solo en este navegador02ImplementaciónQuery Profile y operadores
Usa Query Profile para serverless y SQL warehouses, separando cola, planificación, pruning y ejecución por operador.
+
Query Profile y operadores
Usa Query Profile para serverless y SQL warehouses, separando cola, planificación, pruning y ejecución por operador.
- Objetivo
- Usa Query Profile para serverless y SQL warehouses, separando cola, planificación, pruning y ejecución por operador.
- Duración estimada
- 17 min aprox.
- Dificultad
- Professional
- Prerrequisitos
- m25
Query Profile visualiza el DAG de operadores y métricas como filas, tiempo, memoria y I/O. El resumen distingue wall-clock de task time agregado: el segundo puede ser mayor porque suma trabajo paralelo. Los top operators revelan scans completos, joins explosivos y agregaciones caras; los indicadores de pruning muestran si el layout evita leer datos irrelevantes.
En serverless no hay Spark UI, por lo que Query Profile y query history son la ruta principal. Una consulta servida desde cache puede no disponer de perfil; cambia de forma inocua la consulta para una medición controlada. Usa CAN MONITOR en el warehouse o propiedad de la consulta, y concede acceso al mínimo grupo operativo necesario.
Modelo mental
Query Profile es el mapa de tiempo y movimiento de una consulta en compute administrado. La latencia total se descompone en cola, preparación y ejecución; dentro de la ejecución, cada operador consume filas, bytes, CPU y tiempo y produce otros. Esa separación es esencial: escalar un warehouse no arregla una expresión ineficiente si el cuello está en ejecución, y reescribir SQL no elimina una cola causada por concurrencia. El perfil permite seguir el flujo desde scan y pruning hasta joins, aggregations y write, observar Photon y detectar explosiones de cardinalidad. El operador con más tiempo no siempre es la causa original: puede procesar el exceso generado por un join anterior.
Intervalo en que una consulta espera capacidad antes de comenzar su ejecución.
Se corrige con concurrencia y capacidad, no necesariamente cambiando el SQL.Aumento inesperado de filas provocado por joins no únicos, explode u otra operación multiplicativa.
Hace costosos todos los operadores posteriores y puede apuntar a un error de semántica.Identificador único de una ejecución de sentencia en el historial de consultas.
Une evidencia de system tables, interfaz, alertas y diagnóstico reproducible.-- incident: INC-2041 | variant: filtered-before-join
WITH recent_orders AS (
SELECT order_id, customer_id, net_amount
FROM prod.gold.orders
WHERE order_date >= current_date() - INTERVAL 7 DAYS
)
SELECT c.segment, SUM(o.net_amount) AS revenue
FROM recent_orders o
JOIN prod.gold.customers c USING (customer_id)
GROUP BY c.segment;Guarda statement ID, variante y ventana de datos; compara las mismas métricas y concurrencia.
Puntos clave
- Wall-clock y task time agregado miden fenómenos distintos.
- Top operators y DAG localizan el operador dominante.
- Pruning e I/O validan layout mejor que una sensación de rapidez.
Evita
- Interpretar task time agregado como duración percibida por el usuario.
- Optimizar el operador más vistoso sin comprobar si está en la ruta crítica.
Recuerdo activo
¿Por qué task time puede superar wall-clock?
Borrador privado · solo en este navegador03OperaciónSystem tables de workflows
Convierte system tables en una línea de tiempo común para consultas, jobs, compute y coste a escala de cuenta y región.
+
System tables de workflows
Convierte system tables en una línea de tiempo común para consultas, jobs, compute y coste a escala de cuenta y región.
- Objetivo
- Convierte system tables en una línea de tiempo común para consultas, jobs, compute y coste a escala de cuenta y región.
- Duración estimada
- 17 min aprox.
- Dificultad
- Professional
- Prerrequisitos
- m25
`system.query.history` registra statements de SQL warehouses y serverless con estado, duración, compute y métricas. `system.lakeflow.job_run_timeline` y `job_task_run_timeline` permiten analizar ejecuciones y tareas de jobs; `system.billing.usage` aporta consumo. Estas tablas son regionales en gran parte, tienen retenciones documentadas y están gobernadas por Unity Catalog.
Construye vistas restringidas para equipos en vez de conceder acceso amplio al catálogo `system`. Une usando IDs de job/run/statement disponibles y conserva intervalos temporales; no fuerces joins cuando la fuente no emite un identificador común. Una línea de tiempo fiable diferencia fallo de compute, cola, ejecución lenta y reintento posterior.
Modelo mental
Las system tables son el plano histórico de observabilidad de la cuenta. Cada esquema registra una perspectiva: billing describe consumo, query history sentencias, lakeflow jobs y tasks, compute configuraciones, access auditoría y lineage relaciones inferidas. Ninguna tabla cuenta por sí sola el incidente completo. El trabajo conceptual consiste en construir una línea de tiempo con identificadores, región y granularidad compatibles, y aceptar que algunas relaciones son opcionales o parciales. Son datos sensibles y gobernados dentro del catálogo system, con retención y disponibilidad propias. Una consulta selectiva por tiempo y workspace protege rendimiento; copiar todo fuera de la plataforma amplía superficie de riesgo y suele ser innecesario.
Unidad que representa cada fila, como uso horario, sentencia, tarea, evento o relación de linaje.
Unir granos incompatibles sin agregación duplica métricas y produce conclusiones falsas.Cobertura limitada a eventos o recursos de una región, a diferencia de tablas globales de cuenta.
Explica ausencias y obliga a consultar o consolidar regiones de forma explícita.Historial de versiones de atributos de una entidad a lo largo del tiempo.
Permite asociar un run con la configuración de compute vigente entonces, no con la actual.SELECT
workspace_id,
statement_id,
executed_by,
execution_status,
total_duration_ms,
compute.type AS compute_type,
error_message
FROM system.query.history
WHERE start_time >= current_timestamp() - INTERVAL 24 HOURS
AND (execution_status = 'FAILED' OR total_duration_ms > 600000)
ORDER BY start_time DESC;Expón esta información mediante una vista que filtre workspaces o equipos; los mensajes pueden contener detalles sensibles.
Puntos clave
- Respeta ámbito regional y retención de cada system table.
- Concede `USE` y `SELECT` mediante vistas de mínimo privilegio.
- Correlaciona por IDs y tiempo, declarando lag y huecos de telemetría.
Evita
- Asumir que una consulta desde otra región aparecerá en el metastore consultado.
- Dar `SELECT` amplio sobre auditoría y query history a todo el workspace.
Recuerdo activo
¿Por qué una vista dinámica es preferible a compartir directamente `system.query.history`?
Borrador privado · solo en este navegador04DiagnósticoEvent logs y cluster logs
Escoge event logs, driver logs o executor logs según el fallo y entiende cómo modo de acceso y retención limitan la investigación.
+
Event logs y cluster logs
Escoge event logs, driver logs o executor logs según el fallo y entiende cómo modo de acceso y retención limitan la investigación.
- Objetivo
- Escoge event logs, driver logs o executor logs según el fallo y entiende cómo modo de acceso y retención limitan la investigación.
- Duración estimada
- 17 min aprox.
- Dificultad
- Professional
- Prerrequisitos
- m25
El compute event log explica creación, cambios, escalado y terminación. Driver stdout/stderr/log4j contiene excepciones de planificación y aplicación; los worker/executor logs ayudan cuando una tarea concreta falla. Spark UI conserva detalle del runtime activo, pero reiniciar compute puede perder la vista histórica; configura entrega de logs cuando la política de soporte exige retención externa.
El acceso depende del modo de compute. En standard, los usuarios no ven todos los logs de executor y sólo admins acceden a ciertos driver logs; en dedicated, el principal asignado obtiene más visibilidad. No registres payloads, secretos o tokens para facilitar depuración. Usa correlation IDs y métricas estructuradas que permitan unir el fallo con job/run sin exponer datos.
Modelo mental
Los logs se eligen por frontera de fallo. El event log de Spark describe eventos estructurados de aplicación y permite reconstruir jobs, stages y executors; el driver log contiene coordinación, stack traces del proceso principal y salida de usuario; el executor log contiene fallos dentro de tareas y procesos distribuidos. Mirar el archivo equivocado produce silencio o ruido. El modo de acceso determina quién puede ver logs y la retención local puede terminar al cerrar compute, por lo que incidentes críticos requieren entrega gobernada. Un log no es una fuente inocua: puede incluir rutas, parámetros, consultas o datos, así que permisos y redacción forman parte de observabilidad.
Secuencia estructurada de eventos de una aplicación usada para reconstruir su ejecución y Spark UI.
Permite análisis posterior aunque el compute ya no exista, si se configuró persistencia adecuada.Salida y errores del proceso que planifica, coordina y ejecuta código local de la aplicación.
Es la fuente para fallos de inicialización, planificación, librerías del driver y recopilación de resultados.Salida y excepciones de los procesos que ejecutan tareas sobre particiones distribuidas.
Localiza errores dependientes de datos, memoria o entorno que sólo ocurren en ciertos workers.import json
import logging
logger = logging.getLogger("orders_pipeline")
logger.setLevel(logging.INFO)
logger.info(json.dumps({
"event": "quality_gate_completed",
"run_id": dbutils.widgets.get("run_id"),
"table": "prod.silver.orders",
"invalid_rows": invalid_count,
"contains_customer_data": False,
}))Evita imprimir registros fallidos completos; guarda muestras sensibles sólo en una cuarentena gobernada.
Puntos clave
- Event log describe ciclo de vida; driver logs, aplicación; executor logs, tareas concretas.
- Planifica retención antes del incidente.
- El modo de acceso condiciona quién puede investigar cada señal.
Evita
- Reiniciar compute antes de capturar evidencia que no tiene entrega persistente.
- Añadir `print(df.collect())` y filtrar datos personales a logs operativos.
Recuerdo activo
El compute no llegó a iniciar la aplicación. ¿Qué revisarías antes que los executor logs?
Borrador privado · solo en este navegador05Decisión de diseñoCLI, REST APIs y automatización
Automatiza una captura mínima con CLI y APIs, manteniendo autenticación segura, paginación y trazabilidad de cada artefacto.
+
CLI, REST APIs y automatización
Automatiza una captura mínima con CLI y APIs, manteniendo autenticación segura, paginación y trazabilidad de cada artefacto.
- Objetivo
- Automatiza una captura mínima con CLI y APIs, manteniendo autenticación segura, paginación y trazabilidad de cada artefacto.
- Duración estimada
- 17 min aprox.
- Dificultad
- Professional
- Prerrequisitos
- m25
La CLI ofrece comandos `jobs get-run`, `get-run-output`, `list-runs` y `repair-run`; el grupo `api` sirve para endpoints aún no envueltos. Una captura de incidente debe conservar run ID, estado, timestamps, configuración efectiva y enlaces a perfiles, no ejecutar reparaciones en el mismo paso. Usa OAuth para automatización y perfiles separados, nunca tokens pegados en scripts o notebooks.
Las respuestas pueden paginarse y algunos outputs de tareas tienen límites. Diseña el script como lectura idempotente, almacena JSON en un volumen gobernado con retención y redacta campos sensibles. Después de formular una hipótesis, la reparación se convierte en una acción aprobada con evidencia antes/después.
Modelo mental
Una captura de diagnóstico automatizada debe ser una caja negra mínima, no una copia indiscriminada de la cuenta. Parte de un identificador de incidente y un intervalo, obtiene metadatos reproducibles mediante CLI o REST, sigue paginación y registra qué petición produjo cada artefacto. La autenticación representa una identidad de servicio con privilegios mínimos; el token nunca se imprime ni se almacena junto a la evidencia. Las APIs son eventualmente consistentes, versionadas y sujetas a límites, por lo que reintentos con backoff y marcadores de página son parte del mecanismo. El objetivo es preservar contexto suficiente para reconstruir la causa sin ampliar innecesariamente exposición de consultas, usuarios o datos.
División de una colección API en respuestas enlazadas mediante tokens, offsets o indicadores de continuación.
No recorrer todas las páginas crea diagnósticos incompletos y sesga recuentos o timelines.Espera creciente y ligeramente aleatoria antes de repetir errores transitorios.
Reduce presión sobre el servicio y evita que múltiples clientes reintenten simultáneamente.Índice que registra origen, tiempo, parámetros y checksum de cada artefacto capturado.
Aporta trazabilidad e integridad sin depender de nombres de archivo informales.databricks jobs get-run 987654321 --output json > run-987654321.json
databricks jobs get-run-output 987654321 --output json > output-987654321.json
# Inspecciona antes de cualquier repair-run.
# La autenticación procede de OAuth o de un perfil seguro, no del script.Guarda los ficheros en un destino gobernado y aplica redacción si el output contiene parámetros sensibles.
Puntos clave
- Separa captura read-only de acciones de reparación.
- Usa OAuth/service principal y perfiles de entorno.
- Gestiona paginación, límites y redacción de datos sensibles.
Evita
- Ejecutar `repair-run` automáticamente al detectar cualquier fallo y borrar la evidencia causal.
- Guardar un PAT junto al script de diagnóstico o en el historial del shell.
Recuerdo activo