使用JobControl管理mapreduce多job依赖

当MapReduce中作业不止一个,如果管理这些作业按照顺序执行,主要考虑是否有个线性的作业链或有向无环图(DAG)
对于线性链表最简单的就是一个接一个的运行作业,对于比线性链表更复杂的结构,有相关的类库可以帮助你合理安排工作流,最简单的就是org.apache.hadoop.mapred.jobcontrol包中的JobControl类,JobControl实例代表一个作业的运行图,可以加入作业配置,然后告诉JobControl实例作业之间的依赖关系
示例如下:
Java代码  
  1. /** 
  2.      * job2 依赖于 job1 
  3.      * @param job1 
  4.      * @param job2 
  5.      * @param chainName 
  6.      * @return 
  7.      * @throws IOException 
  8.      */  
  9.     public static int handleJobChain(Job job1 ,Job job2, String chainName) throws IOException{  
  10.         ControlledJob controlledJob1 = new ControlledJob(job1.getConfiguration());  
  11.         controlledJob1.setJob(job1);  
  12.           
  13.         ControlledJob controlledJob2 = new ControlledJob(job2.getConfiguration());  
  14.         controlledJob2.setJob(job2);  
  15.         controlledJob2.addDependingJob(controlledJob1);  
  16.           
  17.         JobControl jc = new JobControl(chainName);  
  18.         jc.addJob(controlledJob1);  
  19.         jc.addJob(controlledJob2);  
  20.         Thread jcThread = new Thread(jc);  
  21.         jcThread.start();  
  22.         while(true){  
  23.             if(jc.allFinished()){  
  24.                 System.out.println(jc.getSuccessfulJobList());  
  25.                 jc.stop();  
  26.                 return 0;  
  27.             }  
  28.             if(jc.getFailedJobList().size() > 0){  
  29.                 System.out.println(jc.getFailedJobList());  
  30.                 jc.stop();  
  31.                 return 1;  
  32.             }  
  33.         }  
  34.     }  
 
要注意的地方就是 hadoop的JobControl类实现了线程Runnable接口 。我们 需要实例化一个线程来让它启动 直接调用JobControl的run()方法,线程将无法结束
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值