Qu'est-ce que Join dans Mapreduce?
L' opération Mapreduce Join 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 réelle. La jonction 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 ensemble de données, 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 Reducer utilise le plus petit ensemble de données pour effectuer une recherche des enregistrements correspondants du grand ensemble de données, puis combinez ces enregistrements pour former des enregistrements de sortie.
Dans ce didacticiel, vous apprendrez-
- Qu'est-ce qu'une jointure dans MapReduce?
- Types de jointure
- Comment joindre deux DataSets: exemple MapReduce
- Qu'est-ce que Counter dans MapReduce?
- Types de compteurs MapReduce
- Exemple de compteurs
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 de carte. Il est obligatoire que l'entrée de chaque carte soit sous la forme d'une partition et soit dans l'ordre trié. En outre, il doit y avoir un nombre égal de partitions et il doit être trié par la 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. En conséquence de 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 des jointures dans Hadoop est illustré dans le diagramme ci-dessous.
Comment joindre deux DataSets: exemple MapReduce
Il existe deux ensembles de données dans deux fichiers différents (illustrés ci-dessous). La clé Dept_ID est commune aux deux fichiers. Le but est d'utiliser MapReduce Join pour combiner ces fichiers
Entrée: L'ensemble de données d'entrée est un fichier txt, DeptName.txt & DepStrength.txt
Télécharger les fichiers d'entrée à partir d'ici
Assurez-vous que Hadoop est installé. Avant de commencer avec le processus réel de l'exemple MapReduce Join, changez l'utilisateur en 'hduser' (id utilisé lors de la configuration Hadoop, vous pouvez basculer vers 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émarrez 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 en utilisant 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 accédez à / output_mapreducejoin
Pièce ouverte -r-00000
Les résultats sont affichés
REMARQUE: veuillez noter qu'avant d'exécuter ce programme pour 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 Counter dans MapReduce?
Un compteur dans MapReduce est un mécanisme utilisé pour collecter et mesurer des informations statistiques sur les tâches et événements MapReduce. Les compteurs gardent la trace de diverses statistiques de travail dans MapReduce comme le nombre d'opérations survenues 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 à mettre un message de journal dans le code d'une carte ou à réduire. Ces informations peuvent être utiles pour diagnostiquer un problème dans le traitement des tâches MapReduce.
En règle générale, ces compteurs dans Hadoop sont définis dans un programme (mapper ou réduire) 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 non valides à partir d'un ensemble de données d'entrée.
Types de compteurs MapReduce
Il existe essentiellement 2 types de compteurs MapReduce
- Compteurs intégrés Hadoop : il existe des compteurs Hadoop intégrés par tâche. Vous trouverez ci-dessous des groupes de compteurs intégrés
- MapReduce Task Counters - Collecte des informations spécifiques à la tâche (par exemple, le nombre d'enregistrements d'entrée) pendant son temps d'exécution.
- Compteurs FileSystem - Collecte des informations telles que le nombre d'octets lus ou écrits par une tâche
- Compteurs FileInputFormat - Collecte les informations d'un certain nombre d'octets lus via FileInputFormat
- Compteurs FileOutputFormat - Collecte les informations d'un certain nombre d'octets écrits via FileOutputFormat
- Compteurs de travaux - 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 les langages de programmation. Par exemple, en Java, «enum» est utilisé pour définir des compteurs définis par l'utilisateur.
Exemple de compteurs
Un exemple de MapClass avec des compteurs pour compter le nombre de valeurs manquantes et non valides. Fichier de données d'entrée utilisé dans ce didacticiel Notre ensemble de données d'entrée est un fichier CSV, SalesJan2009.csv
public static class MapClassextends MapReduceBaseimplements Mapper{static enum SalesCounters { MISSING, INVALID };public void map ( LongWritable key, Text value,OutputCollector output,Reporter reporter) throws IOException{//Input string is split using ',' and stored in 'fields' arrayString fields[] = value.toString().split(",", -20);//Value at 4th index is country. It is stored in 'country' variableString country = fields[4];//Value at 8th index is sales data. It is stored in 'sales' variableString 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 Reduce.
Ici, SalesCounters est un compteur défini à l'aide de «enum» . Il est utilisé pour compter les enregistrements d'entrée MANQUANTS et INVALIDES .
Dans l'extrait de code, si le champ 'country' a une longueur nulle, sa valeur est manquante et le compteur correspondant SalesCounters.MISSING est donc incrémenté.
Ensuite, si le champ "ventes" commence par ", l'enregistrement est considéré comme INVALIDE. Ceci est indiqué par l'incrémentation du compteur SalesCounters.INVALID.