Dans notre précédent tutoriel Hadoop , nous vous avons fourni une description détaillée de Hadoop Mapper et Réducteur. Maintenant, dans ce blog, nous allons couvrir l'autre composant du processus MapReduce, c'est-à-dire Hadoop InputFormat.
Nous discuterons de ce qu'est InputFormat dans Hadoop, des fonctionnalités fournies par MapReduce InputFormat. Nous aborderons également les types de InputFormat dans MapReduce et comment obtenir les données du mappeur à l'aide de InputFormat.
Qu'est-ce que le format d'entrée Hadoop ?
Format d'entrée Hadoop décrit la spécification d'entrée pour l'exécution de la tâche Map-Reduce.
InputFormat décrit comment diviser et lire les fichiers d'entrée. Dans l'exécution de la tâche MapReduce, InputFormat est la première étape. Il est également chargé de créer les fractionnements d'entrée et de les diviser en enregistrements.
Les fichiers d'entrée stockent les données pour le travail MapReduce. Les fichiers d'entrée résident dans HDFS . Bien que le format de ces fichiers soit arbitraire, nous pouvons également utiliser des fichiers journaux basés sur des lignes et un format binaire. Par conséquent, dans MapReduce, la classe InputFormat est l'une des classes fondamentales qui fournit les fonctionnalités ci-dessous :
- InputFormat sélectionne les fichiers ou autres objets à saisir.
- Il définit également les fractionnements de données. Il définit à la fois la taille des tâches Map individuelles et son serveur d'exécution potentiel.
- Hadoop InputFormat définit le RecordReader. Il est également responsable de la lecture des enregistrements réels à partir des fichiers d'entrée.
Comment obtenons-nous les données de Mapper ?
Les méthodes pour obtenir les données du mappeur sont :getsplits() et createRecordReader() qui sont les suivants :
public abstract class InputFormat{public abstract List getSplits(JobContext context)lance IOException, InterruptedException;public abstract RecordReader createRecordReader(InputSplit split,TaskAttemptContext context) lance IOException,InterruptedException ; } Types de InputFormat dans MapReduce
Il existe différents types de MapReduce InputFormat dans Hadoop qui sont utilisés à des fins différentes. Discutons des types Hadoop InputFormat ci-dessous :
1. Format d'entrée de fichier
C'est la classe de base pour tous les InputFormats basés sur des fichiers. FileInputFormat spécifie également le répertoire d'entrée qui contient l'emplacement des fichiers de données. Lorsque nous démarrons l'exécution d'une tâche MapReduce, FileInputFormat fournit un chemin contenant les fichiers à lire.
Cet InpuFormat lira tous les fichiers. Ensuite, il divise ces fichiers en un ou plusieurs InputSplits.
2. Format d'entrée de texte
C'est le InputFormat par défaut. Ce InputFormat traite chaque ligne de chaque fichier d'entrée comme un enregistrement distinct. Il n'effectue aucune analyse. TextInputFormat est utile pour les données non formatées ou les enregistrements basés sur des lignes comme les fichiers journaux. Par conséquent,
- Clé – C'est le décalage d'octet du début de la ligne dans le fichier (pas le fichier entier en une seule division). Il sera donc unique s'il est combiné avec le nom du fichier.
- Valeur – C'est le contenu de la ligne. Cela exclut les terminaisons de ligne.
3. KeyValueTextInputFormat
Il est similaire à TextInputFormat. Ce InputFormat traite également chaque ligne d'entrée comme un enregistrement distinct. Alors que la différence est que TextInputFormat traite la ligne entière comme la valeur, mais le KeyValueTextInputFormat divise la ligne elle-même en clé et valeur par un caractère de tabulation ('/t'). Par conséquent,
- Clé – Tout jusqu'au caractère de tabulation.
- Valeur – C'est la partie restante de la ligne après le caractère de tabulation.
4. SequenceFileInputFormat
C'est un InputFormat qui lit les fichiers de séquence. Les fichiers de séquence sont des fichiers binaires. Ces fichiers stockent également des séquences de paires clé-valeur binaires. Celles-ci sont compressées en bloc et fournissent une sérialisation et une désérialisation directes de plusieurs données arbitraires. Par conséquent,
La clé et la valeur sont toutes deux définies par l'utilisateur.
5. SequenceFileAsTextInputFormat
C'est la variante de SequenceFileInputFormat. Ce format convertit les valeurs de clé du fichier de séquence en objets texte. Ainsi, il effectue la conversion en appelant 'tostring() ' sur les clés et les valeurs. Par conséquent, SequenceFileAsTextInputFormat fait des fichiers de séquence une entrée appropriée pour le streaming.
6. SequenceFileAsBinaryInputFormat
En utilisant SequenceFileInputFormat, nous pouvons extraire les clés et les valeurs du fichier de séquence sous la forme d'un objet binaire opaque.
7. NlineInputFormat
C'est une autre forme de TextInputFormat où les clés sont décalées en octets de la ligne. Et les valeurs sont le contenu de la ligne. Ainsi, chaque mappeur reçoit un nombre variable de lignes d'entrée avec TextInputFormat et KeyValueTextInputFormat.
Le nombre dépend de la taille de la scission. Cela dépend aussi de la longueur des lignes. Donc, si nous voulons que notre mappeur reçoive un nombre fixe de lignes d'entrée, nous utilisons NLineInputFormat.
N- C'est le nombre de lignes d'entrée que chaque mappeur reçoit.
Par défaut (N=1), chaque mappeur reçoit exactement une ligne d'entrée.
Supposons que N =2, alors chaque division contient deux lignes. Ainsi, un mappeur reçoit les deux premières paires clé-valeur. Un autre mappeur reçoit les deux deuxièmes paires clé-valeur.
8. DBInputFormat
Ce InputFormat lit les données d'une base de données relationnelle à l'aide de JDBC. Il charge également de petits ensembles de données, peut-être pour se joindre à de grands ensembles de données de HDFS à l'aide de MultipleInputs. Par conséquent,
- Clé – LongWritables
- Valeur – DBWritables.
Conclusion
Par conséquent, InputFormat définit comment lire les données d'un fichier dans les instances de Mapper. Dans ce didacticiel, nous avons appris de nombreux types de InputFormat tels que FileInputFormat, TextInputFormat, etc.
Le format d'entrée par défaut est TextInputFormat. Si vous avez des questions concernant MapReduce InputFormat, n'hésitez pas à les partager avec nous. J'espère que nous allons les résoudre.