2013-03-01 24 views
24

Nel documento MapReduce di Google, hanno un'attività di backup, penso che sia la stessa cosa con attività speculative in Hadoop. Come viene implementato il compito speculativo? Quando avvii un'attività speculativa, l'attività parte dall'inizio come la più vecchia e lentamente, oppure inizia da dove ha raggiunto l'attività meno recente (in tal caso, deve copiare tutti i dati e lo stato intermedio?)Esecuzione task speculare Hadoop

+0

Aggiungendo alla domanda, quello che sarebbe stato l'elenco dei motivi se si dovesse disattivare l'esecuzione dell'attività speculativa del tutto a livello di tutto il sistema? quali benefici sono stati ottenuti quando l'esecuzione speculativa è stata disabilitata. –

risposta

58

Un problema con il sistema Hadoop è che dividendo le attività su molti nodi, è possibile che alcuni nodi lenti limitino il resto del programma.

Le attività potrebbero essere lente per vari motivi, tra cui la degradazione dell'hardware o la configurazione errata del software, ma le cause potrebbero essere difficili da rilevare poiché le attività continuano comunque correttamente, anche se dopo un periodo di tempo più lungo del previsto. Hadoop non prova a diagnosticare e correggere compiti a bassa esecuzione; al contrario, tenta di rilevare quando un'attività viene eseguita più lentamente del previsto e avvia un'altra attività equivalente come backup. Si parla di esecuzione speculativa di compiti.

Ad esempio, se un nodo ha un controller di disco lento, può leggere il suo input solo al 10% della velocità di tutti gli altri nodi. Pertanto, quando 99 attività della mappa sono già state completate, il sistema attende ancora l'attività della mappa finale per il check-in, operazione che richiede molto più tempo rispetto a tutti gli altri nodi.

Forzando le attività in modo che siano isolate l'una dall'altra, le singole attività non sanno da dove provengono i loro input. Le attività si affidano alla piattaforma Hadoop per fornire il giusto input. Pertanto, lo stesso input può essere elaborato più volte in parallelo, per sfruttare le differenze nelle capacità della macchina. Poiché la maggior parte delle attività in un lavoro sta per concludersi, la piattaforma Hadoop pianificherà copie ridondanti delle attività rimanenti su diversi nodi che non hanno altro lavoro da eseguire. Questo processo è noto come esecuzione speculativa. Al completamento delle attività, annunciano questo fatto al JobTracker. Qualunque copia di un'attività finisce prima diventa la copia definitiva. Se altre copie sono state eseguite in modo speculativo, Hadoop dice a TaskTrackers di abbandonare le attività e scartare le loro uscite. I Reducers ricevono quindi i loro input da qualunque Mapper completato con successo, prima.

L'esecuzione speculativa è abilitata per impostazione predefinita. È possibile disabilitare l'esecuzione speculativa per i mapper ei riduttori impostando le opzioni mapred.map.tasks.speculative.execution e mapred.reduce.tasks.speculative.execution JobConf su false, utilizzando rispettivamente l'API vecchia, mentre con l'API più recente è possibile prendere in considerazione la modifica di mapreduce.map.speculative e mapreduce.reduce.speculative.

Quindi, per rispondere alla tua domanda, ricomincia da capo e non ha nulla a che vedere con quanto l'altro compito ha svolto/completato.

Riferimento: http://developer.yahoo.com/hadoop/tutorial/module4.html

+3

Credo che 'mapreduce.map.speculative' e' mapreduce.reduce.speculative' siano i nuovi equivalenti a 'mapred.map.tasks.speculative.execution' e' mapred.reduce.tasks.speculative.execution', rispettivamente. –

Problemi correlati