HDFS主要流程

一、 更改目錄操作

該操作基本只和NameNode進行交互

rename/mkdir等操作

NameNode在目錄樹數(shù)據(jù)結(jié)構(gòu)上對應(yīng)位置創(chuàng)建新的目錄節(jié)點并持久化到日志中。

delete操作以及增加副本等相對復(fù)雜的操作

NameNode標(biāo)記需要刪除的文件并且持久化到日志中,等到DataNode提交心跳的時會獲取到刪除的命令,之后DataNode執(zhí)行該刪除指令,此時數(shù)據(jù)才會真正的被刪除。

二、讀取文件操作(NameNode僅提供數(shù)據(jù)塊定位請求)

  1. Client先打開一個輸入流DFSInputStream

  2. 向NameNode獲取文件開始部分數(shù)據(jù)塊存儲的地址(返回副本所在的數(shù)據(jù)節(jié)點地址并且利用網(wǎng)絡(luò)的拓撲信息進行簡單的排序)

  3. Client和最近的數(shù)據(jù)節(jié)點建立聯(lián)系,然后讀取該塊的信息直到塊的末端,再關(guān)閉連接

重復(fù)2,3步

讀取完畢后關(guān)閉輸入流

2,3步對Client是透明的,實際是由DFSInputStream來進行的,Client是僅跟DFSInputStream進行交互

在讀取的時候會同時獲取數(shù)據(jù)以及數(shù)據(jù)校驗和進行校驗數(shù)據(jù)的一致性,若是校驗錯誤則報告給NameNode,并嘗試從別的數(shù)據(jù)節(jié)點中讀取另外一個副本的文件內(nèi)容。讓客戶端來進行校驗可以降低數(shù)據(jù)節(jié)點的負載,均衡各節(jié)點的計算能力

如果讀取的時候數(shù)據(jù)節(jié)點發(fā)生錯誤,那么Client會嘗試讀取下一個數(shù)據(jù)塊的位置并且記住故障的數(shù)據(jù)節(jié)點并不再進行嘗試。

NameNode并不會一次性返回所有數(shù)據(jù)塊的信息,每次僅返回一組數(shù)據(jù)塊的信息

三、寫文件操作

  1. Client打開輸出流DFSDataOutputStream

  2. NameNode在文件系統(tǒng)的命名空間創(chuàng)建新文件(做一些檢查)并記錄到編輯日志中

  3. DFSDataOutputStream向NameNode申請數(shù)據(jù)塊(返回數(shù)據(jù)塊標(biāo)識、版本號等信息)

  4. 與DataNode進行連接并且開始鏈式寫數(shù)據(jù)以及逆流ack操作

  5. 寫完一個數(shù)據(jù)塊就向NameNode提交數(shù)據(jù)塊;若是還有數(shù)據(jù)再繼續(xù)申請數(shù)據(jù)塊

  6. 全部寫完后Client關(guān)閉輸出流

  7. 輸出流通知NameNode關(guān)閉文件,完成一次正常的寫文件流程

若是寫的時候有數(shù)據(jù)節(jié)點故障,則

① 數(shù)據(jù)流寫通道關(guān)閉

② 已經(jīng)發(fā)送到管道卻還沒收到ack的數(shù)據(jù)會被添加到輸出隊列

(當(dāng)作沒有寫過來處理從而保證任一節(jié)點故障都不會丟數(shù)據(jù))

③ 當(dāng)前正常工作的DataNode上的數(shù)據(jù)塊(指正在寫的這個塊)會被賦予一個新的版本號并報告NameNode,故障的DataNode恢復(fù)過來的時候會因為數(shù)據(jù)塊版本號跟NameNode保存的版本號不一致而被刪除。

④ 數(shù)據(jù)流管道中刪除錯誤DataNode,重新建立管道并繼續(xù)寫數(shù)據(jù)到正常的DataNode

只要成功寫入的副本數(shù)滿足dfs.replication.min(默認1)的值,則認為寫操作是成功的。后續(xù)這個數(shù)據(jù)塊會被復(fù)制,直到滿足文件的副本系數(shù)要求。

四、數(shù)據(jù)節(jié)點啟動和心跳

  1. DataNode先跟NameNode比對版本號,檢查它們之間的HDFS版本是 一致的

  2. DataNode向NameNode進行注冊,NameNode會檢查該DataNode是否是該集群的成員,保證整個系統(tǒng)的一致性。

  3. 成功注冊后DataNode會將當(dāng)前管理的數(shù)據(jù)塊信息上報給NameNode,幫助NameNode建立HDFS文件數(shù)據(jù)塊到數(shù)據(jù)節(jié)點的映射關(guān)系

五、Secondarynamenode合并元數(shù)據(jù)

Client對文件系統(tǒng)的目錄樹進行修改的操作都會被NameNode記錄在編輯日志里,保證出現(xiàn)故障的時候可以快速恢復(fù)。為了避免編輯日志過大導(dǎo)致恢復(fù)時間過長,HDFS引入了檢查點機制(fsimage)

fsimage是文件系統(tǒng)元數(shù)據(jù)的持久性檢查點

NameNode與DataNode的交互

NameNode需要只需要準備一個DatanodeCommand數(shù)組,里面存放各種操作指令。在DataNode提交心跳的時候會拉取該數(shù)組回去并且執(zhí)行里面的操作指令。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容