2016-02-22 13 views
5

Ho un lavoro MR in cui la fase shuffle dura troppo a lungo.La fase shuffle dura troppo a lungo. Hadoop

All'inizio ho pensato che fosse perché sto emettendo un sacco di dati da Mapper (circa 5 GB). Quindi ho risolto il problema aggiungendo un Combiner, emettendo quindi meno dati su Reducer. Dopo quel periodo di mescolanza non si accorcia, come pensavo.

La mia prossima idea era eliminare Combiner, combinandolo in Mapper stesso. L'idea che ho ottenuto da here, dove dice che i dati devono essere serializzati/deserializzati per usare Combiner. Purtroppo la fase shuffle è sempre la stessa.

Il mio unico pensiero è che può essere perché sto usando un singolo riduttore. Ma questo non dovrebbe essere un caso dato che non sto emettendo molti dati quando uso Combiner o la combinazione in Mapper.

Qui sono le mie statistiche:

enter image description here

Ecco tutti i contatori per il mio Hadoop (filati) lavoro:

enter image description here

Vorrei anche aggiungere che questo viene eseguito su un piccolo gruppo di 4 macchine. Ciascuno ha 8 GB di RAM (2 GB riservati) e il numero di core virtuali è 12 (2 riservati).

enter image description here

Questi sono macchine virtuali. All'inizio erano tutti su una singola unità, ma poi li ho separati 2-2 su due unità. Quindi inizialmente condividevano l'HDD, ora ci sono due macchine per disco. Tra loro c'è una rete gigabit.

E qui sono Altre statistiche:

memoria intera è occupata

enter image description here

CPU è costantemente sotto pressione, mentre il processo viene eseguito (l'immagine mostra CPU per due esecuzioni consecutive di stesso lavoro)

enter image description here

La mia domanda è - perché è tempo di riordino così grande e ho per ripararlo? Inoltre, non capisco come non ci sia stata alcuna accelerazione anche se ho ridotto drasticamente la quantità di dati emessi da Mapper?

+0

difficile dire senza ottenere altri numeri: qual è l'esatta dimensione dell'output mappa? Quanto è grande il collegamento di rete tra il tuo server (larghezza di banda)? è possibile utilizzare più di un riduttore singolo (evitando così un possibile collo di bottiglia della larghezza di banda)? –

+0

Grazie per il tuo commento, ho modificato la mia domanda. Non ho davvero idea del perché sarebbe così lento. Ho sviluppato principalmente su una singola macchina, quindi sto imparando a eseguire i lavori su cluster, ma non vedo alcun motivo per questo problema. Sarebbe molto difficile (se non impossibile) dividere il riduttore, ma il fatto è che non vedo lavoro per questo. – Marko

+0

difficile dire perché ci vuole così tanto tempo per 5mb, qualcosa di insolito che si può vedere in ambari? come una CPU pegged? puoi andare ai registri del contenitore di riduzione e trovare qualcosa? –

risposta

0

alcune osservazioni:

  1. Per un lavoro di 30 minuti, il tempo di GC è troppo alta (Prova riutilizzando oggetti piuttosto la creazione di uno nuovo per ogni chiamata in mappa()/Riduzione() metodo)
  2. La durata media della mappa è TOOOOO alta, 16 minuti cosa stai facendo nella tua mappa?
  3. La memoria YARN è del 99%, ciò significa che si stanno eseguendo troppi servizi sul cluster HDP e che la RAM non è sufficiente per supportare questi numerosi servizi.
  4. Si prega di aumentare la memoria del contenitore YAN, si prega di fornire almeno 1 GB.
  5. Questo appare come un problema GC + grappolo overscheduled
Problemi correlati