关于Mapreduce中多任务串联执行的认识
来源:互联网 发布:阿里云修改dns 编辑:程序博客网 时间:2024/05/22 17:30
最近学习了Mapreduce的分布计算框架,处理一些业务逻辑时,发现需要多个mapreduce程序才能完成。为了降低代码执行的繁琐度,将多个main文件合成一个,研究了下多任务的串联执行。下面就开始说说我的认识吧!
业务逻辑是比较普遍的求共同好友的测试。一般而言,根据业务逻辑,需要编写两个mapreduce程序,分别放在两个java文件中,先后执行才能获取最终的结果。下面是我将两个mapreduce程序放到一个java文件中,然后对main类的改造。
首先分别创建两个controlledJob对象,处理两个mapreduce程序。
ControlledJob controlledJob1 = new ControlledJob(job1.getConfiguration());
ControlledJob controlledJob2 = new ControlledJob(job2.getConfiguration());
创建一个管理组cf,用于管理创建的controlledJob对象,自定义组名,然后用addJob方法添加进组。
JobControl jc = new JobControl("cf");
jc.addJob(controlledJob1);
jc.addJob(controlledJob2);
创建好了管理组和job对象,我们还需要建立他们之间的关系,因为是串联的关系,两个job之间存在依赖关系。因此,通过addDependingJob()方法,建立依赖关系。
controlledJob2.addDependingJob(controlledJob1);
至此,我们就将两个job串联在了一起,并且制定了他们之间的相互依赖。然后设置线程对象来启动job。通过start方法。此时还不关闭线程,退出。
Thread thread = new Thread(jc);
thread.start();
注意到我们的main线程和job线程执行效率问题,往往会出现job线程还在执行,而main线程已经结束。因此我们需要加上下面这一行代码,通过判断job线程是否执行完毕,来决定是否退出jvm。通常job线程执行时间较长,因此我们让当前线程(main线程)在发现job线程没结束的情况下,稍微等他一秒钟。
while(!jc.allFinished()){
Thread.sleep(1000);
}
System.exit(0);
重点总结:多任务的串联执行问题,主要是要建立controlledjob,然后建组管理起来。留意多线程因效率而导致执行结束时间不一致的问题。
- 关于Mapreduce中多任务串联执行的认识
- 浅析Hadoop中MapReduce任务执行流程
- hadoop的mapreduce任务的执行流程
- mapreduce任务执行的单步跟踪
- Mapreduce中分组排序的一些认识
- Azkaban实战,Command类型单一job示例,任务中执行外部shell脚本,Command类型多job工作flow,HDFS操作任务,MapReduce任务,HIVE任务
- MapReduce(七): TaskTracker执行任务
- IntentService 串联 按顺序执行(此次任务执行完才执行下一个任务)
- 精通HADOOP(九) - MAPREDUCE任务的基础知识 - 执行作业
- hadoop 里执行 MapReduce 任务的几种常见方式
- 解决MapReduce任务在windows本地执行的NullPointerException问题
- servlet filter的串联过滤器执行原理
- 关于Jquery执行环境的认识
- 多线程中任务的执行
- hadoop中mapreduce的执行过程
- MapReduce典型编程场景——多Job串联
- 关于PHP定时执行任务的实现
- 关于自动执行任务的Quartz框架
- 牛客网错题集锦2
- js的一些使用笔记
- Spring Mvc的xml配置和测试
- 互联网协议简介
- redis秒杀
- 关于Mapreduce中多任务串联执行的认识
- html常用元素之列表元素
- 171023_矩阵特征值和矩阵函数
- java基础之自动计算字符串中字母出现次数
- Spring环境配置
- 常用基础类
- 第九次作业
- Java学习之第四课
- 微信小程序生命周期