本篇內(nèi)容主要講解“java中整體MR工作機制是怎樣的”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java中整體MR工作機制是怎樣的”吧!
公司專注于為企業(yè)提供成都做網(wǎng)站、網(wǎng)站設計、微信公眾號開發(fā)、電子商務商城網(wǎng)站建設,小程序定制開發(fā),軟件按需求定制網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務。憑借多年豐富的經(jīng)驗,我們會仔細了解各客戶的需求而做出多方面的分析、設計、整合,為客戶設計出具風格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)公司更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務。
--以wordCount案例為例,進行斷點調(diào)試 1、在WordCountDriver類中的job.waitForCompletion(true);處打上斷點(入口),以debug模式運行 a.在Configuration conf = new Configuration();conf中做的操作是讀取所有相關的配置文件 b.并將job對象創(chuàng)建出來,通過--Job job = Job.getInstance(conf);完成

2、進入waitForCompletion()方法
if (state == JobState.DEFINE) { // --確定job的當前狀態(tài),如果是state,則進行提交
submit();
}
3、waitForCompletion()方法中的參數(shù)boolean verbose ~ verbose:true(默認值)
if (verbose) {
monitorAndPrintJob(); --對當前的job進行監(jiān)控,并打印job的信息
}
4、進入submit()方法 ~位置為Job.java~1562行
--ensureState(JobState.DEFINE); 再次確認Job的狀態(tài)
--setUseNewAPI(); 設置使用新的API --hadoop中提供了2套API
--connect(); 明確當前提交的Job運行的環(huán)境是本地還是集群
4.1、進入connect()方法 --Job.java~1534行
--cluster理解為當前job運行所需的一個環(huán)境對象,開始cluster為null,通過匿名內(nèi)部類進行對象的創(chuàng)建
4.2 進入return new Cluster(getConfiguration())方法 --Job.java~1540行
4.3 進入Cluster.java類,查看Cluster的有參構造 --Cluster.java~105行
4.4 進入initialize(jobTrackAddr, conf);方法,定位到initProviderList();//獲取Job運行的環(huán)境列表
4.5 進入initProviderList()方法 //獲取job運行的環(huán)境列表 --Cluster.java~75行
4.5 查看Cluster.java類中的124行,查看遍歷providerList有2種運行環(huán)境
YarnClientProtocolProvider ==>集群環(huán)境
LocalClientProtocolProvider==>本地環(huán)境
4.6 進入Cluster.java類130行,clientProtocol = provider.create(conf)方法,進入可以看到
4.7 YarnClientProtocolProvider.class 類19行
4.7 clientProtocol = null,繼續(xù)向下走,可以看到下面的操作是對當前運行環(huán)境的判斷 根據(jù)Provider結合當前的conf判斷是哪個環(huán)境 YarnClientProtocolProvider ==> YarnRunner --yarn的運行對象 LocalClientProtocolProvider==> LocalJobRunner --本地的運行對象 5、connect()執(zhí)行完畢,繼續(xù)向下執(zhí)行,看Job.java 1565行, //構造job的提交器對象 final JobSubmitter submitter = this.getJobSubmitter(this.cluster.getFileSystem(), this.cluster.getClient()); --1565行,使用的是當前構造器的文件系統(tǒng)對象及客戶端對象 6、繼續(xù)向下走,到Job.java的1570行,該行代碼才是真正進行job的提交 return submitter.submitJobInternal(Job.this, cluster); 通過JobSubmitter提交Job 7、job的狀態(tài)轉變?yōu)榭蓤?zhí)行,this.state = Job.JobState.RUNNING; --Job.java類的1573行 8、從1570行打斷點進入方法,進入JobSubmitter.java類中,定位到該類139行,submitJobInternal()方法, 向下走斷點 9、定位到 checkSpecs(job); 方法,用于校驗輸出路徑進入該方法

10、進入到output.checkOutputSpeces(job),查看源碼 --進入到FileOutPutFormat.java類中,定位到151行。 由此可以得到的一個結果是:輸出路徑的校驗是在job提交之前完成的

11、跳出checkSpecs(job);方法,繼續(xù)向下走 --JobSub Path jobStagingArea = JobSubmissionFiles.getStagingDir(cluster, conf); //獲取Job臨時工作目錄 --D:/tmp/hadoop/mapred/staging/Administrator1590679188/.staging 12、繼續(xù)向下走,定位到代碼157行,submitClient.getNewJobId(); //獲取提交的job的jobId JobID jobId = submitClient.getNewJobID(); //jobId=job_local11590679188_001本地模式下,我們知道每個job都有對應一個jobId,不管程序在本地還是yarn 13、Path submitJobDir = new Path(jobStagingArea, jobId.toString()); //生成Job提交路徑 --D:/tmp/hadoop/mapred/staging/Administrator1590679188/.staging/job_local11590679188_001 job 14、copyAndConfigureFiles(job, submitJobDir); //拷貝Job相關的配置信息,并將job的提交路徑在磁盤中創(chuàng)建出來

15、進入uploadResourcesInternal(job,submitJobDir);方法 從JobSubmitter類99行進入

16、進入uploadResourcesInternal(job,submitJobDir)方法,讀取配置項

17、進入writeSplits(job,submitJobDir);方法 writeSplits(job, submitJobDir); //生成切片信息

18、定位到 maps = writeNewSplits(job, jobSubmitDir); ,進入該方法 //生成切片進入

切片對象splits內(nèi)容為: file:///D:/input/inputWord/JaneEyre.txt:0+36306679 (文件,讀取位置從0到36306679) 切片是邏輯上的說法,記錄的就是讀取文件從什么位置到什么位置
19、切片對象splits中記錄的內(nèi)容是:讀取的是那個文件,從文件的0位置開始讀取到那個位置

20、return array.length; //返回切片的個數(shù)回到200行位置,將writeSplits(job, submitJobDir)返回的數(shù)值賦給maps
21、conf.setInt(MRJobConfig.NUM_MAPS, maps); //根據(jù)切片的個數(shù)設置啟動多少個MapTask 并最終在job的提交路徑中有兩個文件:
--job.split 切片具體信息
--job.splitmetainfo 切片描述信息

22、writeConf(conf, submitJobFile); //把job的所有配置信息寫到job的提交路徑下 最終在job的提交路徑下生成一個文件:job.xml。該文件記錄所有的xml配置信息(包括自己設置的)

23、根據(jù)切片信息(確定啟動mapTask的個數(shù))和配置信息,真正開始執(zhí)行job的任務
24、status = submitClient.submitJob( jobId, submitJobDir.toString(), job.getCredentials()); // 真正將job提交進行執(zhí)行

到此,相信大家對“java中整體MR工作機制是怎樣的”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
網(wǎng)頁題目:java中整體MR工作機制是怎樣的
轉載來源:http://chinadenli.net/article24/gsjoce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、網(wǎng)站導航、企業(yè)建站、ChatGPT、網(wǎng)站建設、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)