Я пытаюсь запустить программу mapreduce, просто WordCount для лучшего понимания. Все работает довольно хорошо, как и предполагалось. Я хочу вызвать функцию после завершения программы MapReduce, и в этой функции я хочу объединить все файлы детали, сделанные на шаге сокращения, в один текстовый файл, содержащий содержимое всех файлов детали. Я видел связанную проблему, и люди предложили использовать функцию FileUtil.copyMerge . У меня вопрос, как сделать вызов функции таким, чтобы он выполнялся после всего процесса mapreduce.
public class mapreducetask {
private void filesmerger(){
// I want to merge partfiles here in the function(maybe using FileUtils.copyMerge)
}
public static void main(String [] args) throws Exception{
Configuration cnf = new Configuration();
cnf.set("mapreduce.output.textoutputformat.seperator",":");
Integer numberOfReducers = 3;
Job jb = new Job(cnf,"mapreducejob");
jb.setJarByClass(mapreducetask.class);
jb.setMapperClass(mapper.class);
jb.setNumReduceTasks(numberOfReducers);
jb.setReducerClass(reducer.class);
jb.setOutputKeyClass(Text.class);
jb.setOutputValueClass(IntWritable.class);
jb.setInputFormatClass(customfileinputformat.class);
Path input = new Path("Input");
Path output = new Path ("Output");
FileInputFormat.addInputPath(jb, input);
FileOutputFormat.setOutputPath(jb, output);
// Should I call my merger function here. Location 1
System.exit(jb.waitForCompletion(true)?0:1);
}
}
Когда я звоню из Местоположения 1 (см. Код), кажется, что он выполняется еще до программы mapreduce, которая мне не нужна. Как я могу вызвать функцию после завершения процесса Mapreduce.