2013-03-01 4 views
24

Dans l'article MapReduce de Google, ils ont une tâche de sauvegarde, je pense que c'est la même chose avec une tâche spéculative dans Hadoop. Comment la tâche spéculative est-elle mise en œuvre? Lorsque je lance une tâche spéculative, la tâche commence-t-elle dès le début comme étant la plus ancienne et lente, ou commence-t-elle simplement à partir de l'ancienne tâche (si oui, doit-elle copier tout le statut intermédiaire?)Hadoop exécution de la tâche spéculative

+0

Ajoutant à la question, ce qui aurait été la liste des raisons si vous deviez désactiver l'exécution de la tâche spéculative tout à fait au niveau de l'ensemble du système? quels avantages ont été obtenus lorsque l'exécution spéculative a été désactivée. –

Répondre

58

Un problème avec le système Hadoop est qu'en divisant les tâches entre plusieurs nœuds, il est possible que quelques nœuds lents limitent le reste du programme.

Les tâches peuvent être lentes pour diverses raisons, notamment la dégradation du matériel ou une mauvaise configuration logicielle, mais les causes peuvent être difficiles à détecter car les tâches se terminent bien, mais après un délai plus long que prévu. Hadoop n'essaie pas de diagnostiquer et de réparer les tâches à exécution lente; à la place, il tente de détecter quand une tâche est exécutée plus lentement que prévu et lance une autre tâche équivalente en tant que sauvegarde. C'est ce qu'on appelle l'exécution spéculative de tâches. Par exemple, si un nœud a un contrôleur de disque lent, il peut lire son entrée à seulement 10% de la vitesse de tous les autres nœuds. Ainsi, lorsque 99 tâches cartographiques sont déjà terminées, le système attend toujours la fin de la tâche cartographique, ce qui prend beaucoup plus de temps que tous les autres nœuds.

En forçant des tâches à s'exécuter isolément les unes des autres, les tâches individuelles ne savent pas d'où proviennent leurs entrées. Les tâches font confiance à la plate-forme Hadoop pour fournir les informations appropriées. Par conséquent, la même entrée peut être traitée plusieurs fois en parallèle, afin d'exploiter les différences dans les capacités de la machine. Comme la plupart des tâches d'un travail arrivent à leur terme, la plateforme Hadoop planifie des copies redondantes des tâches restantes sur plusieurs nœuds qui n'ont pas d'autre travail à effectuer. Ce processus est connu sous le nom d'exécution spéculative. Lorsque les tâches sont terminées, ils annoncent ce fait au JobTracker. Quelle que soit la copie d'une tâche terminée en premier devient la copie définitive. Si d'autres copies s'exécutaient de manière spéculative, Hadoop dit aux TaskTrackers d'abandonner les tâches et de rejeter leurs sorties. Les Réducteurs reçoivent ensuite leurs entrées de n'importe quel Mappeur terminé avec succès, d'abord.

L'exécution spéculative est activée par défaut. Vous pouvez désactiver l'exécution spéculative pour les mappeurs et réducteurs en définissant les options mapred.map.tasks.speculative.execution et mapred.reduce.tasks.speculative.execution JobConf sur false, respectivement à l'aide de l'ancienne API, tandis qu'avec une API plus récente, vous pouvez envisager de modifier mapreduce.map.speculative et mapreduce.reduce.speculative. Donc, pour répondre à votre question, ça recommence et ça n'a rien à voir avec ce que l'autre tâche a fait/achevé.

Référence: http://developer.yahoo.com/hadoop/tutorial/module4.html

+3

Je crois que 'mapreduce.map.speculative' et' mapreduce.reduce.speculative' sont les nouveaux équivalents de 'mapred.map.tasks.speculative.execution' et' mapred.reduce.tasks.speculative.execution', respectivement. –

Questions connexes