2017-01-17 4 views
2

В чем разница между запуском работы по сокращению карты в Apache Hadoop с использованием просто метода job.waitForCompletion (true) и с помощью ToolRunner.run (новый MyClass(), args)?Различные способы запуска задания MapReduce

У меня есть работа MapReduce выполняется в следующих двух способов:

Первый следующим образом:

public class MaxTemperature extends Configured implements Tool { 
    public static void main(String[] args) throws Exception { 
     int exitCode = ToolRunner.run(new MaxTemperature(), args); 
     System.exit(exitCode); 
    } 

    @Override 
    public int run(String[] args) throws Exception { 
     if (args.length != 2) { 
       System.err.println("Usage: MaxTemperature <input path> <output path>"); 
       System.exit(-1); 
      } 
     System.out.println("Starting job"); 
     Job job = new Job(); 
     job.setJarByClass(MaxTemperature.class); 
     job.setJobName("Max temperature"); 

     FileInputFormat.addInputPath(job, new Path(args[0])); 
     FileOutputFormat.setOutputPath(job, new Path(args[1])); 

     job.setMapperClass(MaxTemperatureMapper.class); 
     job.setReducerClass(MaxTemperatureReducer.class); 

     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 
     int returnValue = job.waitForCompletion(true) ? 0:1; 

     if(job.isSuccessful()) { 
      System.out.println("Job was successful"); 
     } else if(!job.isSuccessful()) { 
      System.out.println("Job was not successful");   
     } 
     return returnValue; 
    } 
} 

И второй, как:

public class MaxTemperature{ 

    public static void main(String[] args) throws Exception { 

     if (args.length != 2) { 
       System.err.println("Usage: MaxTemperature <input path> <output path>"); 
       System.exit(-1); 
      } 
     System.out.println("Starting job"); 
     Job job = new Job(); 
     job.setJarByClass(MaxTemperature.class); 
     job.setJobName("Max temperature"); 

     FileInputFormat.addInputPath(job, new Path(args[0])); 
     FileOutputFormat.setOutputPath(job, new Path(args[1])); 

     job.setMapperClass(MaxTemperatureMapper.class); 
     job.setReducerClass(MaxTemperatureReducer.class); 

     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 
     int returnValue = job.waitForCompletion(true) ? 0:1; 

     if(job.isSuccessful()) { 
      System.out.println("Job was successful"); 
     } else if(!job.isSuccessful()) { 
      System.out.println("Job was not successful"); 

    } 
} 

Выход из обоих способов является то же самое. Но я не понимаю, в чем разница между ними? Какой из них более предпочтительный?

ответ

0

Это сообщение делает довольно приличную работу, объясняя использование ToolRunner: ToolRunner

+0

пожалуйста, избегать ссылок только для ответов. вместо этого попробуйте предоставить основы ответа здесь, а затем предоставите ссылку для получения более подробной информации. Если ссылка недействительна, так будет ваш ответ – vefthym