Supponiamo per quanto segue che sia in esecuzione un solo processo Spark in ogni momento.
Quello che ottengo finora
Ecco cosa capisco cosa succede in Spark:
- Quando
SparkContext
viene creato un, ogni nodo di lavoro avvia un esecutore. Gli esecutori sono processi separati (JVM), che si ricollegano al programma del driver. Ogni esecutore ha il barattolo del programma del driver. Abbandonare un driver, spegne gli esecutori. Ogni esecutore può contenere alcune partizioni. - Quando viene eseguito un lavoro, viene creato un piano di esecuzione in base al grafico della discendenza.
- Il lavoro di esecuzione è suddiviso in fasi, in cui le fasi contengono altrettante trasformazioni e azioni vicine (nel grafico del lignaggio), ma nessuna mescolanza. Quindi le fasi sono separate da shuffle.
lo capisco
- Un'attività è un comando inviato dal driver a un esecutore serializzando l'oggetto Function.
- L'esecutore deserializza (con il barattolo del driver) il comando (attività) e lo esegue su una partizione.
ma
Domande)
Come divido il palcoscenico in quei compiti?
In particolare:
- I compiti sono determinati dalle trasformazioni e dalle azioni o possono esserci più trasformazioni / azioni in un compito?
- Le attività sono determinate dalla partizione (ad es. Un'attività per fase per partizione).
- Le attività sono determinate dai nodi (ad es. Un'attività per fase per nodo)?
Cosa penso (solo una risposta parziale, anche se giusta)
In https://0x0fff.com/spark-architecture-shuffle , lo shuffle è spiegato con l'immagine
e ho l'impressione che la regola sia
ogni fase è suddivisa in # numero di partizioni, senza tenere conto del numero di nodi
Per la mia prima immagine direi che avrei 3 attività sulla mappa e 3 attività di riduzione.
Per l'immagine da 0x0fff, direi che ci sono 8 attività sulla mappa e 3 attività di riduzione (supponendo che ci siano solo tre file arancione e tre file verde scuro).
Domande aperte in ogni caso
È corretto? Ma anche se ciò è corretto, le mie domande precedenti non hanno tutte una risposta, perché è ancora aperta, se più operazioni (ad esempio più mappe) sono all'interno di un'attività o sono separate in una attività per operazione.
Quello che dicono gli altri
Che cos'è un'attività in Spark? In che modo il lavoratore Spark esegue il file jar? e In che modo lo schedulatore Apache Spark suddivide i file in attività? sono simili, ma non pensavo che la mia domanda avesse una risposta chiara lì.