web-dev-qa-db-fra.com

Comment écrire des jobs hadoop 'map only'?

Je suis un novice sur hadoop, je commence à bien connaître le style de programmation par carte, mais je suis maintenant confronté à un problème: parfois, je n'ai besoin que de la carte pour un travail et je n'ai besoin que du résultat directement en sortie, ce qui signifie la phase n’est pas nécessaire ici, comment puis-je y arriver?

41
Breakinen
58
Thomas Jungblut
8
Peter Wippermann

Cela peut être très utile lorsque vous devez lancer un travail avec des mappeurs uniquement à partir d'un terminal. Vous pouvez désactiver les réducteurs en spécifiant implicitement les 0 réducteurs dans la commande hadoop jar:

-D mapred.reduce.tasks=0 

Donc, la commande de résultat sera la suivante:

hadoop jar myJob.jar -D mapred.reduce.tasks=0 -input myInputDirs -output myOutputDir

Pour être rétro-compatible, Hadoop prend également en charge l'option "-reduce NONE", qui équivaut à "-D mapred.reduce.tasks = 0". 

4
Alex

Si vous utilisez oozie en tant que planificateur pour gérer vos travaux hadoop, vous pouvez simplement définir la propriété mapred.reduce.tasks (le nombre par défaut de tâches de réduction par travail) sur 0. Vous pouvez ajouter votre mappeur dans la propriété mapreduce. .map.class, et il n’y aura pas besoin d’ajouter la propriété mapreduce.reduce.class car les réducteurs ne sont pas nécessaires.

<configuration>
   <property>
     <name>mapreduce.map.class</name>
     <value>my.com.package.AbcMapper</value>
   </property>
   <property>
     <name>mapred.reduce.tasks</name>
     <value>0</value>
   </property>
   .
   .
   .
<configuration>
0
Neha Kumari