Questo documento fornisce una breve panoramica di come Spark gira sui cluster, per facilitare la comprensione dei componenti coinvolti. Leggi la guida alla presentazione delle applicazioniper conoscere l’avvio di applicazioni su un cluster.
Le applicazioni Spark vengono eseguite come insiemi indipendenti di processi su un cluster, coordinati dall’oggetto SparkContext
nel programma principale (chiamato programma driver).
In particolare, per l’esecuzione su un cluster, SparkContext può connettersi a diversi tipi di gestori di cluster(gestore di cluster autonomo di Spark, Mesos o YARN), che allocano risorse acrossapplications. Una volta connesso, Spark acquisisce gli esecutori sui nodi del cluster, che sonoprocessi che eseguono calcoli e memorizzano i dati per l’applicazione.Successivamente, invia il codice dell’applicazione (definito dai file JAR o Python passati a SparkContext) agli esecutori. Infine, SparkContext invia attività agli esecutori per l’esecuzione.
Ci sono diverse cose utili da notare su questa architettura:
- Ogni applicazione ottiene i propri processi executor, che rimangono attivi per la durata dell’intera applicazione ed eseguono attività in più thread. Ciò ha il vantaggio di isolare le applicazionil’una dall’altra, sia sul lato della pianificazione (ogni driver pianifica le proprie attività) che su executorside (attività da diverse applicazioni eseguite in JVM diverse). Tuttavia, significa anche che i dati non possono essere condivisi tra diverse applicazioni Spark (istanze di SparkContext) senza scriverlo in un sistema di archiviazione esterno.
- Spark è agnostico rispetto al gestore cluster sottostante. Finché può acquisire executorprocesses e questi comunicano tra loro, è relativamente facile eseguirlo anche su acluster manager che supporta anche altre applicazioni (ad esempio Mesos/YARN).
- Il programma driver deve ascoltare e accettare le connessioni in entrata dai suoi esecutori durante tutta la sua vita (ad esempio, vedere spark.driver.porta nella configurazione di rete). In quanto tale, il programma driver deve essere networkaddressable dai nodi worker.
- Poiché il driver pianifica le attività sul cluster, dovrebbe essere eseguito vicino ai workernodes, preferibilmente sulla stessa rete locale. Se si desidera inviare richieste a thecluster in remoto, è meglio aprire un RPC al driver e farlo inviare operationsfrom nelle vicinanze piuttosto che eseguire un driver lontano dai nodi di lavoro.
Tipi di gestione cluster
Il sistema supporta attualmente diversi gestori di cluster:
- Standalone-un semplice gestore di cluster incluso con Spark che lo rende facile da configurare un cluster.
- Apache Mesos-un gestore di cluster generale che può anche eseguire Hadoop MapReduce e applicazioni di servizio.
- Hadoop YARN-il gestore delle risorse in Hadoop 2.
- Kubernetes-un sistema open source per automatizzare la distribuzione,il ridimensionamento e la gestione di applicazioni containerizzate.
Esiste un progetto di terze parti (non supportato dal progetto Spark) per aggiungere supporto a forNomad come gestore cluster.
Invio delle domande
Le domande possono essere inviate a un cluster di qualsiasi tipo utilizzando lo script spark-submit
.La guida di presentazione della domanda descrive come fare questo.
Monitoraggio
Ogni programma driver ha un’interfaccia utente Web, in genere sulla porta 4040, che visualizza informazioni su runningtasks, executor e utilizzo dello storage. Basta andare su in un browser web per accedere a questa interfaccia utente. La guida al monitoraggio descrive anche altre opzioni di monitoraggio.
Pianificazione dei lavori
Spark fornisce il controllo sull’allocazione delle risorse sia tra le applicazioni (a livello di clustermanager) che all’interno delle applicazioni (se si verificano più calcoli sullo stesso SparkContext).La panoramica sulla pianificazione dei lavori descrive questo aspetto in modo più dettagliato.
Glossario
La seguente tabella riassume i termini vedrai utilizzato per fare riferimento ai concetti di “cluster”:
Termine | Significato |
---|---|
Applicazione | programma Utente costruita su Scintilla. È costituito da un programma driver ed esecutori sul cluster. |
Application jar | Un jar contenente l’applicazione Spark dell’utente. In alcuni casi gli utenti vorranno creare un “uber jar” contenente la loro applicazione insieme alle sue dipendenze. Il jar dell’utente non dovrebbe mai includere librerie Hadoop o Spark, tuttavia, queste verranno aggiunte in fase di runtime. |
il programma del Driver | Il processo che esegue la funzione main() di applicazione e di creazione di SparkContext |
Cluster manager | Un servizio esterno per l’acquisizione di risorse nel cluster (ad es. autonomo manager, Mesos, FILATI) |
Distribuire la modalità | Distingue in cui il driver processo viene eseguito. In modalità “cluster”, il framework avvia il driver all’interno del cluster. In modalità “client”, il mittente lancia il driver al di fuori del cluster. |
Nodo Worker | Qualsiasi nodo che può eseguire il codice dell’applicazione nel cluster |
Executor | Un processo avviato per un’applicazione su un nodo di lavoro, che esegue attività e mantiene i dati in memoria o su disco su di essi. Ogni applicazione ha i propri esecutori. |
Task | Un’unità di lavoro che verrà inviata a un esecutore |
Job | Un calcolo parallelo costituito da più attività che viene generato in risposta a un’azione Spark (ad esempio save , collect ); vedrai questo termine usato nei registri del conducente. |
Stage | Ogni lavoro viene diviso in serie più piccole di attività chiamate fasi che dipendono l’una dall’altra (simili alle fasi map e reduce in MapReduce); vedrai questo termine usato nei log del driver. |