-
1 # 自以為神人的鳥人
-
2 # 資料僧
首先我們先了解HDFS有哪些特性,設計初衷是什麼,為了解決什麼問題。
1,解決硬體錯誤問題。HDFS能夠錯誤自檢,快速自動恢復。
2,高吞吐量。HDFS中更多的是考慮資料的批處理,而不是使用者的互動處理。
3,大規模的資料。能在一個集群裡面很容易擴充套件到數百個節點。
4,簡單的一致性模型。一個檔案經過建立、寫入和關閉之後就不需要改變。一次寫入多次讀取。從而簡化了資料一致性的問題,並且使高吞吐量的資料訪問成為可能。
5,移動計算比移動資料更加划算。HDFS為應用提供了將他們移動到資料附近的介面。
6,HDFS採取Master-Slave架構。一個Hdfs由一個namenode和一定數目的datanodes組成。
下圖是HDFS架構示意圖:
HDFS如何管理檔案
1,HDFS支援層次型檔案組織結構。檔案系統名字空間的層次結構和大多數的檔案系統類似,使用者可以建立、刪除、移動或者重新命名檔案。HDFS不支援使用者磁碟配額和反問許可權控制,不支援軟連結和硬連結,不支援檔案的執行許可權。NameNode負責維護檔案系統的名稱空間,任何對檔案的修改都被NameNode記錄下來。
2,Hdfs將元資料資訊儲存在fsimag和edits。我們可以看看fsimag和edits中的內容。
3,HDFS的元資料儲存機制:記憶體中有一份完整的元資料(記憶體meta data);磁碟有一個“準完整”的元資料映象(fsimage)檔案儲存在namenode的工作目錄中
4,NameNode如何管理元資料。
HDFS如何儲存檔案
1,資料檔案儲存在DataNode節點上,維護了blockId餘DataNode本地檔案的對映。需要保持和NameNode之間的心跳,來告知自己的資訊,方便NameNode來管控叢集。
2,Hdfs儲存的最小單位是塊。一個塊預設是128M或者256M,每個塊預設都儲存三分。當然問價塊的預設大小和儲存數量都是可以調整的。
3,Hdfs如何寫入檔案。
檔案按照流失的放入進行寫入。一開始是寫到本地臨時檔案中,當本地臨時檔案累積到一個數據塊的大小時,客戶端會從Namenode獲取一個Datanode列表用於存放副本。
寫入流程詳細解釋如下:
第一步:客戶端向NameNode發出寫檔案請求。
第二步:檢查是否已存在檔案、檢查許可權。若透過檢查,直接先將操作寫入EditLog,並返回輸出流物件。
第三步:client端按設定的塊大小切分檔案。
第四步:client將NameNode返回的分配的可寫的DataNode列表和Data資料一同傳送給最近的第一個DataNode節點,此後client端和NameNode分配的多個DataNode構成pipeline管道,client端向輸出流物件中寫資料。client每向第一個DataNode寫入一個packet,這個packet便會直接在pipeline裡傳給第二個、第三個…DataNode。
第五步:返回確認訊息
第六步:寫完資料關閉資料流
第七步:傳送完成訊號給NameNode
HDFS儲存檔案的注意事項
1,WAL,write ahead log,先寫Log,再寫記憶體,因為EditLog記錄的是最新的HDFS客戶端執行所有的寫操作。如果後續真實寫操作失敗了,由於在真實寫操作之前,操作就被寫入EditLog中了,故EditLog中仍會有記錄,我們不用擔心後續client讀不到相應的資料塊,因為在第5步中DataNode收到塊後會有一返回確認資訊,若沒寫成功,傳送端沒收到確認資訊,會一直重試,直到成功。
2,Hdfs透過校驗和,來保障資料的一致性。
3,假設寫2T的資料,我們設定的是三個備份,那麼需要6T的儲存。
4,在讀寫的過程中,如果發現DataNode掛掉了,會把死掉的節點的資料,複製到其它節點上去。
5,掛掉一個節點,甚至掛掉一個機架也沒有關係,在其它節點或者機架上有備份。如圖HDFS副本放置策略。
回覆列表
hdfs儲存資料分為三步,分別為元資料儲存、資料儲存和備份,元資料儲存在namenode,檔案資料及其副本儲存在datanode。元資料寫明檔案資料怎麼儲存和儲存在哪,有多少副本等等。