91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

DataNode是怎么向NameNode發送心跳得

發布時間:2021-10-15 15:47:07 來源:億速云 閱讀:177 作者:iii 欄目:web開發

這篇文章主要講解了“DataNode是怎么向NameNode發送心跳得”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“DataNode是怎么向NameNode發送心跳得”吧!

一、分布式系統中的心跳技術

心跳是分布式技術中常用的技術手段。心跳,顧名思義,就是以固定的頻率向其他節點匯報當前節點狀態的方式。收到心跳,一般可以認為發送心跳的這個節點在當前的網絡拓撲中是良好的。

當然,心跳匯報時,一般也會攜帶一些附加的狀態、元數據信息、當前節點的信息,以便其他節點管理。

心跳有兩種方式:

  • 單向的 heartbeat;

  • 交互的 ping-pong;

第一種方式下,target 進程需要定時給 detector 發送消息,告知自己的存活性。而 detector 無需給 target  回復任何消息,只是每隔一段時間去檢測 target 進程有沒有匯報。

第二種方式更為常見,比如我們的 redis 就是采用這種方式:

detector -> target: Are you ok? target -> detector: Yeah, pretty good.

Detector 發起檢測,如果 target 連續 N 次不回復消息,那么 detector 就認為其處于 non-active 狀態。

那么常用的心跳檢測機制有哪些:

(1)傳統的周期檢測心跳機制

其檢測方法很粗暴:設定一個超時時間 T,只要在 T 之內沒有收到對方的心跳包便可認為對方宕機,方法簡單有效,使用比較廣泛。

所以這個方法的重點就在于這個超時時間 T  的設置,設置的太短了,有可能會因為當前網絡阻塞導致誤判,讓這個節點下線,產生其他不必要的后果;設置的太長,會導致判斷“遲緩”,所以需要綜合各種情況來權衡和設定。

HDFS 就是使用的這種心跳機制。

(2)累積失效檢測機制

隨著網路負載的加大,Server 心跳的接收時間可能會大于上限值 T;但當網絡壓力減少時,心跳接收時間又會小于 T ,如果用一成不變的T  來反映心跳狀況,則會造成判斷”遲緩“或誤判。這個時候我們可以計算心跳延遲的概率,用這個概率來判斷是否發生故障,提高準確性。

二、DataNode 是如何向 NameNode 發送心跳的

我們從 hadoop 源碼看 DataNode 是如何發送心跳的

1、從 DataNode 類的 main 方法開始

DataNode是怎么向NameNode發送心跳得

2、創建 DataNode

DataNode是怎么向NameNode發送心跳得

3、實例化 DataNode

DataNode是怎么向NameNode發送心跳得

4、創建實例

DataNode是怎么向NameNode發送心跳得

5、 new 了 DataNode

DataNode是怎么向NameNode發送心跳得

6、 這個方法構造函數有點長,拉到最下面

DataNode是怎么向NameNode發送心跳得

7、然后來到這個方法里

這個方法表面看起來是刷新 NameNode,實際上里面做了兩件事情,把自己注冊到 NameNode 上,另外一件事情是向 NameNode  定時發送心跳。

DataNode是怎么向NameNode發送心跳得

8、點進去,現在是在 BlockPoolManager 里面

DataNode是怎么向NameNode發送心跳得

9、再來到這個方法里

DataNode是怎么向NameNode發送心跳得

10、發現它在遍歷這個 BPOfferService

DataNode是怎么向NameNode發送心跳得

這里大致說明一下 offerServices 是個什么數據結構。

用一張圖來表示吧

DataNode是怎么向NameNode發送心跳得

那個 offerServices 其實裝的就是最左邊的 BPOfferService。

每個 BPOfferService 里面有兩個 BpServiceActor,每個 BpServiceActor 對應一個 NameNode。

如果是上圖中的高可用,那么一主一備兩個 NameNode,分別對應一個 BpServiceActor。

所以遍歷 offerService 其實就是在遍歷整個集群每個聯邦的每個 NameNode 節點。

11、開始遍歷(當前類:BpOfferService)

DataNode是怎么向NameNode發送心跳得

12、線程 start(當前類:BPServiceActor)

DataNode是怎么向NameNode發送心跳得

再點進去已經是 Thread 的方法了,可見它其實是個線程。

那我們應該看這個類的 run 方法。

13、線程的運行內容

run 方法的上半部分是往 NameNode 注冊,下半部分是發送心跳

DataNode是怎么向NameNode發送心跳得

14、發送心跳

DataNode是怎么向NameNode發送心跳得

可以看到這是一個 while 循環,每隔一段時間(dnConf.heartBeatInterval = 3秒)就會執行一次

可以看到 DataNode 的心跳就是采用了周期性檢測機制,每隔 3 s ,往所有的 NameNode 發送心跳。

15、再點進去,已經是 NameNode 的 proxy 代理方法了。

DataNode是怎么向NameNode發送心跳得

因為它是靠 rpc 通信的,此時 DataNode 是客戶端,NameNode 是服務端。

這個時候,我們應該看 NameNodeRpcServer 方法,具體的實現是在這個方法里的。

16、看服務端的處理,此時我們在 NameNodeRpcServer 類中

DataNode是怎么向NameNode發送心跳得

這個方法里的具體就不看了,(其實也很重要的的)。

大致就是把 DataNode 心跳包的基本信息(比如本節點的存儲容量信息等)更新到 NameNode 對應的結構中。

并且更新上一次心跳時間,以便下次判斷 DataNode 是否心跳超時。

其實心跳就是這么樸素了。

最后,NameNode 會在心跳的響應中,告訴 DataNode 應該做些什么事情,比如把本節點的 Block 備份到其他節點上去。

也就是說,NameNode 本身不會和 DataNode 通信,而是在心跳信息中告訴 DataNode 該做什么。

感謝各位的閱讀,以上就是“DataNode是怎么向NameNode發送心跳得”的內容了,經過本文的學習后,相信大家對DataNode是怎么向NameNode發送心跳得這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

密山市| 元阳县| 育儿| 始兴县| 德钦县| 玛纳斯县| 皋兰县| 根河市| 乌鲁木齐县| 蓬溪县| 沂源县| 建昌县| 留坝县| 商河县| 沙河市| 阳江市| 精河县| 林甸县| 安仁县| 长泰县| 南江县| 应用必备| 邓州市| 城口县| 左贡县| 西吉县| 榆中县| 根河市| 密云县| 万州区| 洛宁县| 通河县| 岑巩县| 芦溪县| 鄂伦春自治旗| 灌阳县| 永康市| 孟连| 屏南县| 东城区| 九江市|