Dal laboratorio di Berkeley al top-level Apache
Apache Spark nasce all’interno dell’AMPLab dell’Università di Berkeley come progetto di ricerca per superare i limiti di Hadoop MapReduce nell’elaborazione iterativa di grandi volumi di dati. Nel febbraio 2014 il progetto viene promosso a top-level project della Apache Software Foundation, segnale di maturità e adozione crescente nella comunità Big Data.
L’idea fondante è semplice: se un algoritmo deve attraversare gli stessi dati più volte — come accade nel machine learning, nell’analisi di grafi e nelle query interattive — riscriverli su disco a ogni iterazione è uno spreco. Spark mantiene i dati in memoria RAM tra un’iterazione e l’altra, riducendo drasticamente la latenza.
RDD e trasformazioni lazy
L’astrazione centrale di Spark è il Resilient Distributed Dataset (RDD): una collezione immutabile di elementi partizionata su un cluster e tollerante ai guasti. Gli RDD vengono creati a partire da dati su HDFS, da file locali o da trasformazioni di altri RDD.
Le operazioni sugli RDD si dividono in trasformazioni — come map, filter, flatMap, groupByKey — e azioni — come count, collect, saveAsTextFile. Le trasformazioni sono lazy: non vengono eseguite immediatamente, ma registrate in un grafo aciclico diretto (DAG) di dipendenze. Solo quando viene invocata un’azione, il DAG scheduler di Spark analizza il grafo, lo ottimizza e lo suddivide in stage eseguiti in parallelo sui nodi del cluster.
Questa valutazione lazy permette ottimizzazioni che MapReduce non può effettuare: Spark fonde trasformazioni consecutive, evita shuffle non necessari e pianifica l’esecuzione in modo globale anziché operazione per operazione.
Un framework unificato
Oltre al motore core, Spark integra librerie specializzate nello stesso framework:
- Spark SQL: interrogazione di dati strutturati con sintassi SQL, integrazione con Hive
- MLlib: libreria di machine learning distribuito con algoritmi di classificazione, regressione, clustering e raccomandazione
- GraphX: elaborazione di grafi e calcolo parallelo su strutture a grafo
- Spark Streaming: elaborazione di flussi di dati in micro-batch
Il vantaggio di avere tutto in un unico framework è che i dati possono fluire tra SQL, machine learning e analisi di grafi senza serializzazione intermedia. Per i carichi iterativi, i benchmark mostrano velocità fino a 100 volte superiori rispetto a MapReduce, grazie alla combinazione di esecuzione in-memory e ottimizzazione del DAG.
Link: spark.apache.org
