您好,登錄后才能下訂單哦!
利用Hadoop怎么對多Job進行并行處理?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
首先做如下配置:
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的創建,這里就不貼上來了。 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); // 執行完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執行命令運行:
hadoop jar jar包名稱 方法入口所在的類
如:
hadoop jar hadoopTest.jar ch03.test Test
可以通過50030端口來監控Job的并行狀態,這里就不多說了!!
解釋:
1、配置Jar地址可以解決打包所生成的jar包后,運行時出現ClassNotFound的問題;
2、給多個Job設定setJarByClass,經測試,如果不設定此類,運行時會出現ClassNotFound錯誤,其中CapuseDateTimerTask為Main方法所在的類名;
3、waitForCompletion與submit方法是有區別的,waitForCompletion是串行,而submit是并行,正是因為submit是并行所以后續的代碼操作需要取其執行是否完成的狀態來做判斷處理即:isComplete();
4、以上Job采用的是:org.apache.hadoop.mapreduce.Job
看完上述內容,你們掌握利用Hadoop怎么對多Job進行并行處理的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。