2015-06-17 18 views
6

Sto eseguendo un lavoro Spark e sembra che le attività non siano ben distribuite (vedere in allegato). C'è un modo per distribuire le attività in modo più uniforme? Grazie!Le attività di Spark non sembrano essere ben distribuite

enter image description here

+0

U significa distribuire uniformemente i compiti tra gli esecutori o controllare il no delle attività ?? –

+0

Potresti fornire maggiori informazioni sulla tua applicazione e su come la lanci con la scintilla? A prima vista, sembra che il numero di compiti sia equamente distribuito, quindi suppongo che ogni attività abbia un carico di lavoro diverso. Ancora una volta, maggiori informazioni sarebbero buone. –

risposta

0

Penso compito sono equamente distribuiti attraversato lavoratori diversi, perché ogni attività ha un numero di porta diverso nella colonna indirizzo.

0

Solo guardando il tuo screenshot, è abbastanza difficile diagnosticare qualcosa. Tuttavia, ci sono due cose che si può prendere in considerazione:

  • Spark UI (come del 1.3.1, non ho provato a 1.4.0 ancora) sta mostrando solo somma delle statistiche per attività completate. Se hai preso questo screenshot mentre la tua applicazione era in esecuzione, è abbastanza probabile che alcune attività fossero in esecuzione e semplicemente non si sono ancora mostrate nelle statistiche!

  • Su un determinato livello Spark, non è possibile avere più attività della partizione dati. Senza più codice, è difficile da dire, ma si consiglia di utilizzare rdd.partition() la funzione, in genere è possibile utilizzare per generare più rdd.repartition(sparkContext.getConf.getInt("spark.executor.instances", defaultValueInt) partizione prima trasformazione, e quindi lisciare il carico su esecutori

0

Se vogliono equa distribuzione, è possibile utilizzare la funzionalità di partizione della scintilla durante il caricamento di un file in RDD,

val ratings = sc.textFile(File_name,partition) 

Come avete 10 nodi di 2 core ciascuno, allora si può avere 20 valore delle partizioni e allo stesso modo.

0

Dando uno sguardo più da vicino l'immagine pubblicata, posso identificare due fatti principali:

  • Il numero di attività è stato distribuito uniformemente, con una variazione massima di 20 attività.
  • Il tempo di esecuzione assegnato a ciascun executor varia in modo significativo, da 3,0 minuti (~ 80 attività) a 17,0 minuti (~ 60 attività).

Questo mi fa interrogare sulla natura della vostra applicazione. Tutte le attività sono uguali o alcune di esse richiedono più tempo per essere completate rispetto ad altre? Se le attività sono eterogenee, il problema deve essere esaminato con maggiore attenzione. Immaginate il seguente scenario:

  • Numero di attività: 20, in cui ognuno ha bisogno secondi per terminare tranne l'ultimo:

    Task 01: 10 seconds 
    Task 02: 10 seconds 
    Task 03: 10 seconds 
    Task ... 
    Task 20: 120 seconds 
    
  • Numero di esecutori: (ciascuno con un singolo core)

Se dovessimo distribuire uniformemente i compiti, vedremmo che ciascun esecutore dovrebbe elaborare 5 compiti in totale.Tenendo conto che un esecutore è assegnato ai compiti 20 °, che deve 120 secondi per completare, il flusso di esecuzione sarebbe il seguente:

  • Con la seconda 40, ciascun esecutore sarebbe in grado di completare le prime 4 task , considerando che il 20 ° compito è rimasto alla fine.
  • Entro il secondo 50, ogni esecutore ma uno avrà terminato tutti i loro compiti. L'esecutore rimanente calcolerebbe ancora le 20 attività, che completerebbero dopo 120 secondi.

Al termine, l'interfaccia utente mostrerebbe un risultato simile al tuo, con il numero di attività distribuite uniformemente ma non il tempo di elaborazione effettivo.

Executor 01 -> tasks completed: 5 -> time: 0:50 minutes 
Executor 02 -> tasks completed: 5 -> time: 0:50 minutes 
Executor 03 -> tasks completed: 5 -> time: 0:50 minutes 
Executor 04 -> tasks completed: 5 -> time: 2:40 minutes 

Anche se non è la stessa cosa, una cosa simile potrebbe accadere nella vostra situazione.

+2

Esiste una soluzione consigliata per le attività con carico di lavoro irregolare? – sthomps