Skip to content

Arquitectura interna de Spark

Spark distribuye trabajo entre driver y executors. Entender esta arquitectura ayuda a evitar errores de memoria, lentitud y mal uso de collect().

Componentes

mermaid
flowchart LR
  D["Driver"] --> CM["Cluster manager"]
  CM --> E1["Executor 1"]
  CM --> E2["Executor 2"]
  E1 --> T1["Tasks"]
  E2 --> T2["Tasks"]

Driver

El driver crea el plan, coordina jobs y recibe resultados de acciones.

No debe recibir datos enormes con collect().

Executors

Ejecutan tasks y guardan datos cacheados.

Jobs, stages y tasks

Una accion crea un job. El job se divide en stages. Cada stage contiene tasks.

Los shuffles separan stages.

Catalyst y Tungsten

Catalyst optimiza planes logicos. Tungsten optimiza ejecucion fisica y memoria.

Buenas practicas

  • Evita traer datos grandes al driver.
  • Revisa stages en Spark UI.
  • Entiende que shuffle separa stages.
  • Ajusta recursos segun datos, no por intuicion.
  • Prefiere DataFrame API y SQL sobre RDDs para analitica.