2012-07-30 9 views
6

Ho paura di non capire i risultati dei tempi di un lavoro di riduzione della mappa. Ad esempio, un lavoro che sto eseguendo mi dà i seguenti risultati dal tracker di lavoro.Cosa significa tempo CPU per un lavoro Hadoop?

finito in: 1mins, 39sec tempo

CPU trascorso (ms) 150.460 152.030 302.490

Le voci nel tempo di CPU trascorso (ms) sono per Map, ridurre e Total, rispettivamente. Ma, allora, come viene misurato il "tempo CPU trascorso" e cosa significa? È questo il tempo totale cumulativo trascorso in ciascuno dei mappatori e riduttori assegnati per il lavoro? E 'possibile misurare altre volte dal framework come il tempo per shuffle, sort, partition etc? Se é cosi, come?

Una seconda domanda che mi dà fastidio. Ho visto alcuni post qui (Link1, Link2), che consigliamo di utilizzare getTime() nella classe del driver:

long start = new Date().getTime(); 
boolean status = job.waitForCompletion(true); 
long end = new Date().getTime(); 
System.out.println("Job took "+(end-start) + "milliseconds"); 

Non è questo a fare quello che la prima voce in uscita Job Tracker fornisce in ogni caso? È necessario? Qual è il modo migliore per cronometrare un job hadoop, specialmente quando voglio time time, tempo di calcolo per nodo/per stage?

+0

si dovrebbero porre domande diverse in diversi post –

risposta

14

La fase della mappa è composta da: lettore di record, mappa, combinatore e partizionatore.

La fase di riduzione consiste in: shuffle, sort, reduce, output.

Il tempo della CPU visualizzato è dell'intera fase della mappa e dell'intera fase di riduzione ... non solo la funzione stessa. Questo è un po 'di terminologia confusa perché hai la funzione mappa e riduci la funzione, che sono solo una parte della mappa fase e riduci la fase. Questo è il tempo totale della CPU su tutti i nodi nel cluster.

Il tempo di CPU è estremamente diverso in tempo reale. Il tempo della CPU è quanto tempo speso per le CPU, mentre il tempo reale è quello che io e te sperimentiamo come umani. Pensa a questo: supponi di avere lo stesso lavoro in esecuzione sugli stessi dati ma su un cluster a 20 nodi, quindi su un cluster a 200 nodi. Nel complesso, verrà utilizzata la stessa quantità di tempo CPU su entrambi i cluster, ma il cluster a 200 nodi verrà eseguito 10 volte più velocemente in tempo reale. Il tempo della CPU è una metrica utile quando si ha un sistema condiviso con molti lavori in esecuzione contemporaneamente.

Non so come approfondiresti per ottenere il tempo di CPU in ciascuna fase. L'uso di un timer per la data non è probabilmente quello che stai cercando.

+0

Grazie. Questo è stato molto utile. – Alps

+0

@donaldminer il tempo della CPU non è lo stesso del tempo che sperimentiamo, specialmente se si tiene conto del numero di nodi. Ma, il tempo di CPU ti dà più informazioni sul consumo di energia. Per quanto ho capito, il tempo della CPU include TUTTE le parti sia dei mappatori che dei riduttori. – Xaero182

+0

Nella mia modalità distrubuted ho visto -> MapReduce Tempo totale CPU cumulativo: 20 minuti 38 secondi 680 msec e Total MapReduce Tempo CPU passato: 20 minuti 25 secondi 980 msec ma in realtà se vedo l'ora effettiva è solo -> Tempo impiegato: 47.769 secondi nel mondo reale. Questo significa che se usiamo lo stesso lavoro, proviamo a correre in un cluster a nodo singolo che impiegherebbe 20 minuti e così .. ?? si prega di suggerire se è giusto !! –