2017-08-31 2 views
0

J'ai un très grand nombre de fichiers texte d'une taille combinée de 1 To. Disons, je dois effectuer le compte de mots sur chaque dossier et vouloir stocker le résultat de chaque dossier séparément. Apache Hadoop est-il la bonne solution pour ce genre de problème? La taille de chaque fichier est de 5 Mo. Je ne peux pas concaténer les fichiers car je veux voir le résultat du compte de mots de chaque fichier séparément. Ce que je veux que Hadoop fasse est de nourrir chaque fichier en entrée d'un mappeur et de générer un fichier de sortie séparé pour celui-ci au réducteur.Traitement d'un grand nombre de fichiers texte avec Apache Hadoop

Répondre

0

Jetez un oeil à la WholeFileInputFormat.java et WholeFileRecordReader.java ici - https://github.com/tomwhite/hadoop-book/tree/master/ch08-mr-types/src/main/java Cela vous aidera à lire le contenu d'un fichier comme un enregistrement. Je pense que vous devrez peut-être modifier les bits InputFormat et RecordReader pour émettre le nom de fichier en tant que clé. Dans map-reduce, je pense que ce sera un travail Map uniquement, où chaque tâche de carte est responsable de compter les mots distincts dans un enregistrement (qui est le contenu entier du fichier). Vous pouvez stocker directement la sortie de ces tâches de carte qui vous donnera le nombre de mots pour un seul fichier.

Je crois que vous comparez votre cas d'utilisation avec l'application de réduction de mots standard de carte réduire où le réducteur est utilisé pour compter les mots sur toutes les entrées (dans votre cas tous les fichiers). Vous n'avez pas l'intention de faire cela, donc j'ai dit que vous ne réduiriez pas ici.

Je ne suis pas sûr si l'utilisation d'un réducteur pour compter les mots dans un seul fichier serait une bonne idée.

Une autre option serait d'utiliser le inputFormat et recordreader mentionné ci-dessus et utiliser Cascading OU Apache Pig ou une abstraction de haut niveau sur le dessus de la carte-réduire pour simplifier votre travail.