Hadoop MapReduce Join & Counter avec exemple

Qu’est-ce que Rejoindre dans Mapreduce ?

Rejoindre Mapreduce L’opération est utilisée pour combiner deux grands ensembles de données. Cependant, ce processus implique l'écriture de beaucoup de code pour effectuer l'opération de jointure proprement dite. La jointure de deux ensembles de données commence par comparer la taille de chaque ensemble de données. Si un ensemble de données est plus petit que l’autre, un ensemble de données plus petit est distribué à chaque nœud de données du cluster.

Une fois qu'une jointure dans MapReduce est distribuée, Mapper ou Réducteur utilise le plus petit ensemble de données pour effectuer une recherche d'enregistrements correspondants à partir du grand ensemble de données, puis combine ces enregistrements pour former des enregistrements de sortie.

Types de jointure

En fonction de l'endroit où la jointure réelle est effectuée, les jointures dans Hadoop sont classées en :

1. Jointure côté carte – Lorsque la jointure est effectuée par le mappeur, elle est appelée jointure côté carte. Dans ce type, la jointure est effectuée avant que les données ne soient réellement consommées par la fonction map. Il est obligatoire que l'entrée de chaque carte se présente sous la forme d'une partition et soit dans un ordre trié. De plus, il doit y avoir un nombre égal de partitions et elles doivent être triées par clé de jointure.

2. Jointure côté réduction – Lorsque la jointure est effectuée par le réducteur, elle est appelée jointure côté réduction. Il n'est pas nécessaire dans cette jointure d'avoir un ensemble de données sous une forme structurée (ou partitionnée).

Ici, le traitement côté carte émet la clé de jointure et les tuples correspondants des deux tables. Suite à ce traitement, tous les tuples avec la même clé de jointure tombent dans le même réducteur qui joint ensuite les enregistrements avec la même clé de jointure.

Un flux de processus global de jointures dans Hadoop est représenté dans le diagramme ci-dessous.

Types de jointures dans Hadoop MapReduce
Types de jointures dans Hadoop MapReduce

Comment joindre deux ensembles de données : exemple MapReduce

Il existe deux ensembles de données dans deux fichiers différents (illustrés ci-dessous). Le Key Dept_ID est commun dans les deux fichiers. Le but est d'utiliser MapReduce Join pour combiner ces fichiers

Exemple de MapReduce
fichier 1
Exemple de MapReduce
fichier 2

Entrées : L'ensemble de données d'entrée est un fichier txt, DeptName.txt & DepStrength.txt

Téléchargez les fichiers d'entrée à partir d'ici

Assurez-vous que Hadoop est installé. Avant de commencer avec l'exemple de processus réel MapReduce Join, remplacez l'utilisateur par « hduser » (identifiant utilisé lors de la configuration Hadoop, vous pouvez passer à l'ID utilisateur utilisé lors de votre configuration Hadoop).

su - hduser_

Exemple de MapReduce

Étape 1) Copiez le fichier zip à l'emplacement de votre choix

Exemple de MapReduce

Étape 2) Décompressez le fichier Zip

sudo tar -xvf MapReduceJoin.tar.gz

Exemple de MapReduce

Étape 3) Allez dans le répertoire MapReduceJoin/

cd MapReduceJoin/

Exemple de MapReduce

Étape 4) Démarrer Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Exemple de MapReduce

Étape 5) DeptStrength.txt et DeptName.txt sont les fichiers d'entrée utilisés pour cet exemple de programme MapReduce Join.

Ces fichiers doivent être copiés sur HDFS à l'aide de la commande ci-dessous :

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /

Exemple de MapReduce

Étape 6) Exécutez le programme en utilisant la commande ci-dessous-

$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin

Exemple de MapReduce

Exemple de MapReduce

Étape 7) Après l'exécution, le fichier de sortie (nommé 'part-00000') sera stocké dans le répertoire /output_mapreducejoin sur HDFS

Les résultats peuvent être vus à l'aide de l'interface de ligne de commande

$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000

Exemple de MapReduce

Les résultats peuvent également être consultés via une interface Web comme-

Exemple de MapReduce

Sélectionnez maintenant 'Parcourir le système de fichiers' et naviguez jusqu'à /output_mapreducejoin

Exemple de MapReduce

Open pièce-r-00000

Exemple de MapReduce

Les résultats sont affichés

Exemple de MapReduce

