2017-01-17 32 views
2

什么是使用简单的job.waitForCompletion(true)方法,并通过ToolRunner.run(新MyClass的(),参数)开始映射减少的Apache Hadoop的工作有什么区别?不同的方式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

相关问题