О методе GenericOptionsParser getRemainingArgs

#mapreduce

#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) Это код сокращения карты для извлечения максимальной температуры за каждый месяц. Программист пытается получить не общие параметры, используя метод getRemainingArgs. Но в следующей строке говорится, что если количество не общих параметров не равно 2, это означает, что произошла ошибка, и программа немедленно завершится. Я не мог понять, какова здесь логика кодера. Кто-нибудь достаточно любезен, чтобы объяснить?

2) В другом примере Wordcount программист не выполнил этот шаг получения нестандартных параметров. Итак, при каких обстоятельствах мы должны выполнить этот шаг и проверить, являются ли номера неродовых опций 2?

Ответ №1:

как вы можете видеть в документации API Hadoop, целью метода getRemainingArgs является извлечение специфичных для приложения аргументов, которые не связаны с Hadoop framework. в этом коде вы должны указать два аргумента, сначала ваш ввод, а затем вывод, как вы можете видеть в использовании

Комментарии:

1. Спасибо за ваш ответ. Но почему эти аргументы, относящиеся к конкретному приложению, должны быть равны 2, иначе вся программа будет прервана? Один для ввода и один для вывода, ни больше, ни меньше

2. Спасибо за ваш ответ. Но почему эти аргументы, относящиеся к конкретному приложению, должны быть равны 2, иначе вся программа будет прервана? Один для ввода и один для вывода, ни больше, ни меньше <—— это то, что вы имели в виду?

3. это не связано с Hadoop и предназначено только для проверки правильности пользовательского ввода, поэтому вы можете удалить эту часть своего кода, не прерывая Hadoop

4. Строка[] programArgs = новый GenericOptionsParser(conf, аргументы) .getRemainingArgs(); if (programArgs.length != 2) { System.err.println(«Использование: maxTemp <in> <out>»); System.exit(2);

5. весь этот фрагмент можно удалить?