[(轉(zhuǎn))多個(gè)MapReduce作業(yè)相互依賴時(shí),使用JobControl進(jìn)行管理]
原文地址:http://mntms.iteye.com/blog/2086990
要處理復(fù)雜關(guān)系的數(shù)據(jù),一個(gè)工程里面絕對(duì)不止一個(gè)MapReduce作業(yè),當(dāng)有多個(gè)MapReduce作業(yè)時(shí), 并且每個(gè)作業(yè)之間有依賴關(guān)系,所謂的依賴就是一個(gè)作業(yè)得到的結(jié)果是另外一個(gè)作業(yè)的輸入,這個(gè)時(shí)候我們可 以使用JobControl吊用其中的的addDepending()方法,管理每個(gè)MapReduce工作間的依賴關(guān)系,具體的 示例如下:
//設(shè)置各個(gè)Configuration
Configuration Aconf = new Configuration();
Configuration Bconf = new Configuration();
Configuration Cconf = new Configuration();
Configuration Dconf = new Configuration();
//創(chuàng)建job對(duì)象,需要注意的是JobControl要求作業(yè)必須封裝成job對(duì)象
Job Ajob = new Job(Aconf);
Job Bjob = new Job(Bconf);
Job Cjob = new Job(Cconf);
Job Djob = new Job(Dconf);
//設(shè)置依賴關(guān)系,構(gòu)造一個(gè)DAG作業(yè)
Bjob.addDepending(Ajob);
Cjob.addDepending(Ajob);
Djob.addDepending(Bjob);
Djob.addDepending(Cjob);
//創(chuàng)建JobControl對(duì)象,由他對(duì)作業(yè)進(jìn)行監(jiān)控和調(diào)度
JobControl JC = new JobControl("Native Bayes");
//把四個(gè)作業(yè)添加到JobControl中
JC.addJob(Ajob);
JC.addJob(Bjob);
JC.addJob(Cjob);
JC.addJob(Djob);
//提交DAG作業(yè)
JC.run();
在實(shí)際運(yùn)行過程中,不依賴于其他任何作業(yè)的Ajob會(huì)優(yōu)先得到調(diào)度,一旦運(yùn)行完成,Bjob,Cjob兩個(gè)作業(yè)同 時(shí)被調(diào)度,待他們?nèi)窟\(yùn)行完成后Djob被調(diào)用,參看上面的依賴的順序?。?!