web-dev-qa-db-fra.com

carte hadoop réduire le tri secondaire

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

21
user1585111

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

16
Deepika C P

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.

Composite Key

Avec la clé composite à l'écart, examinons maintenant le mécanisme de tri secondaire

Secondary Sorting Steps

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

enter image description here

44
Sudarshan

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.

15
P. B. M.

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.

1
Raghavi Ravi

Les exemples mentionnés ci-dessus ont une bonne explication, laissez-moi le simplifier. Nous devons effectuer trois étapes principales.

  1. Mapout devrait être (clé + valeur, valeur)
  2. Lorsque nous avons rejoint Key & Value. Nous devons néanmoins disposer d’un mécanisme permettant de trier la clé originale ainsi que la valeur. Nous ajouterons donc un comparateur personnalisé.
  3. Maintenant, les données sont triées sur la clé d'origine, mais si nous envoyons ces données au réducteur, cela ne garantira pas d'envoyer toute la valeur d'une clé donnée à un réducteur, car nous utilisons Key + Value comme clé. Pour nous en assurer, nous ajouterions un comparateur de groupe.
0
abhay