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.
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
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_
Étape 1) Copiez le fichier zip à l'emplacement de votre choix
Étape 2) Décompressez le fichier Zip
sudo tar -xvf MapReduceJoin.tar.gz
Étape 3) Allez dans le répertoire MapReduceJoin/
cd MapReduceJoin/
Étape 4) Démarrer Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
É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 /
É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
É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
Les résultats peuvent également être consultés via une interface Web comme-
Sélectionnez maintenant 'Parcourir le système de fichiers' et naviguez jusqu'à /output_mapreducejoin
Open pièce-r-00000
Les résultats sont affichés
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
- 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.
- 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.