Quelqu'un peut-il m'expliquer comment fonctionne le tri secondaire dans hadoop?
Pourquoi faut-il utiliser GroupingComparator
et comment ça marche dans hadoop?
Je parcourais le lien ci-dessous et j'ai des doutes sur le fonctionnement de Groupcomapator.
Quelqu'un peut-il m'expliquer le fonctionnement du comparateur de regroupement?
http://www.bigdataspeak.com/2013/02/hadoop-how-to-do-secondary-sort-on_25.html
Comparateur de groupement
Une fois que les données ont atteint un réducteur, toutes les données sont regroupées par clé. Puisque nous avons une clé composite, nous devons nous assurer que les enregistrements sont regroupés uniquement par la clé naturelle. Ceci est accompli en écrivant un GroupPartitioner personnalisé. Nous avons un objet Comparateur qui considère uniquement le champ yearMonth de la classe TemperaturePair afin de regrouper les enregistrements.
public class YearMonthGroupingComparator extends WritableComparator {
public YearMonthGroupingComparator() {
super(TemperaturePair.class, true);
}
@Override
public int compare(WritableComparable tp1, WritableComparable tp2) {
TemperaturePair temperaturePair = (TemperaturePair) tp1;
TemperaturePair temperaturePair2 = (TemperaturePair) tp2;
return temperaturePair.getYearMonth().compareTo(temperaturePair2.getYearMonth());
}
}
Voici les résultats de l'exécution de notre travail de tri secondaire:
new-Host-2:sbin bbejeck$ hdfs dfs -cat secondary-sort/part-r-00000
190101 -206
190102 -333
190103 -272
190104 -61
190105 -33
190106 44
190107 72
190108 44
190109 17
190110 -33
190111 -217
190112 -300
Bien que le tri des données par valeur ne soit pas un besoin courant, c’est un bon outil à garder dans votre poche en cas de besoin. Nous avons également pu examiner de plus près le fonctionnement interne de Hadoop en travaillant avec des partitionneurs personnalisés et des partitionneurs de groupe. Reportez-vous également à ce lien ..Quelle est l’utilisation du comparateur de regroupement dans une carte hadoop réduire
Je trouve facile de comprendre certains concepts à l’aide de diagrammes et c’est certainement l’un d’eux.
Supposons que notre tri secondaire repose sur une clé composite composée du nom et du prénom.
Avec la clé composite à l'écart, examinons maintenant le mécanisme de tri secondaire
Le partitionneur et le comparateur de groupe utilisent uniquement clé naturelle. Le partitionneur l'utilise pour canaliser tous les enregistrements avec la même clé naturelle vers un seul réducteur. Ce partitionnement a lieu pendant la phase de mappage, les données provenant de diverses tâches de mappage sont reçues par les réducteurs où elles sont groupées, puis envoyées à la méthode de réduction. C’est dans ce groupe que le comparateur de groupe entre en scène. Si nous avions pas spécifié un comparateur de groupe personnalisé, Hadoop aurait utilisé l’implémentation par défaut, qui aurait pris en compte la totalité de la clé composite, ce qui aurait entraîné des résultats incorrects.
Vue d'ensemble des étapes de la MR
Voici un exemple de regroupement. Considérons une clé composite (a, b)
et sa valeur v
. Et supposons qu'après le tri, vous vous retrouviez, entre autres, avec le groupe suivant de paires (clé, valeur):
(a1, b11) -> v1
(a1, b12) -> v2
(a1, b13) -> v3
Avec le comparateur de groupe par défaut, le framework appellera la fonction reduce
trois fois avec des paires respectives (clé, valeur), car toutes les clés sont différentes. Toutefois, si vous fournissez votre propre comparateur de groupe personnalisé et que vous le définissez de sorte qu'il ne dépende que de a
, en ignorant b
, le framework conclut que toutes les clés de ce groupe sont égales et appelle la fonction de réduction une seule fois à l'aide de la clé suivante et de la touche suivante. liste de valeurs:
(a1, b11) -> <v1, v2, v3>
Notez que seule la première clé composite est utilisée et que b12 et b13 sont "perdus", c'est-à-dire non transmis au réducteur.
Dans l'exemple bien connu du livre "Hadoop" calculant la température maximale par année, a
est l'année et b
sont des températures triées par ordre décroissant. B11 est donc la température maximale souhaitée et vous ne vous souciez pas des autres b
. La fonction de réduction écrit simplement le reçu (a1, b11) comme solution pour cette année.
Dans votre exemple de "bigdataspeak.com", tous les b
sont obligatoires dans le réducteur, mais ils sont disponibles en tant que parties de valeurs (objets) respectives v
.
De cette manière, en incluant votre valeur ou sa partie dans la clé, vous pouvez utiliser Hadoop pour trier non seulement vos clés, mais également vos valeurs.
J'espère que cela t'aides.
Un partitionneur s'assure simplement qu'un réducteur reçoit tous les enregistrements appartenant à une clé, mais cela ne change pas le fait que le réducteur se groupe par clé dans la partition.
En cas de tri secondaire, nous formons des clés composites et si nous laissons le comportement par défaut continuer, la logique de regroupement considérera que les clés sont différentes.
Nous devons donc contrôler le groupement. Par conséquent, nous devons indiquer au cadre de regrouper en fonction de la partie naturelle de la clé plutôt que de la clé composite. Par conséquent, le comparateur de regroupement doit être utilisé pour le même.
Les exemples mentionnés ci-dessus ont une bonne explication, laissez-moi le simplifier. Nous devons effectuer trois étapes principales.