Esecuzione di task speculativi Hadoop

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à inizia dall’inizio come quella precedente e lentamente, oppure inizia da dove ha raggiunto l’attività precedente (in tal caso, deve copiare tutti i dati e lo stato intermedio?)

Un problema con il sistema Hadoop è che dividendo le attività su molti nodes, è ansible che alcuni nodes 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à vengono comunque completate correttamente, anche se dopo un periodo di tempo più lungo del previsto. Hadoop non prova a diagnosticare e correggere compiti che rallentano l’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, allora può leggere il suo input a solo il 10% della velocità di tutti gli altri nodes. 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 nodes.

Forzando le attività in modo da essere 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 nodes 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. Puoi disabilitare l’esecuzione speculativa per i mappatori e i riduttori impostando le 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 potresti prendere in considerazione la possibilità di cambiare mapreduce.map.speculative e mapreduce.reduce.speculative .

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

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