1. 程式人生 > >Hadoop中NameNode、DataNode和Client三者之間的通訊方式是什麼?怎樣進行合作?

Hadoop中NameNode、DataNode和Client三者之間的通訊方式是什麼?怎樣進行合作?

一直沒有重視三者之間的通訊問題,在此整理一下提問:datanode之間有沒有互動?Hadoop安裝時為什麼進行ssh配置?

1.背景知識:

在HDFS系統中,一定要區分好什麼是主節點、從節點和客戶端。

需要清楚,只要你在叢集裡面的任何一個節點執行諸如 hdfs dfs -ls / 之類的命令操作,那麼你就使用的是主節點或者從節點,否則你使用的就是客戶端。注意,客戶端沒有包括在Hadoop叢集之中。在學習Hadoop之初經常不知道這種問題。

2.通訊方式簡單地講:
client和namenode之間是通過rpc通訊;
datanode和namenode之間是通過rpc通訊;
client和datanode之間是通過簡單的socket通訊;

datanode在MapReduce任務執行時,由於一行資料可能分佈在兩個資料塊上,所以可能會從其他datanode進行讀取資料資訊,所以datanode之間有通訊,通過rpc進行。

RPC通訊是一種高可用的通訊方式,由於沒有過多涉及網路通訊的方式,請讀者自行百度。呵呵。。。

3.Hadoop安裝時為什麼進行ssh配置?

Hadoop在執行諸如start-dfs.sh或者start-yarn.sh命令時,我們會從主節點執行上述兩條命令,然後主節點會通過ssh通訊,登入到從節點執行相關的hadoop-damen.sh start datanode之類的工作,然後之後namenode向datanode傳送資料塊以及datanode向namenode傳送心跳等一系列問題都是通過rpc進行的。所以,要進行ssh免密碼登入配置。

另外,ssh配置時,ssh公鑰只需要將namenode的公鑰拷貝到datanode上即可如果不需要datanode免密碼登入namenode則不需要將datanode的公鑰拷貝到namenode。

參考我的另一篇文章:ssh免密碼登入的原理

4.讀寫解析:

以hdfs檔案讀寫為例:

A.圖示:

B.  NameNode可以看作是分散式檔案系統中的管理者,主要負責管理檔案系統的名稱空間、叢集配置資訊和儲存塊的複製等。NameNode會將檔案系統的Meta-data儲存在記憶體中,這些資訊主要包括了檔案資訊、每一個檔案對應的檔案塊的資訊和每一個檔案塊在DataNode的資訊等。
DataNode是檔案儲存的基本單元,它將Block儲存在本地檔案系統中,儲存了Block的Meta-data,同時週期性地將所有存在的Block資訊傳送給NameNode。
Client就是需要獲取分散式檔案系統檔案的應用程式。

C.檔案寫入
    Client向NameNode發起檔案寫入的請求。
    NameNode根據檔案大小和檔案塊配置情況,返回給Client應該向哪一個DataNode寫入資料。
    Client將檔案劃分為多個Block,根據DataNode的地址資訊,按順序寫入到每一個DataNode塊中。

D.檔案讀取
    Client向NameNode發起檔案讀取的請求。
    NameNode返回檔案儲存的DataNode的資訊。
    Client讀取檔案資訊。

注意,在這4個過程中,namenode自身並沒有進行任何關於實際資料的讀寫操作,只是將資料的資訊(包括塊的位置、塊的大小)進行儲存和展示。

感謝您閱讀我的部落格,由於作者水平有限,錯漏缺點在所難免,希望得到您的批評指正,祝您工作如意,學習順利!

############################################################

轉載請註明出處,謝謝!原文地址:

############################################################