HDFS儲存檔案的過程詳解

2021-09-23 10:35:32 字數 1152 閱讀 4745

以下內容基本都是自己的語言進行描述的,並不全是官方的說法,若有**說的不對可以在下面進行交流。

一 、角色 : namenode ,datanode ,client

1 namenode

namenode 負責維護整個檔案系統的資訊,包括:整個檔案樹,檔案的塊分布資訊,檔案系統的元資料,資料複製策略等 以下簡稱nn

2  datanode

儲存檔案內容,負責檔案實際的讀寫操作,保持與namenode的通訊,同步檔案塊資訊 以下簡稱dn

3 client 

發出儲存檔案請求 以下簡稱c 

二  具體過程

1  c 向nn發出建立檔案請求 客戶端可以指定兩個變數 ① dfs.replcation :3 ② block.size:128m 【副本數預設為3,塊大小預設為128m】 切分檔案block【hdfs的傳輸單位】

此時nn 要做以下事情:

(1) 檢查c是否有建立檔案許可權

(2) 檢查目錄結構是否可用

(3) 檢查集群是否可用

(4) 檢查租約(hdfs會給每乙個客戶端乙個租約lease,通過租約的持有來限制並行寫入檔案)

2  nn在以上校驗都通過的情況下會給客戶端乙個返回確認資訊。

3 客戶端拿到確認資訊後,發出addblock 操作。

(1)此時nn會給block分配可以寫入的dn資訊,分配考慮的因素有  ① 資料可靠性 ② 資料的寫入效率 ③ dn的負載均衡策略

(2)預設的分配dn的策略是:第乙個副本存入離客戶端最近的機架的dn上,第二個副本存入與第乙個副本不同機架上的dn,第三個副本存放在與第二個同一機架上不同dn上。

4 考慮以上因素後會返回給客戶端可寫入的dn節點佇列。

5 客戶端收到dn佇列資訊後,以pipeline形式寫入block資料。在寫入過程中每個步驟都會有ack確認,當得到成功寫入副本的數量小於最小寫入副本數時,會重新傳送此寫請求。最小寫入副本數預設是1 ,與此同時dn和nn也會進行心跳,對於那些副本小於三的進行副本的生成,生成考慮的策略與選擇dn節點需要考慮的一致。

6 當client收到ack訊息確認完成後,向nn匯報block完成。

7 新增下乙個block【從3流程開始】。

8 最終客戶端匯報完成,nn更新檔案狀態,客戶端釋放租約

hdfs檔案的儲存

以block塊的形式將大檔案進行相應的儲存 1 64m 2 128m 檔案線性切割成塊 偏移量offset byte block分散儲存在集群節點中 單一檔案block大小一致,檔案與檔案可以不一致 block可以設定副本數,副本分散在不同的節點中,副本數不要超過節點數量 檔案上傳可以設定block...

HDFS檔案儲存

理論上hdfs中儲存乙個檔案時會被分成多個block,這些block應該會存放在不同的節點中。例如我們hdfs中有乙個檔案hdfs dfs put flink 1.8.2 bin scala 2.11.tgz 這個檔案被分成了三個block,分別是block0 block1 block2 這三個bl...

HDFS寫檔案的過程

1 副本及儲存策略 2 寫檔案的網路流量及磁碟空間 網路流量 磁碟空間 檔案size dfs.replication3 寫資料的流程 client將檔案file1劃分出blocks block1 block2 block3.client向nn發出寫block的請求 檔案file1的block1 nn...