Arquitectura de Spark y RDDs
Apache Spark se basa en un modelo distribuido donde el trabajo se divide entre varios procesos. Entender su arquitectura ayuda a escribir aplicaciones más eficientes y a diagnosticar problemas.
Conceptos clave
- Driver: proceso principal que coordina la aplicación.
- Executor: proceso que ejecuta tareas en los nodos.
- Cluster manager: sistema que asigna recursos.
- Job: trabajo generado por una acción.
- Stage: conjunto de tareas que pueden ejecutarse sin shuffle.
- Task: unidad mínima de ejecución.
- RDD: colección distribuida e inmutable.
Arquitectura básica
txt
Driver -> Cluster Manager -> Executors -> TasksEl driver crea el plan de ejecución, solicita recursos y coordina tareas. Los executors procesan particiones de datos y devuelven resultados.
RDDs
Un RDD es una colección distribuida, tolerante a fallos e inmutable.
python
datos = sc.parallelize([1, 2, 3, 4, 5])
resultado = datos.map(lambda x: x * 2).collect()Transformaciones y acciones
Las transformaciones son perezosas: no se ejecutan hasta que aparece una acción.
python
rdd = sc.textFile("/data/logs.txt")
errores = rdd.filter(lambda linea: "ERROR" in linea)
total = errores.count()Particiones
Spark divide los datos en particiones. El número de particiones influye en paralelismo y rendimiento.
python
rdd = sc.textFile("/data/logs.txt", minPartitions=8)Buenas prácticas
- Usa DataFrames cuando no necesites control de bajo nivel.
- Evita
collect()sobre datasets grandes. - Revisa particiones antes de operaciones pesadas.
- Cachea solo datos que se reutilizan.
- Minimiza shuffles innecesarios.
Errores comunes
- Ejecutar
collect()con demasiados datos. - Confundir transformaciones con acciones.
- No entender cuándo se dispara un job.
- Usar RDDs para tareas que DataFrames resuelven mejor.
Chuleta rápida
txt
Driver = coordina
Executor = ejecuta
RDD = datos distribuidos
Transformation = lazy
Action = ejecuta job
Shuffle = redistribución costosa