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?
Cela désactive le réducteur.
job.setNumReduceTasks(0);
Vous pouvez également utiliser IdentityReducer:
http://hadoop.Apache.org/common/docs/current/api/org/Apache/hadoop/mapred/lib/IdentityReducer.html
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".
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>