欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java中整體MR工作機制是怎樣的

本篇內(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)站推廣的服務。

1、整體MR工作機制源碼解讀(job提交流程)

1.1、job提交流程

--以wordCount案例為例,進行斷點調(diào)試
1、在WordCountDriver類中的job.waitForCompletion(true);處打上斷點(入口),以debug模式運行
	a.在Configuration conf = new Configuration();conf中做的操作是讀取所有相關的配置文件
	b.并將job對象創(chuàng)建出來,通過--Job job = Job.getInstance(conf);完成

java中整體MR工作機制是怎樣的

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行

java中整體MR工作機制是怎樣的

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); 方法,用于校驗輸出路徑進入該方法

java中整體MR工作機制是怎樣的

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

java中整體MR工作機制是怎樣的

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)建出來

java中整體MR工作機制是怎樣的

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

java中整體MR工作機制是怎樣的

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

java中整體MR工作機制是怎樣的 java中整體MR工作機制是怎樣的

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

java中整體MR工作機制是怎樣的

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

java中整體MR工作機制是怎樣的

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

19、切片對象splits中記錄的內(nèi)容是:讀取的是那個文件,從文件的0位置開始讀取到那個位置

java中整體MR工作機制是怎樣的

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 切片描述信息

java中整體MR工作機制是怎樣的

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

java中整體MR工作機制是怎樣的

23、根據(jù)切片信息(確定啟動mapTask的個數(shù))和配置信息,真正開始執(zhí)行job的任務

24、status = submitClient.submitJob( jobId, submitJobDir.toString(), job.getCredentials()); // 真正將job提交進行執(zhí)行

java中整體MR工作機制是怎樣的

到此,相信大家對“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)

網(wǎng)站托管運營