亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hadoop的源碼分析

發布時間:2021-12-09 14:09:16 來源:億速云 閱讀:184 作者:iii 欄目:大數據

本篇內容主要講解“Hadoop的源碼分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Hadoop的源碼分析”吧!

一、閱讀 HDFS 源碼的緣由

HDFS 是大數據的最基礎的設施了,幾乎所有的離線存儲都在 HDFS 上。

但是在大規模 HDFS 集群中,下面的問題通常會讓我們無比頭疼:

  • 元數據的量級超過億級之后,NameNode 的內存也會變得非常巨大,啟動和維護都變的異常困難;

  • 如何保障 HDFS 的高可用?

  • NameNode 里面發生長時間的 GC 之后,導致 NameNode 進程退出,該如何解決?

  • 如何優化 DataNode 的鎖粒度,讓其性能更高效?

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

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

二、如何閱讀 Hadoop 這樣的百萬行代碼的開源項目

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

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

最后,以具體場景來驅動代碼閱讀。比如本文就是以 NameNode 的啟動過程,來驅動代碼閱讀的。并且把關鍵的流程節點和類用流程圖記錄下來。

三、源碼走讀

找到 NameNode 類

從 main 方法開始,創建 NameNode

Hadoop的源碼分析

進入這個方法:

Hadoop的源碼分析

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

Hadoop的源碼分析

這是個比較重要的方法,實例化:

Hadoop的源碼分析

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

Hadoop的源碼分析

進去,使用 ip 和 端口創建了 HttpServer

Hadoop的源碼分析

再來看這個 start 方法

Hadoop的源碼分析

進入 start 方法,發現創建了一個 HttpServer2,這是 Hadoop 自己封裝的服務

Hadoop的源碼分析

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

Hadoop的源碼分析

可以看到畫紅線的,就是每個功能的地址。如果想看每個功能怎么實現的,可以點進去 Servlet,看它的 doGet 或者 doPost 或者 doPut  方法。

Hadoop的源碼分析

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

Hadoop的源碼分析

然后是創建 RPC 服務端,啟動一個服務端,給別的組件調用

Hadoop的源碼分析

Hadoop的源碼分析

看這個方法:

Hadoop的源碼分析

看這個地方,這個就是使用 hadoop 的 RPC ,來創建一個 RPC 服務端了。此時我們在 NameNodeRpcServer 類中。

Hadoop的源碼分析

創建了之后,再回到 NameNode 中,發現這個 NameNodeRpcServer 是 NameNode 類的一個屬性,意思是,NameNode  委托這個類去啟動了 NameNodeRpcServer,在設計模式中,屬于組合。

Hadoop的源碼分析

然后我們再來看這個 NameNodeRpcServer ,實現了很多的協議:

Hadoop的源碼分析

Hadoop的源碼分析

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

Hadoop的源碼分析

發現是有的,所以 NameNodeRpcServer 會去實現這個方法的。

到時候 NameNode 啟動之后,就會往外提供服務了。

然后我們再回到 NameNode 類,看最后一些功能:

Hadoop的源碼分析

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

Hadoop的源碼分析

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

最終會把磁盤是否足夠的布爾值賦值給這個變量。

private volatile boolean hasResourcesAvailable = false;

然后會判斷是否進入安全模式:

Hadoop的源碼分析

進入這個方法中:

Hadoop的源碼分析

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

這個是怎么算的呢?

Hadoop的源碼分析

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

然后進入 checkMode 方法

Hadoop的源碼分析

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

Hadoop的源碼分析

這里面有三個進入安全模式的條件:

Hadoop的源碼分析

我們來看第一個條件:

threshold != 0 && blockSafe < blockThreshold

threshold 默認配置是 0.999 ,不等于0;

blockSafe 可以在當前類中搜索一下。

Hadoop的源碼分析

這個就表示,DataNode 每次心跳都要和 NameNode 匯報 自己的 Block 個數,每次匯報,這個值都會加 1.

如果 DataNode 匯報上來的 Block 個數小于所有可用的 Block 個數,就進入安全模式。

再來看第二個條件:

datanodeThreshold != 0 && getNumLiveDataNodes() < datanodeThreshold

這個條件表示,所有可用的 DataNode 小于配置的個數,則進入安全模式。

但是 datanodeThreshold 的默認配置值是 0,所以這個條件不啟用。

第三個條件:

!nameNodeHasResourcesAvailable()

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

Hadoop的源碼分析

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

四、流程圖

最后我們用一個流程圖來總結一下 NameNode 啟動流程:

Hadoop的源碼分析

NameNode啟動流程

到此,相信大家對“Hadoop的源碼分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節
推薦閱讀:
  1. hadoop的HA
  2. Hadoop的RPC

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临泽县| 盘山县| 泸州市| 涟源市| 紫阳县| 秭归县| 安阳县| 无锡市| 南通市| 杭锦后旗| 石楼县| 宁明县| 莱阳市| 古浪县| 揭东县| 万荣县| 镇巴县| 维西| 虹口区| 潜江市| 连平县| 姚安县| 拉萨市| 昌吉市| 高陵县| 剑河县| 三门峡市| 青神县| 嘉鱼县| 怀远县| 霍州市| 青海省| 潜江市| 平顺县| 江口县| 高青县| 乐都县| 任丘市| 沐川县| 乳源| 泰和县|