2011-12-28 4 views
3

J'utilise CompositeInputFormat pour fournir une entrée à un travail hadoop.Partitions de fichiers Hadoop: CompositeInputFormat: Inner Join

Le nombre de divisions générées est le nombre total de fichiers donnés en entrée à CompositeInputFormat (pour la jointure).

Le travail ignore complètement la taille de bloc et la taille de division maximale (tout en recevant une entrée de CompositeInputFormat). Cela entraîne des tâches cartographiques longues et rend le système lent car les fichiers d'entrée sont plus grands que la taille du bloc.

Est-ce que quelqu'un est au courant de la façon dont le nombre de divisions peut être géré pour CompositeInputFormat?

Répondre

6

Malheureusement, CompositeInputFormat doit ignorer la taille de bloc/division. Dans CompositeInputFormat, les fichiers d'entrée doivent être triés et partitionnés de manière identique ... par conséquent, Hadoop n'a aucun moyen de déterminer où diviser le fichier pour maintenir cette propriété. Il n'a aucun moyen de déterminer où diviser le fichier pour conserver les fichiers organisés. La seule façon de contourner cela est de diviser et de partitionner les fichiers manuellement en plus petits groupes. Vous pouvez le faire en passant les données à travers un travail mapreduce (probablement juste mappeur d'identité et réducteur d'identité) avec une plus grande quantité de réducteurs. Assurez-vous de passer les deux ensembles de données avec le même nombre de réducteurs.

+0

J'utilise déjà le nombre maximal de réducteurs. J'ai besoin de plus petite taille de bloc pour plusieurs vagues de carte. À l'heure actuelle, les tâches de la carte sont trop importantes, ce qui crée des problèmes de performance, ainsi que des échecs de tâches parfois. – TheHat

+1

Je ne pense pas que vous comprenez ce que je dis. Le problème est que vous ne pouvez pas diviser les tâches de la carte par des divisions d'entrée lors de l'utilisation de CompositeInputFormat. Un moyen de contourner cela est de diviser manuellement les fichiers vous-même. Alors, prenez vos gros fichiers et divisez-les en fichiers plus petits. Une façon de faire est ce que je suggère dans mon 2ème paragraphe. En passant, il n'y a pas de nombre maximal de réducteurs. –

+0

Mon entrée est la sortie d'un autre travail mapreduce. Le nombre de fichiers de sortie par un travail mapreduce est égal au nombre de tâches de réducteur utilisées. Le nombre maximal de tâches redcuer est égal à la capacité de la tâche de réduction du cluster. Dans ce scénario, exécuter un travail mapreduce, puis fractionner un fichier, puis exécuter un autre travail mapreduce ne correspond pas à la solution. – TheHat