我正在尝试通过命令行设置要使用的reducer数量。好像我使用了错误的语法。我正在使用hadoop 2.5(纱线)MR2。
hadoop jar mrjobs-0.1.jar com.example.Weather -D mapreduce.job.reduces=2 datasets/inputs output
当我添加-D选项时,此命令不起作用,否则其工作正常。
任何帮助表示赞赏!
谢谢!
答案 0 :(得分:0)
语法看起来很合适,我已经针对2.5 YARN MR2测试了以下它的工作原理:
hadoop jar hadoop-mapreduce-examples.jar wordcount -Dmapreduce.job.reduces=5 input output
很可能问题可能是你的Driver类没有实现ToolRunner,它与GenericOptionsParser配合使用来解析通用命令行参数。
以下是如何在MapReduce Driver类中实现ToolRunner的示例:
// imports ignored
public class ExampleDriver extends Configured implements Tool {
public int run(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: ExampleDriver <in> <out>");
System.exit(2);
}
Configuration conf = getConf();
Job job = Job.getInstance(conf);
job.setJobName("example driver");
job.setJarByClass(ExampleDriver.class);
job.setMapperClass(YourMapper.class);
job.setReducerClass(YourReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
int ret = job.waitForCompletion(true) ? 0 : 1;
return ret;
}
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new Configuration(), new ExampleDriver(), args);
System.exit(res);
}
}