NOTE: Veuillez noter qu'avant d'exécuter ce programme la prochaine fois, vous devrez supprimer le répertoire de sortie /output_mapreducejoin

$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin

L'alternative consiste à utiliser un nom différent pour le répertoire de sortie.

Qu’est-ce que le compteur dans MapReduce ?

A Compteur dans MapReduce est un mécanisme utilisé pour collecter et mesurer des informations statistiques sur les tâches et les événements MapReduce. Les compteurs gardent la trace de diverses statistiques de tâches dans MapReduce, comme le nombre d'opérations effectuées et la progression de l'opération. Les compteurs sont utilisés pour le diagnostic des problèmes dans MapReduce.

Les compteurs Hadoop sont similaires à l'insertion d'un message de journal dans le code d'une carte ou d'une réduction. Ces informations peuvent être utiles pour diagnostiquer un problème dans le traitement des tâches MapReduce.

Généralement, ces compteurs dans Hadoop sont définis dans un programme (mappage ou réduction) et sont incrémentés lors de l'exécution lorsqu'un événement ou une condition particulière (spécifique à ce compteur) se produit. Une très bonne application des compteurs Hadoop consiste à suivre les enregistrements valides et invalides à partir d'un ensemble de données d'entrée.

Types de compteurs MapReduce

Il existe essentiellement 2 types de MapReduce Meubles traiteur

  1. Compteurs Hadoop intégrés :Il existe des compteurs Hadoop intégrés par tâche. Vous trouverez ci-dessous les groupes de compteurs intégrés.
    • Compteurs de tâches MapReduce – Collecte des informations spécifiques à la tâche (par exemple, le nombre d'enregistrements d'entrée) pendant son temps d'exécution.
    • Compteurs du système de fichiers – Collecte des informations telles que le nombre d’octets lus ou écrits par une tâche
    • Compteurs FileInputFormat - Collecte des informations sur un certain nombre d'octets lus via FileInputFormat
    • Compteurs FileOutputFormat – Collecte des informations sur un certain nombre d'octets écrits via FileOutputFormat
    • Compteurs d'emplois – Ces compteurs sont utilisés par JobTracker. Les statistiques collectées par eux incluent, par exemple, le nombre de tâches lancées pour un travail.
  2. Compteurs définis par l'utilisateur

En plus des compteurs intégrés, un utilisateur peut définir ses propres compteurs en utilisant des fonctionnalités similaires fournies par langages de programmation. Par exemple, dans Java 'enum' est utilisé pour définir les compteurs définis par l'utilisateur.

Exemple de compteurs

Un exemple de MapClass avec des compteurs pour compter le nombre de valeurs manquantes et invalides. Fichier de données d'entrée utilisé dans ce tutoriel Notre ensemble de données d'entrée est un fichier CSV, VentesJan2009.csv

public static class MapClass
            extends MapReduceBase
            implements Mapper<LongWritable, Text, Text, Text>
{
    static enum SalesCounters { MISSING, INVALID };
    public void map ( LongWritable key, Text value,
                 OutputCollector<Text, Text> output,
                 Reporter reporter) throws IOException
    {
        
        //Input string is split using ',' and stored in 'fields' array
        String fields[] = value.toString().split(",", -20);
        //Value at 4th index is country. It is stored in 'country' variable
        String country = fields[4];
        
        //Value at 8th index is sales data. It is stored in 'sales' variable
        String sales = fields[8];
      
        if (country.length() == 0) {
            reporter.incrCounter(SalesCounters.MISSING, 1);
        } else if (sales.startsWith("\"")) {
            reporter.incrCounter(SalesCounters.INVALID, 1);
        } else {
            output.collect(new Text(country), new Text(sales + ",1"));
        }
    }
}

L'extrait de code ci-dessus montre un exemple d'implémentation de compteurs dans Hadoop Map Reduction.

Ici, Compteurs de ventes est un compteur défini en utilisant 'énumération'. On s'en sert pour compter DISPARU ou INVALIDE enregistrements d’entrée.

Dans l'extrait de code, si 'pays' le champ a une longueur nulle alors sa valeur est manquante et donc le compteur correspondant SalesCounters.MANQUANT est incrémenté.

Ensuite, si 'ventes' le champ commence par un " alors l'enregistrement est considéré comme INVALIDE. Ceci est indiqué par l'incrémentation du compteur SalesCounters.INVALIDE.