Hadoop 里MapReduce里 实现多个job任务 包含(迭代式、依赖式、链式)

一、迭代式,所谓的迭代式,下一个执行的Job任务以上一个Job的输出作为输入,最终得到想要的结果。 这里我只写关键的代码了

 
 
 
[java] view plain copy
  1. Job job = new Job(new Configuration(),“test”);  
  2.   
  3. JobConf jobConf=(JobConf) job.getConfiguration();  
  4. jobConf.setJobName("hadoopJoinTask");  
  5.   
  6. //设置job输入路径  
  7. FileInputFormat.setInputPaths(inputPath);  
  8. //设置job输出的路径  
  9. FileOutputFormat.setOutputPath(jobConf, outPath);  
  10.   
  11. Job job2 = new Job(new Configuration(),“test2”);  
  12.   
  13. JobConf jobConf2=(JobConf) job2.getConfiguration();  
  14. jobConf2.setJobName("hadoopJoinTask");  
  15.   
  16. //设置job2输入路径  job的输出路径  
  17. FileInputFormat.setInputPaths(outPath);  
  18. //设置job2输出的路径  
  19. FileOutputFormat.setOutputPath(jobConf2, outPath2);  



二、依赖式,工作中经常遇到这样的情况,比如job3需要等job1、job2、、、等执行完才能执行,因此job3是依赖于其他的job完成才能执行

  
  
[java] view plain copy
  1. //hadoop2  查看hadoop源码 JobControl 发现有ControlledJob,  ControlledJob里有依赖方法  addDependingJob  
  2.   
  3.         Job job = new Job(new Configuration(),"job1");  
  4.         Job job2 = new Job(new Configuration(),"job2");  
  5.   
  6.         ControlledJob controlledJob=new ControlledJob(job.getConfiguration());  
  7.   
  8.         //设置job  
  9.         controlledJob.setJob(job);  
  10.   
  11.         ControlledJob controlledJob2=new ControlledJob(job2.getConfiguration());  
  12.         controlledJob2.setJob(job2);  
  13.         //这里就是设置job依赖的重要方法了,依赖于<span style="font-size: 9pt; font-family: Menlo;">controlledJob</span><span style="font-size: 9pt; font-family: Menlo;">  </span>  
  14.         controlledJob.addDependingJob(controlledJob);  
  15.   
  16.         JobControl jc=new JobControl("jc");  
  17.         jc.addJob(controlledJob);  
  18.         jc.addJob(controlledJob2);  
  19.         //由于JobControl实现了Runnable 接口,而Runnable接口只有运行方法,没有结束方法,因此需要一个线程来辅助  
  20.   
  21.         Thread jcThread = new Thread(jc);  
  22.         jcThread.start();  
  23.         while(true){  
  24.             //当job池里所有的job完成后,执行 下一步操作  
  25.             if(jc.allFinished()){  
  26.                 System.out.println(jc.getSuccessfulJobList());  
  27.                 jc.stop();  
  28.   
  29.   
  30.             }  
  31.             //获取执行失败的job列表  
  32.             if(jc.getFailedJobList().size() > 0){  
  33.                 System.out.println(jc.getFailedJobList());  
  34.                 jc.stop();  
  35.   
  36.             }  
  37.         }  
三、链式

  
  
[java] view plain copy
  1. Configuration conf = new Configuration();  
  2. Job job = new Job(conf);  
  3. job.setJobName("ChianJOb");  
  4. // 在ChainMapper里面添加Map1  
  5. Configuration map1conf = new Configuration(false);  
  6. ChainMapper.addMapper(job, Map1.class, LongWritable.class, Text.class,  
  7.         Text.class, Text.classtrue, map1conf);  
  8. // 在ChainReduce中加入Reducer,Map2;  
  9. Configuration reduceConf = new Configuration(false);  
  10. ChainReducer.setReducer(job, Reduce.class, LongWritable.class,  
  11.         Text.class, Text.class, Text.classtrue, map1conf);  
  12. Configuration map2Conf = new Configuration();  
  13. ChainReducer.addMapper(job, Map2.class, LongWritable.class, Text.class,  
  14.         Text.class, Text.classtrue, <span style="font-family: Menlo; font-size: 9pt;">map2Conf</span><span style="font-size: 9pt; font-family: Menlo;">);</span>  



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值