以下內容基本都是自己的語言進行描述的,並不全是官方的說法,若有**說的不對可以在下面進行交流。
一 、角色 : 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...