组合式的MapReduce作业

Hadoop 组合式作业

在实际的应用中,很多的复杂任务都是不止一趟的mapreduce任务,需要查分成多个简单的mapreduce子任务去完后。

(1)迭代的计算任务。

(2)顺序组合MapReduce作业

(3)具有依赖关系的组合式mapreduce作业

(4)mapreduce前处理和后处理步骤的链式执行

迭代的计算任务:

PageRank算法。

顺序组合:

多个mapreduce子任务的逐一执行:

mapreduce1->mapreduce2->mapreduce3.....

需要注意的是,任务1的输出目录,将作为任务2的输入目录,任务2的输出目录将作为任务3的输入目录,.....。

[java] view plain copy
  1. Configuration conf = new Configuration();  
  2.     Job job1 = new Job(conf,"job1");  
  3.     job.setJarByClass(job1.class);  
  4.     FileInputFormat.addInputPath(job1,inputpath1);  
  5.     FileOutputFormat.setOutputPath(job, outputpath1);  
  6.       
  7.       
  8.     Configuration conf2 = new Configuration();  
  9.     Job job2 = new Job(conf2,"job2");  
  10.     job.setJarByClass(job2.class);  
  11.     FileInputFormat.addInputPath(job2,outputpath1);  
  12.     FileOutputFormat.setOutputPath(job2, outputpath2);  
  13.       
  14.     Configuration conf3 = new Configuration();  
  15.     Job job3 = new Job(conf3,"job3");  
  16.     job.setJarByClass(job3.class);  
  17.     FileInputFormat.addInputPath(job3,outputpath2);  
  18.     FileOutputFormat.setOutputPath(job3, outputpath3);  
  19.       
(3)任务存在着依赖关系:

job除了维护子任务的配置信息之外,还可以维护任务之间的依赖关系,可以把所有任务都加入到JobControl中,在JobControl的run方法执行。

[java] view plain copy
  1. Configuration conf = new Configuration();  
  2.     Job job1 = new Job(conf,"job1");  
  3.   
  4.     Configuration conf2 = new Configuration();  
  5.     Job job2 = new Job(conf2,"job2");  
  6.           
  7.     Configuration conf3 = new Configuration();  
  8.     Job job3 = new Job(conf3,"job3");  
  9.       
  10.     job3.addDependingJob(job1);  
  11.     job3.addDependingJob(job2);  
  12.       
  13.     JobControl jc = new JobControl("job123");  
  14.     jc.addJob(job1);  
  15.     jc.addJob(job2);  
  16.     jc.addJob(job3);  
  17.     jc.run();  
4)mapreduce前处理和后处理步骤的链式执行

hadoop提供了链式的mapper和链式的reducer,ChainMapper允许在一个map任务下添加多个map任务,而chainreducer可以允许在一个reducer处理之后,继续使用多个map任务,完成后续的处理。

[java] view plain copy
  1. Configuration conf = new Configuration();  
  2.     Job job1 = new Job(conf,"job1");  
  3.     job.setMapperClass(Map.class);  
  4.     job.setReducerClass(Reduce.class);  
  5.     job.setOutputKeyClass(Text.class);  
  6.     job.setOutputValueClass(Text.class);  
  7.     FileInputFormat.addInputPath(job,new Path(args[0]));  
  8.     FileOutputFormat.setOutputPath(job, new Path(args[1]));  
  9.       
  10.     Configuration map1conf = new Configuration(false);  
  11.     /** 
  12.      * addMapper(主作业,加入的mapclass,map输入class,map输入键值class,map输出键class,map输出键值class, 
  13.      *          true,配置对象) 
  14.      *  
  15.      * */  
  16.     ChainMapper.addMapper(job1,Map1.class,LongWritable.class,Text.class,  
  17.                             Text.class,Text.class,true,map1conf);  
  18.     Configuration map2conf = new Configuration(false);  
  19.     //根据上一个map输出class作为输入  
  20.     ChainMapper.addMapper(job1,Map2.class,Text.class,Text.class,  
  21.             LongWritable.class,Text.class,true,map2conf);  
  22.       
  23.     Configuration reduceconf = new Configuration(false);  
  24.     /** 
  25.      * setReducer(主作业,加入的reduceclass,map输入class,map输入键值class,map输出键class,map输出键值class, 
  26.      *          true,配置对象) 
  27.      *  
  28.      * */  
  29.     ChainMapper.setReducer(job1,reduce.class,LongWritable.class,Text.class,  
  30.             Text.class,Text.class,true,reduceconf);  
  31.     //根据上一个map输出class作为输入  
  32.     Configuration map3conf = new Configuration(false);  
  33.     ChainMapper.addMapper(job1,map3.class,Text.class,Text.class,  
  34.             LongWritable.class,Text.class,true,map3conf);  
  35.       
  36.     Configuration map4conf = new Configuration(false);  
  37.     ChainMapper.addMapper(job1,map4.class,LongWritable.class,Text.class,  
  38.             LongWritable.class,Text.class,true,map4conf); 

你可能感兴趣的:(hadoop,MapReduce)