溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么進(jìn)行Hadoop源代碼分析

發(fā)布時(shí)間:2021-12-01 15:15:51 來(lái)源:億速云 閱讀:114 作者:柒染 欄目:云計(jì)算

這篇文章給大家介紹 怎么進(jìn)行Hadoop源代碼分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

大家都熟悉文件系統(tǒng),在對(duì)HDFS進(jìn)行分析前,我們并沒(méi)有花很多的時(shí)間去介紹HDFS的背景,畢竟大家對(duì)文件系統(tǒng)的還是有一定的理解的,而且也有很好的文檔。在分析Hadoop的MapReduce部分前,我們還是先了解系統(tǒng)是如何工作的,然后再進(jìn)入我們的分析部分。

怎么進(jìn)行Hadoop源代碼分析 

以Hadoop帶的wordcount為例子(下面是啟動(dòng)行):
hadoop jar hadoop-0.19.0-examples.jar wordcount /usr/input/usr/output
用戶提交一個(gè)任務(wù)以后,該任務(wù)由JobTracker協(xié)調(diào),先執(zhí)行Map階段(圖中M1,M2和M3),然后執(zhí)行Reduce階段(圖中R1和R2)。Map階段和Reduce階段動(dòng)作都受TaskTracker監(jiān)控,并運(yùn)行在獨(dú)立于TaskTracker的Java虛擬機(jī)中。
我們的輸入和輸出都是HDFS上的目錄(如上圖所示)。輸入由InputFormat接口描述,它的實(shí)現(xiàn)如ASCII文件,JDBC數(shù)據(jù)庫(kù)等,分別處理對(duì)于的數(shù)據(jù)源,并提供了數(shù)據(jù)的一些特征。通過(guò)InputFormat實(shí)現(xiàn),可以獲取InputSplit接口的實(shí)現(xiàn),這個(gè)實(shí)現(xiàn)用于對(duì)數(shù)據(jù)進(jìn)行劃分(圖中的splite1到splite5,就是劃分以后的結(jié)果),同時(shí)從InputFormat也可以獲取RecordReader接口的實(shí)現(xiàn),并從輸入中生成<k,v>對(duì)。有了<k,v>,就可以開(kāi)始做map操作了。
map操作通過(guò)context.collect(最終通過(guò)OutputCollector. collect)將結(jié)果寫(xiě)到context中。當(dāng)Mapper的輸出被收集后,它們會(huì)被Partitioner類(lèi)以指定的方式區(qū)分地寫(xiě)出到輸出文件里。我們可以為Mapper提供Combiner,在Mapper輸出它的<k,v>時(shí),鍵值對(duì)不會(huì)被馬上寫(xiě)到輸出里,他們會(huì)被收集在list里(一個(gè)key值一個(gè)list),當(dāng)寫(xiě)入一定數(shù)量的鍵值對(duì)時(shí),這部分緩沖會(huì)被Combiner中進(jìn)行合并,然后再輸出到Partitioner中(圖中M1的黃顏色部分對(duì)應(yīng)著Combiner和Partitioner)。
Map的動(dòng)作做完以后,進(jìn)入Reduce階段。這個(gè)階段分3個(gè)步驟:混洗(Shuffle),排序(sort)和reduce。
混洗階段,Hadoop的MapReduce框架會(huì)根據(jù)Map結(jié)果中的key,將相關(guān)的結(jié)果傳輸?shù)侥骋粋€(gè)Reducer上(多個(gè)Mapper產(chǎn)生的同一個(gè)key的中間結(jié)果分布在不同的機(jī)器上,這一步結(jié)束后,他們傳輸都到了處理這個(gè)key的Reducer的機(jī)器上)。這個(gè)步驟中的文件傳輸使用了HTTP協(xié)議。
排序和混洗是一塊進(jìn)行的,這個(gè)階段將來(lái)自不同Mapper具有相同key值的<key,value>對(duì)合并到一起。

Reduce階段,上面通過(guò)Shuffle和sort后得到的<key, (list of values)>會(huì)送到Reducer. reduce方法中處理,輸出的結(jié)果通過(guò)OutputFormat,輸出到DFS中。

關(guān)于 怎么進(jìn)行Hadoop源代碼分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI