您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Java大數據開發中Hadoop的HDFS內部原理是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1、客戶端向NameNode請求上傳文件,NameNode會檢查目標文件是否已存在,父目錄是否存在。所以NameNode起到了統一管理的作用。
2、NameNode返回是否可以上傳,NameNode知道每一個數據節點的情況。
3、客戶端請求第一個塊( block)上傳到集群上哪幾個DataNode服務器上。
4、NameNode返回3個DataNode節點,分別為dn1、dn2、dn3三個節點。集群在啟動的時候NameNode就已經知道DataNode節點了、
5、客戶端請求dn1上傳數據,dn1收到請求會繼續調用dn2,然后dn2調用dn3,將這個通信管道建立完成。
6、dn1、dn2、dn3依次逐級應答客戶端。
7、客戶端開始往dn1上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet為單位,dn1收到一個packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答隊列等待應答。
8、當一個block傳輸完成之后,客戶端再次請求NameNode上傳第二個block的服務器。(重復執行3-7步)。
網絡拓撲概念
在數據處理中,兩個節點間的帶寬作為距離的衡量標準。
節點距離:兩個節點到達最近的共同祖先的距離總和。
例如,假設有數據中心d1(d1為集群)機架r1中的節點n1。該節點可以表示為/d1/r1/n1。利用這種標記,這里給出四種距離描述。
Range(/d1/r1/n1, /d1/r1/n1)=0(同一節點上的進程)
Range(/d1/r1/n1, /d1/r1/n2)=2(同一機架上的不同節點)
Range(/d1/r1/n1, /d1/r3/n2)=4(同一數據中心不同機架上的節點)
Range(/d1/r1/n1, /d2/r4/n2)=6(不同數據中心的節點)
注意:
對于n0 n1 n2 ,機架r1是共同祖先
對于機架r1 機架r12 機架r13,集群d1是共同祖先
依次類推......
舉例:為什么Range(/d1/r1/n1, /d2/r4/n2)=6?
副本存儲節點選擇
第一個副本在集群節點上,隨機選一個。
第二個副本和第一個副本位于相同機架上,但節點是隨機的。
第三個副本位于不同機架的隨機節點上。
HDFS讀數據的流程
1、客戶端向NameNode請求下載文件,NameNode會通過查詢元數據,找到DataNode地址,即文件塊所在的地址。
2、挑選一臺DataNode服務器,至于選哪一臺機器是就近原則,然后隨機 ,請求讀取數據。
3、DataNode開始傳輸數據給客戶端,從磁盤里面讀取數據輸入流,以packet為單位來做校驗。
4、客戶端以packet為單位接收,先在本地緩存,然后寫入目標文件。
關于“Java大數據開發中Hadoop的HDFS內部原理是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。