web-dev-qa-db-fra.com

Exécution de tâche spéculative Hadoop

Dans le document MapReduce de Google, ils ont une tâche de sauvegarde, je pense que c'est la même chose avec la tâche spéculative dans Hadoop. Comment la tâche spéculative est-elle mise en œuvre? Lorsque je démarre une tâche spéculative, la tâche commence-t-elle depuis le début comme la plus ancienne et la plus lente, ou commence-t-elle simplement à partir de l'endroit où la tâche la plus ancienne a atteint (dans l'affirmative, doit-elle copier tous les états et données intermédiaires?)

30
lil

Un problème avec le système Hadoop est qu'en divisant les tâches sur plusieurs nœuds, il est possible pour quelques nœuds lents de limiter le taux du 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 toujours avec succès, mais après un temps plus long que prévu. Hadoop n'essaie pas de diagnostiquer et de corriger les tâches à exécution lente; au lieu de cela, il essaie de détecter lorsqu'une tâche s'exécute 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 possède 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 de carte sont déjà terminées, le système attend toujours que la tâche de carte finale soit enregistrée, ce qui prend beaucoup plus de temps que tous les autres nœuds.

En forçant les tâches à s'exécuter indépendamment les unes des autres, les tâches individuelles ne savent pas d'où viennent leurs entrées. Les tâches font confiance à la plate-forme Hadoop pour fournir simplement les données appropriées. Par conséquent, la même entrée peut être traitée plusieurs fois en parallèle, pour exploiter les différences de capacités de la machine. Comme la plupart des tâches d'un travail arrivent à leur terme, la plate-forme Hadoop planifiera des copies redondantes des tâches restantes sur plusieurs nœuds qui n'ont pas d'autre travail à effectuer. Ce processus est appelé exécution spéculative. Une fois les tâches terminées, ils annoncent ce fait au JobTracker. Quelle que soit la copie d'une tâche terminée, elle 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 la part du mappeur qui a réussi, en premier.

L'exécution spéculative est activée par défaut. Vous pouvez désactiver l'exécution spéculative pour les mappeurs et les réducteurs en définissant le mapred.map.tasks.speculative.execution et mapred.reduce.tasks.speculative.execution Options JobConf sur false, respectivement en utilisant l'ancienne API, tandis qu'avec la nouvelle API, vous pouvez envisager de modifier mapreduce.map.speculative et mapreduce.reduce.speculative.

Donc, pour répondre à votre question, cela recommence et n'a rien à voir avec ce que l'autre tâche a fait/terminé.

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

71
Amar