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

Hadoop的源碼分析

本篇內(nèi)容主要講解“Hadoop的源碼分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Hadoop的源碼分析”吧!

為鹿寨等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及鹿寨網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、鹿寨網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

一、閱讀 HDFS 源碼的緣由

HDFS 是大數(shù)據(jù)的最基礎(chǔ)的設(shè)施了,幾乎所有的離線存儲(chǔ)都在 HDFS 上。

但是在大規(guī)模 HDFS 集群中,下面的問題通常會(huì)讓我們無(wú)比頭疼:

  • 元數(shù)據(jù)的量級(jí)超過億級(jí)之后,NameNode 的內(nèi)存也會(huì)變得非常巨大,啟動(dòng)和維護(hù)都變的異常困難;

  • 如何保障 HDFS 的高可用?

  • NameNode 里面發(fā)生長(zhǎng)時(shí)間的 GC 之后,導(dǎo)致 NameNode 進(jìn)程退出,該如何解決?

  • 如何優(yōu)化 DataNode 的鎖粒度,讓其性能更高效?

以上種種問題,都需要我們閱讀源碼,甚至要修改它的源碼才能解決。

所以雖然閱讀源碼非常痛苦,但是這個(gè)坎還是得過的。

二、如何閱讀 Hadoop 這樣的百萬(wàn)行代碼的開源項(xiàng)目

首先 hadoop 是用 java 寫的,所以一些 java 基礎(chǔ)知識(shí)必不可少,比如鎖,線程,設(shè)計(jì)模式,java 虛擬機(jī),java  io,不求很深入,基礎(chǔ)得知道。

其次,不能一行行的讀代碼,這樣很容易迷失在無(wú)邊際的代碼中,逃不出來,最后很容易就放棄了。

最后,以具體場(chǎng)景來驅(qū)動(dòng)代碼閱讀。比如本文就是以 NameNode 的啟動(dòng)過程,來驅(qū)動(dòng)代碼閱讀的。并且把關(guān)鍵的流程節(jié)點(diǎn)和類用流程圖記錄下來。

三、源碼走讀

找到 NameNode 類

從 main 方法開始,創(chuàng)建 NameNode

Hadoop的源碼分析

進(jìn)入這個(gè)方法:

Hadoop的源碼分析

有很多的 switch case ,由于我們啟動(dòng)命令是 hadoop-daemon.sh start namenode,所以直接運(yùn)行到 default  里面:

Hadoop的源碼分析

這是個(gè)比較重要的方法,實(shí)例化:

Hadoop的源碼分析

實(shí)例化方法里,有個(gè)比較重要的操作,startHttpServer(conf),啟動(dòng) 50070 端口,就是我們 50070 那個(gè)界面:

Hadoop的源碼分析

進(jìn)去,使用 ip 和 端口創(chuàng)建了 HttpServer

Hadoop的源碼分析

再來看這個(gè) start 方法

Hadoop的源碼分析

進(jìn)入 start 方法,發(fā)現(xiàn)創(chuàng)建了一個(gè) HttpServer2,這是 Hadoop 自己封裝的服務(wù)

Hadoop的源碼分析

然后綁定了很多 Servlet,每個(gè) Servlet 都是一個(gè)功能

Hadoop的源碼分析

可以看到畫紅線的,就是每個(gè)功能的地址。如果想看每個(gè)功能怎么實(shí)現(xiàn)的,可以點(diǎn)進(jìn)去 Servlet,看它的 doGet 或者 doPost 或者 doPut  方法。

Hadoop的源碼分析

看完了這個(gè),再退回到 NameNode 類中,然后就是去加載元數(shù)據(jù)(先不細(xì)看)

Hadoop的源碼分析

然后是創(chuàng)建 RPC 服務(wù)端,啟動(dòng)一個(gè)服務(wù)端,給別的組件調(diào)用

Hadoop的源碼分析

Hadoop的源碼分析

看這個(gè)方法:

Hadoop的源碼分析

看這個(gè)地方,這個(gè)就是使用 hadoop 的 RPC ,來創(chuàng)建一個(gè) RPC 服務(wù)端了。此時(shí)我們?cè)?NameNodeRpcServer 類中。

Hadoop的源碼分析

