使用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
    评论
MapReduce job是指通过MapReduce框架进行并行计算的任务。在MapReduce任务中,数据被分割成若干逻辑片段,并由多个map任务并行处理。每个map任务将数据进行处理和转换,并输出键值对。然后,这些键值对根据键进行排序和合并,并由多个reduce任务并行处理。每个reduce任务将相同键的值进行聚合和处理,最后输出最终结果。 在配置MapReduce任务时,可以设置map任务槽和reduce任务槽的数量。任务槽是指集群能够同时运行的map和reduce任务的最大数量。可以根据集群的规模和需求,设置每台机器最多可以同时运行的map和reduce任务的个数,决定了任务槽的数量。通常来说,建议设置reduce任务数量为reduce任务槽的0.95到1.75倍。 在MapReduce任务的执行过程中,数据的切片和处理也是关键。一般情况下,切片的大小应与数据节点的切块大小一致,以避免数据的拷贝和网络传输的影响。此外,为了减少带宽的影响和网络传输,常见的做法是将jobtracker和namenode放在同一台机器上,并将datanode和tasktracker放在同一台机器上,尽量减少数据的拷贝和网络传输的开销。 另外,为了减少网络传输的开销和提高性能,可以使用combine函数进行本地合并数据的操作。combine函数用于在map任务本地对输出的键值对进行合并,以减少网络I/O操作的消耗。可以通过设置combine函数来指定reduce函数为combine函数,从而实现本地合并的功能。 总结来说,MapReduce job是通过MapReduce框架进行并行计算的任务。任务包括map和reduce两个阶段,数据被切片、处理和合并,并最终输出结果。在配置任务时,可以设置任务槽数量和使用combine函数来优化任务的执行效率和减少网络传输的开销。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MapReduce编程job概念原理](https://blog.csdn.net/weixin_33739627/article/details/86115820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Hadoop学习——MapReducejob机制和job链介绍](https://blog.csdn.net/wohaqiyi/article/details/85316531)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值