2012-02-29 11 views
6

Quando eseguo il mio lavoro Hadoop ricevo il seguente errore:errore insolito Hadoop - compiti vengono uccisi da soli

Richiesta ricevuta per uccidere compito 'attempt_201202230353_23186_r_000004_0' dall'utente Task è stato KILLED_UNCLEAN dall'utente

I registri sembrano essere puliti. Corro 28 riduttori, e questo non succede per tutti i riduttori. Succede per pochi selezionati e il riduttore ricomincia. Non riesco a capire questo. Un'altra cosa che ho notato è che per un piccolo set di dati, raramente vedo questo errore!

+0

Il processo non funziona a causa di questo problema? Sei in esecuzione con l'esecuzione speculativa abilitata? –

+0

Sì, l'esecuzione speculativa è impostata su true. Il lavoro non fallisce, alla fine finisce con un sacco di riduzioni kiiled/falliti che nel complesso aumentano il tempo di completamento del lavoro! – RFT

+0

@Pradeep Gollakota Inoltre, ho notato che i riduttori che vengono uccisi o falliti una volta continuano a essere uccisi come 8-9 volte finché non riescono e i riduttori che non vengono uccisi neanche una volta sono puliti per tutto il lavoro! – RFT

risposta

1

Si può provare a utilizzare il contatore (contatore hadoop) nella logica di riduzione? Sembra che Hadoop non sia in grado di determinare se il tuo programma di riduzione è in esecuzione o sospeso. Aspetta alcuni minuti e lo uccide, anche se la tua logica potrebbe essere ancora in esecuzione.

4

ci sono tre cose da provare:

Impostazione di un contatore
Se Hadoop vede un contatore per il lavoro di progredire allora non ucciderlo (. Vedi risposta di Arockiaraj Durairaj) Questo sembra essere il più elegante in quanto potrebbe consentire di approfondire la conoscenza dei lavori di lunga durata e potrebbero esserci rotture.

Timeout di attività più lunghi
Il timeout dei lavori Hadoop è di 10 minuti in base all'impostazione predefinita. Cambiare il timeout è in qualche modo una forza bruta, ma potrebbe funzionare. Immagina di analizzare file audio che sono generalmente file da 5MB (canzoni), ma hai alcuni file da 50MB (intero album). Hadoop memorizza un singolo file per blocco. Quindi, se la dimensione del blocco HDFS è 64 MB, un file da 5 MB e un file da 50 MB richiederebbero entrambi 1 blocco (64 MB) (vedere qui http://blog.cloudera.com/blog/2009/02/the-small-files-problem/ e qui Small files and HDFS blocks). Tuttavia, il lavoro da 5 MB verrebbe eseguito più rapidamente del lavoro da 50 MB. Task timeout può essere aumentato nel codice (mapred.task.timeout) per il lavoro per le risposte a questa domanda simile: How to fix "Task attempt_201104251139_0295_r_000006_0 failed to report status for 600 seconds."

Aumento Task tentativi
Configura Hadoop per rendere più dei 4 tentativi di default (vedi Pradeep La risposta di Gollakota). Questo è il metodo di forza più bruto dei tre. Hadoop tenterà il lavoro più volte, ma potresti mascherare un problema sottostante (piccoli server, grandi blocchi di dati, ecc.).

Problemi correlati