#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. весь этот фрагмент можно удалить?