关于GenericOptionsParser getRemainingArgs方法

时间:2016-10-14 15:58:43

标签: mapreduce

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?

1 个答案:

答案 0 :(得分:0)

正如您在Hadoop API文档中所看到的,getRemainingArgs方法的目的是提取特定于应用程序的参数,这些参数与Hadoop框架无关。在此代码中,您应该指定两个参数,首先是输入,然后是输出,如使用

中所示