2015-09-17 2 views
0

Cette question est en quelque sorte liée à mon autre question Hadoop handling data skew in reducer. Cependant, je voudrais demander si certains paramètres de configuration sont disponibles pour que, si disons, la mémoire du réducteur maximum soit atteinte, puis générer un nouveau réducteur sur un autre datanode avec les données restantes dans le contexte? Ou peut-être même sur le même datanode pour que certains x enregistrements du contexte soient lus dans la méthode de réduction jusqu'à une certaine limite et que les autres soient lus dans un nouveau réducteur?Split entrée à un réducteur dans hadoop

Répondre

0

Ce n'est pas possible. Le nombre de réducteurs est fixé dans la configuration du pilote.

1

Vous pouvez essayer un combineur qui réduirait la charge de travail d'un seul réducteur gérant plus de paires valeur/clé en effectuant une agrégation avant de passer au réducteur. Si vous faites une jointure, vous pouvez essayer skewed join dans Pig. Cela implique deux tâches MR. Dans un premier temps, MR effectue un échantillonnage sur une entrée et si elle trouve une clé qui est tellement inclinée pour qu'elle puisse entrer dans la mémoire, elle divise cette clé en plusieurs réducteurs. Pour les autres enregistrements que celui identifié dans l'exemple, il effectue une jointure par défaut. Pour l'entrée asymétrique, il duplique l'entrée et l'envoie aux deux réducteurs.

1

Il n'est pas possible de générer un nouveau réducteur auxiliaire pour équilibrer la charge sur le travail. Vous pouvez plutôt choisir un autre élément clé de vos enregistrements, ce qui aidera à mélanger les données même à travers les réducteurs. Sinon, en option, vous pouvez étendre les paramètres de mémoire du réducteur existant pour accepter plus d'enregistrements mélangés et accélérer le tri/la fusion. S'il vous plaît se référer les propriétés ci-dessous,

mapreduce.reduce.memory.mb 

mapreduce.reduce.java.opts 

mapreduce.reduce.merge.inmem.threshold 

mapreduce.reduce.shuffle.input.buffer.percent 

mapreduce.reduce.shuffle.merge.percent 

mapreduce.reduce.input.buffer.percent 

je me souvienne, il y avait une bibliothèque de MapReduce étendu, skewtune, écrit à équilibrer la charge biais de données au cours de l'exécution du travail. Mais je n'ai jamais expérimenté cela, veuillez vérifier si c'est utile.