web-dev-qa-db-fra.com

Quand commence la réduction des tâches dans Hadoop?

Dans Hadoop, quand commence la réduction des tâches? Commencent-ils après un certain pourcentage (seuil) de mappeurs terminé? Si oui, ce seuil est-il fixé? Quel type de seuil est généralement utilisé?

80
Slayer

La phase de réduction comprend 3 étapes: mélanger, trier, réduire. Shuffle est l'endroit où les données sont collectées par le réducteur de chaque mappeur. Cela peut se produire lorsque les mappeurs génèrent des données, car il ne s'agit que d'un transfert de données. D'un autre côté, le tri et la réduction ne peuvent démarrer qu'une fois tous les mappeurs terminés. Vous pouvez savoir ce que MapReduce fait en regardant le pourcentage d'achèvement du réducteur: 0-33% signifie qu'il fait un shuffle, 34-66% est tri, 67% -100% est réduit. C'est pourquoi vos réducteurs sembleront parfois "bloqués" à 33% - il attend la fin des mappeurs.

Les réducteurs commencent à mélanger en fonction d'un seuil de pourcentage de mappeurs qui ont terminé. Vous pouvez modifier le paramètre pour que les réducteurs démarrent tôt ou tard.

Pourquoi le démarrage précoce des réducteurs est-il une bonne chose? Parce qu'il répartit le transfert de données des mappeurs vers les réducteurs au fil du temps, ce qui est une bonne chose si votre réseau est le goulot d'étranglement.

Pourquoi le démarrage précoce des réducteurs est-il une mauvaise chose? Parce qu'ils "monopolisent" les emplacements réduits tout en ne copiant que les données et en attendant la fin des mappeurs. Un autre travail qui démarre plus tard et qui utilisera réellement les emplacements réduits ne peut plus les utiliser.

Vous pouvez personnaliser le démarrage du réducteur en modifiant la valeur par défaut de mapred.reduce.slowstart.completed.maps dans mapred-site.xml. Une valeur de 1.00 attendra la fin de tous les mappeurs avant de démarrer les réducteurs. Une valeur de 0.0 démarrera immédiatement les réducteurs. Une valeur de 0.5 démarrera les réducteurs lorsque la moitié des mappeurs seront terminés. Vous pouvez également modifier mapred.reduce.slowstart.completed.maps au cas par cas. Dans les nouvelles versions de Hadoop (au moins 2.4.1), le paramètre est appelé est mapreduce.job.reduce.slowstart.completedmaps (merci l'utilisateur yegor256).

En règle générale, j'aime garder mapred.reduce.slowstart.completed.maps au dessus de 0.9 si le système a déjà plusieurs travaux en cours d'exécution à la fois. De cette façon, le travail ne monopolise pas les réducteurs lorsqu'ils ne font rien d'autre que copier des données. Si vous n'avez jamais exécuté qu'un seul travail à la fois, faites 0.1 serait probablement approprié.

199
Donald Miner

La phase de réduction peut commencer bien avant l'appel d'un réducteur. Dès que "un" mappeur termine le travail, les données générées subissent un tri et un brassage (qui inclut l'appel au combineur et au partitionneur). La "phase" du réducteur se déclenche au moment où le traitement des données post-mappeur démarre. Au fur et à mesure que ces traitements sont effectués, vous verrez des progrès dans le pourcentage de réducteurs. Cependant, aucun des réducteurs n'a encore été appelé. Selon le nombre de processeurs disponibles/utilisés, la nature des données et le nombre de réducteurs attendus, vous souhaiterez peut-être modifier le paramètre comme décrit par @ Donald-miner ci-dessus.

4
javadevg

Autant que je sache, réduire la phase de démarrage avec la phase de carte et continuer à consommer l'enregistrement des cartes. Cependant, comme il y a une phase de tri et de mélange après la phase de mappage, toutes les sorties doivent être triées et envoyées au réducteur. Donc, logiquement, vous pouvez imaginer que la réduction de la phase ne démarre qu'après la phase de la carte, mais en fait, pour des raisons de performances, les réducteurs sont également initialisés avec les mappeurs.

1
Animesh Raj Jha

Le pourcentage affiché pour la phase de réduction correspond en fait à la quantité de données copiées de la sortie des cartes vers les répertoires d'entrée des réducteurs. Pour savoir quand commence cette copie? C'est une configuration que vous pouvez définir comme Donald l'a montré ci-dessus. Une fois que toutes les données sont copiées dans les réducteurs (c.-à-d. 100% de réduction), c'est à ce moment-là que les réducteurs commencent à fonctionner et peuvent donc geler en "100% de réduction" si votre code de réducteurs est gourmand en E/S ou en CPU.

0
Maha

Réduisez les démarrages uniquement après que tous les mappeurs ont pêché là-bas, Reducer doit communiquer avec tous les mappeurs afin qu'il doive attendre que le dernier mappeur ait terminé sa tâche.Cependant, le mappeur commence à transférer des données au moment où il a terminé sa tâche.

0
Abhishek