您好,欢迎访问一九零五行业门户网

深入解析MapReduce架构设计与实现原理–读书笔记(5)hadoop工作流

用户编写的作业比较复杂,相互之间存在依赖关系,这种依赖关系可以用有向图表示,我们称之为 工作流 。 1.jobcontrol实现原理: 传统做法:为每个作业创建相应的jobconf对象,并按照依赖关系依次(串行)提交各个作业。 //创建job对象jobconf extractjobconf =
用户编写的作业比较复杂,相互之间存在依赖关系,这种依赖关系可以用有向图表示,我们称之为工作流。
1.jobcontrol实现原理:
传统做法:为每个作业创建相应的jobconf对象,并按照依赖关系依次(串行)提交各个作业。
//创建job对象jobconf extractjobconf = new jobconf(extractjob.class);jobconf classpriorjobconf = new jobconf(classpriorjob.class);jobconf conditionalprobilityjobconf = new jobconf(conditionalprobilityjobconf.class);jobconf predictjobconf = new jobconf(predictjobconf.class);//配置jobconf//按照依赖关系依次提交作业jobclient.runjob(extractjobconf);jobclient.runjob(classpriorjobconf);jobclient.runjob(conditionalprobilityjobconf);jobclient.runjob(predictjobconf);
如果使用jobcontrol,则用户只需使用adddepending()函数加作业依赖关系接口,jobcontrol会按照依赖关系调度各个作业。
configuration extractjobconf = new configuration();configuration classpriorjobconf = new configuration();configuration conditionalprobilityjobconf = new configuration();configuration predictjobconf = new configuration();。。。设置各个conf//创建job对象job extractjob = new job(extractjobconf);job classpriorjob = new job(classpriorjobconf);job conditionalprobilityjob = new job(conditionalprobilityjobconf);job predictjob = new job(predictjobconf);//设置依赖关系,构造一个dag作业classpriorjob.adddepending(extractjob);conditionalprobilityjob.adddepending(extractjob);predictjob.adddepending(classpriorjob);predictjob.adddepending(conditionalprobilityjob);//创建jobcontrol对象,由它对作业进行监控和调度jobcontrol jc = new jobcontrol(test);jc.addjob(extractjob);jc.addjob(classpriorjob);jc.addjob(conditionalprobilityjob);jc.addjob(predictjob);jc.run();
jobcontrol设计原理分析
由两个类组成。job和jobcontrol。其中job封装了一个mapreduce作业及其对应的依赖关系,主要负责监控各个依赖作业的运行状态,以此更新最忌的状态。
开始--》waitingjobs--》readyjobs--》runningjobs--》successfuljobs--》结束 --》failedjobs--》结束
jobcontrol封装了一系列mapreduce作业及其对应的依赖关系。它将处于不同状态的作业放到不同的哈希表中。并按照job的状态转移作业,直至所有作业完成。2.chainmapper/chainreducer的实现原理
cmr主要为了解决线性链式mapper而提出的,在mr中存在多个mapper,这些mapper像管道一样,前一个mapper的输出结果会被重定向到下一个mapper的输入,形成
一个流水线,形式类似于[map+reduce map*]
对于任意一个mr作业 ,mr阶段可以有无限个mapper,但reducer只能有一个。
实例:
conf.setjobname(chain);conf.setinputformat(textinputformat.class);conf.setoutputformat(textoutputformat.class);jobconf mapper1conf = new jobconf(false);jobconf mapper2conf = new jobconf(false);jobconf reduce1conf = new jobconf(false);jobconf mapper3conf = new jobconf(false);?chainmapper.addmapper(conf,mapper1.class,longwritable.class,text.class,text.class,text.class,true,mapper1conf);//第七个字段是:key/value是否按值传递,如果为true:则为按值传递;如果为false:则为按引用传递。如果设置为true,需要保证key/value不会被修改chainmapper.addmapper(conf,mapper2.class,text.class,text.class,longwritable.class,text.class,false,mapper2conf);chainmapper.setreducer(conf,reducer.class,longwritable.class,text.class,text.class,text.class,true,reduce1conf);chainmapper.addmapper(conf,mapper3.class,text.class,text.class,longwritable.class,text.class,false,mapper1conf);jobclient.runjob(conf);
3.hadoop工作流引擎
隐式工作流引擎:hive,pig,cascading
显式工作流引擎:oozie,azkaban 原文地址:深入解析mapreduce架构设计与实现原理–读书笔记(5)hadoop工作流, 感谢原作者分享。
其它类似信息

推荐信息