2013-01-28 4 views
0

Je veux traiter des fichiers CSV multilignes et pour cela j'ai écrit un custom CSVInputFormat.Comment augmenter les tâches de carte hadoop en implémentant getSplits

Je voudrais avoir environ 40 threads traitant des lignes CSV sur chaque nœud hadoop. Cependant, lorsque je crée un groupe sur Amazon EMR avec 5 machines (1 maître et 4 cœurs), je vois que je reçois seulement 2 tâches de carte en cours d'exécution, même s'il y a 6 emplacements de carte disponibles:

dashboard on EMR showing number of map tasks and available slots

J'ai implémenté getSplits dans mon inputFormat afin qu'il se comporte comme NLineInputFormat. Je m'attendais à ce que j'obtienne plus de choses en parallèle, mais cela n'a eu aucun effet. En outre, j'ai essayé de définir les arguments -s,mapred.tasktracker.map.tasks.maximum=10 --args -jobconf,mapred.map.tasks=10, mais aucun effet.

Que puis-je faire pour que les lignes soient traitées en parallèle? La façon dont hadoop fonctionne, ce n'est pas évolutif, peu importe le nombre d'instances que j'alloue au cluster, seules deux tâches de map fonctionneront au maximum. Lorsque j'utilise un fichier non compressé (zip) comme origine, il crée plus de tâches de carte, environ 17 pour 1,3 million de lignes. Même ainsi, je me demande pourquoi il ne devrait pas être plus et pourquoi plus de mappeurs ne sont pas créés lorsque les données sont zippées.

+0

Combien de données essayez-vous de traiter? Est-ce suffisant pour nourrir plus de cartographes? – Guy

+0

1,3 million de lignes, un peu plus de 1 Go. Je suppose que oui ... Ce que j'ai fait a commencé à utiliser des mappeurs Multithread et cela a amélioré les performances, mais la question demeure ... Si j'ai bien compris, hadoop devrait créer plus de tâches cartographiques, même lorsque les données sont compressées. – mvallebr

+0

Cela dépend du type de compression. Zip n'est pas un bon format car vous devez avoir le fichier entier avant de le décompresser. – Guy

Répondre

0

Modifiez la taille de la division pour obtenir plus de divisions.

Configuration conf= new Cofiguration(); 
//set the value that increases your number of splits. 
conf.set("mapred.max.split.size", "1020"); 
Job job = new Job(conf, "My job name"); 
+0

Va faire un essai et vous faire connaître les résultats. Merci d'avoir essayé d'aider. – mvallebr

Questions connexes