Hadoop多Job并行處理的實例詳解
Hadoop多Job并行處理的實例詳解
有關Hadoop多Job任務并行處理,經(jīng)過測試,配置如下:
首先做如下配置:
1、修改mapred-site.xml添加調度器配置:
<property> <name>mapred.jobtracker.taskScheduler</name> <value>org.apache.hadoop.mapred.FairScheduler</value> </property>
2、添加jar文件地址配置:
<property> <name>hadoopTest.jar</name> <value>所生成jar的地址</value> </property>
Java基本代碼如下:
// 獲取各個Job,有關Job的創(chuàng)建,這里就不貼上來了。
Job job_base = (Job) 。。。;
Job job_avg = (Job) 。。。;
Job job_runCount = (Job) 。。。;
Job job_activeUser = (Job) ....;
job_base.setJarByClass(CapuseDateTimerTask.class);
job_avg.setJarByClass(CapuseDateTimerTask.class);
job_runCount.setJarByClass(CapuseDateTimerTask.class);
job_activeUser.setJarByClass(CapuseDateTimerTask.class);
// 執(zhí)行完job_base才開始并行以下三個Job;
if (job_base.waitForCompletion(true)) {
FileUtil.hdfsFileHandle(jobBase);
// 并行Job
job_avg.submit();
job_runCount.submit();
job_activeUser.submit();
}
boolean bln1 = job_avg.isComplete();
boolean bln2 = job_runCount.isComplete();
boolean bln3 = job_activeUser.isComplete();
// 計算Job是否完成
while (!bln1 || !bln2 || !bln3) {
bln1 = job_avg.isComplete();
bln2 = job_runCount.isComplete();
bln3 = job_activeUser.isComplete();
}
最后將這些代碼組裝至Main方法,使用Hadoop執(zhí)行命令運行:
hadoop jar jar包名稱 方法入口所在的類
如:
hadoop jar hadoopTest.jar ch03.test Test
可以通過50030端口來監(jiān)控Job的并行狀態(tài),這里就不多說了??!
解釋:
1、配置Jar地址可以解決打包所生成的jar包后,運行時出現(xiàn)ClassNotFound的問題;
2、給多個Job設定setJarByClass,經(jīng)測試,如果不設定此類,運行時會出現(xiàn)ClassNotFound錯誤,其中CapuseDateTimerTask為Main方法所在的類名;
3、waitForCompletion與submit方法是有區(qū)別的,waitForCompletion是串行,而submit是并行,正是因為submit是并行所以后續(xù)的代碼操作需要取其執(zhí)行是否完成的狀態(tài)來做判斷處理即:isComplete();
4、以上Job采用的是:org.apache.hadoop.mapreduce.Job
以上代碼操作在單機/集群上測試都通過!
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
PowerJob的ProcessorLoader工作流程源碼解讀
這篇文章主要為大家介紹了PowerJob的ProcessorLoader工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
mybatis?collection和association的區(qū)別解析
這篇文章主要介紹了mybatis?collection解析以及和association的區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07

