中看到的那样
package com.ibm.dw61;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import com.ibm.dw61.MaxTempReducer;
import com.ibm.dw61.MaxTempMapper;
public class MaxMonthlyTemp {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] programArgs = new GenericOptionsParser(conf, args)
.getRemainingArgs();
if (programArgs.length != 2) {
System.err.println("Usage: MaxTemp <in> <out>");
System.exit(2);
}
Job job = new Job(conf, "Monthly Max Temp");
job.setJarByClass(MaxMonthlyTemp.class);
job.setMapperClass(MaxTempMapper.class);
job.setCombinerClass(MaxTempReducer.class);
job.setReducerClass(MaxTempReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(programArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(programArgs[1]));
// Submit the job and wait for it to finish.
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
问题:
1)这是一个map-reduce代码,用于提取每个月的最高温度。编码器正在尝试使用getRemainingArgs方法获得非泛型选项。但是下一行说,如果非泛型选项的数量不是2,这意味着有一个错误,程序将立即中止。我不明白这里编码器的逻辑是什么。有人能解释一下吗?
2)在另一个例子Wordcount中,编码器没有执行获取非泛型选项的这一步。那么在什么情况下我们必须执行这一步并测试非通用选项是否为2?
您可以在Hadoop API文档中看到,getRemainingArgs方法的目的是提取与Hadoop框架无关的应用程序特定参数。在这段代码中,您应该指定两个参数,首先是输入,然后是输出,正如您在Usage