創(chuàng)建了之后,再回到 NameNode 中,發(fā)現(xiàn)這個(gè) NameNodeRpcServer 是 NameNode 類的一個(gè)屬性,意思是,NameNode  委托這個(gè)類去啟動(dòng)了 NameNodeRpcServer,在設(shè)計(jì)模式中,屬于組合。

Hadoop的源碼分析

然后我們?cè)賮砜催@個(gè) NameNodeRpcServer ,實(shí)現(xiàn)了很多的協(xié)議:

Hadoop的源碼分析

Hadoop的源碼分析

我們嘗試在 ClientProtocol 中,找一找是否有創(chuàng)建目錄的方法。

Hadoop的源碼分析

發(fā)現(xiàn)是有的,所以 NameNodeRpcServer 會(huì)去實(shí)現(xiàn)這個(gè)方法的。

到時(shí)候 NameNode 啟動(dòng)之后,就會(huì)往外提供服務(wù)了。

然后我們?cè)倩氐?NameNode 類,看最后一些功能:

Hadoop的源碼分析

startCommonServices,主要做了兩件事情,進(jìn)行資源監(jiān)察,檢查磁盤夠不夠;檢查是否可以退出安全模式。

Hadoop的源碼分析

這個(gè)方法會(huì)檢查配置文件中 fsimage 的目錄 和 editlog 的目錄磁盤資源是否充足。

最終會(huì)把磁盤是否足夠的布爾值賦值給這個(gè)變量。

private volatile boolean hasResourcesAvailable = false;

然后會(huì)判斷是否進(jìn)入安全模式:

Hadoop的源碼分析

進(jìn)入這個(gè)方法中:

Hadoop的源碼分析

這個(gè) getCompleteBlocksTotal() 返回的是能正常使用的 Block 個(gè)數(shù)。

這個(gè)是怎么算的呢?

Hadoop的源碼分析

在 HDFS 中,存在兩種類型的 Block,一種是 Complete 類型,即為正常可用的 Block;另一種是 underconstruction  類型,處于正在構(gòu)建的 Block,相減,就是正常可用的 Block 個(gè)數(shù)了。

然后進(jìn)入 checkMode 方法

Hadoop的源碼分析

進(jìn)去之后,有一個(gè) needEnter() 方法,這個(gè)方法里,判斷了是否進(jìn)入安全模式

Hadoop的源碼分析

這里面有三個(gè)進(jìn)入安全模式的條件:

Hadoop的源碼分析

我們來看第一個(gè)條件:

threshold != 0 && blockSafe < blockThreshold

threshold 默認(rèn)配置是 0.999 ,不等于0;

blockSafe 可以在當(dāng)前類中搜索一下。

Hadoop的源碼分析

這個(gè)就表示,DataNode 每次心跳都要和 NameNode 匯報(bào) 自己的 Block 個(gè)數(shù),每次匯報(bào),這個(gè)值都會(huì)加 1.

如果 DataNode 匯報(bào)上來的 Block 個(gè)數(shù)小于所有可用的 Block 個(gè)數(shù),就進(jìn)入安全模式。

再來看第二個(gè)條件:

datanodeThreshold != 0 && getNumLiveDataNodes() < datanodeThreshold

這個(gè)條件表示,所有可用的 DataNode 小于配置的個(gè)數(shù),則進(jìn)入安全模式。

但是 datanodeThreshold 的默認(rèn)配置值是 0,所以這個(gè)條件不啟用。

第三個(gè)條件:

!nameNodeHasResourcesAvailable()

這個(gè)方法就是我們前面檢查資源時(shí),賦值出來的變量:

Hadoop的源碼分析

如果 NameNode 的 images 和 editlogs 所在的目錄,磁盤空間不足,則進(jìn)入安全模式。

四、流程圖

最后我們用一個(gè)流程圖來總結(jié)一下 NameNode 啟動(dòng)流程:

Hadoop的源碼分析

NameNode啟動(dòng)流程

到此,相信大家對(duì)“Hadoop的源碼分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁(yè)題目:Hadoop的源碼分析
文章分享:http://www.chinadenli.net/article14/iiiige.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)標(biāo)簽優(yōu)化網(wǎng)站策劃面包屑導(dǎo)航網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)