L'exécution spéculative peut être activée et désactivée pour les tâches de mappage et réduire les tâches à l'échelle du cluster ou par tâche.
Le spéculateur est instancié dans MRAppMaster
(maître d'application de Map-Reduce). Comme vous l'avez mentionné dans votre question, suivant est le morceau de code en fonction MRAppMaster::serviceInit()
, qui instancie le spéculateur:
if (conf.getBoolean(MRJobConfig.MAP_SPECULATIVE, false)
|| conf.getBoolean(MRJobConfig.REDUCE_SPECULATIVE, false)) {
//optional service to speculate on task attempts' progress
speculator = createSpeculator(conf, context);
addIfService(speculator);
}
Il vérifie l'JobConfig
, pour voir si l'exécution spéculative est activée pour mapper ou réduire les tâches et crée le spéculateur.
Depuis que le spéculateur est créé à l'intérieur du MRAppMaster
, vous pouvez activer votre spéculateur personnalisé pour chaque travail.
Après sont les propriétés d'exécution spéculatives:
- mapreduce.map.speculative: Activer l'exécution spéculative pour les tâches de carte
- mapreduce.reduce.speculative: Activer l'exécution spéculative pour réduire tâches
- yarn.app.mapreduce.am.job.speculator.class: Classe de spéculateur
- yarn.app.mapreduce.am.job.task.estimator.class: Classe de l'estimateur. Ceci est utilisé par le spéculateur pour estimer le temps d'exécution d'une tâche.
merci pour la réponse !! – WilD