1、SNN(SecondaryNameNode)的數據合併過程
觸發合併:設定時間間隔、設定edits文件大小、Hadoop重啓
合併時,SNN會將NameNode中edits文件和fsimage文件拷貝過來,這時NN生成新的edits文件會繼續記錄新的讀寫請求。在SNN中將拷貝過來的fsimage和edits文件合併生成新的fsimage,並將其發送到NN中替換之前fsimage文件。
2、NameNode的實現
NN中維護着HDFS的元數據信息,並且將其存儲內存中,利用三個文件實現的,edits(保存對數據的操作記錄),fsimage(保存大部分的元數據),fstime(保存最近一次檢查的時間)。當有寫請求時,NN會先將請求寫入edits文件,成功後修改內存,然後客戶端返回處理結果。
3、DataNode的實現
在Hadoop中,數據是以塊的形式存儲在DN上。DN會不斷向NN發送心跳報告,用於告知NN存活狀態,並且接受NN發送過來的處理信息,然後對數據進行相應的處理。
DN在一定時間內沒有被NN接受到其發送的心跳報告,NN會認爲該DN宕掉,然後會將該DN維護的數據copy到其它存活的DN上。
4、HDFS的讀過程
客戶端Client,向NN發起讀取文件的請求;
NN會檢查Client權限,文件是否存在等信息,若正確,Client可以獲取到文件塊的存儲位置;
Client會選擇距離近的塊中進行讀取文件;
讀取結束後,會通知NN讀取結束。
5、HDFS的寫過程
客戶端Client,向NN發送寫文件的請求;
NN檢查要創建的文件是否存在,Client是否有權限,若正確,則記錄到edtis中;
Client自行將數據進行切分多個packet,並寫入隊列中,向NN請求新的block,獲取存儲的DN列表;
Client只將數據隊列發送到一個DN上,DN之間會通過pipeline(管道)寫入塊;
存儲成功返回成功信息給Client;
Client通知NN寫入結束。
6、HDFS的刪除過程
客戶端Client將要刪除的數據發送到NN上;
NN會將自身存儲的數據相關信息刪除,但並不會立即通知DN刪除數據;
在DN發送心跳報告時,纔會通知刪除數據。
7、HDFS的角色劃分
block:數據塊,HDFS中最基本的存儲單位,默認128M
NameNode:保存HDFS的元數據信息,包含文件和block的關係,block的數量、block和DN的關係
DataNode:真正存儲block的地方
SecondaryNameNode(Hadoop1.0/Hadoop2.0僞分佈式下):幫助NN進行元數據的合併,有一定的數據恢復能力
8、DataNode的容錯機制
在DN中,始終維護着指定數量的副本,默認三個,用於保證某個DN宕機後數據的完整性,並且這些副本存放策略是:與DN同一機器上、不同機架上、同一機架的不同機器上,更多的節點隨機存儲到空閒DN上。