大資料筆記之分散式檔案系統HDFS筆記一
分散式檔案系統就是把檔案分佈儲存到多個計算機節點上,成千上萬的計算機節點構成計算機叢集。這些節點分為兩類。
- 一類叫做“主節點”(Master Node),也叫做“名稱節點”(Name Node)
- 另一類叫“從節點”(Slave Node)或者也被稱為“資料節點”(DataNode)
1.HDFS
總體而言,HDFS要實現以下目標: 相容廉價的硬體裝置 流資料讀寫 大資料集 簡單的檔案模型 強大的跨平臺相容性 HDFS特殊的設計,在實現上述優良特性的同時,也使得自身具有一些應用局 限性,主要包括以下幾個方面: 不適合低延遲資料訪問 無法高效儲存大量小檔案 不支援多使用者寫入及任意修改檔案
1.1 塊
HDFS預設一個塊64MB,一個檔案被分成多個塊,以塊作為儲存單位 帶來的好處有:
- 支援大規模檔案儲存
- 簡化系統設計
- 適合資料備份
1.2 名稱節點和資料節點
• 在HDFS中,名稱節點(NameNode)負責管理分散式檔案系統的名稱空間(Namespace),保 存了兩個核心的資料結構,即FsImage和EditLog • FsImage用於維護檔案系統樹以及檔案樹中所有的檔案和資料夾的元資料 • 操作日誌檔案EditLog中記錄了所有針對檔案的建立、刪除、重新命名等操作 • 名稱節點記錄了每個檔案中各個塊所在的資料節點的位置資訊,但並不是持久化儲存這些資訊,而是在系統每次啟動時掃描所有資料節點重構得到這些資訊。
名稱節點的啟動
在名稱節點啟動的時候,它會將FsImage檔案中的內容載入到記憶體中,之後再執行 EditLog檔案中的各項操作,使得記憶體中的元資料和實際的同步,存在記憶體中的元數 據支援客戶端的讀操作。 • 一旦在記憶體中成功建立檔案系統元資料的對映,則建立一個新的FsImage檔案和一個 空的EditLog檔案 • 名稱節點起來之後,HDFS中的更新操作會重新寫到EditLog檔案中,因為FsImage文 件一般都很大(GB級別的很常見),如果所有的更新操作都往FsImage檔案中新增 ,這樣會導致系統執行的十分緩慢,但是,如果往EditLog檔案裡面寫就不會這樣, 因為EditLog 要小很多。每次執行寫操作之後,且在向客戶端傳送成功程式碼之前, edits檔案都需要同步更新
當名稱節點重啟的時候,名 稱節點需要先將FsImage裡面的所有內容映像到記憶體中,然後再一條一條地執行EditLog 中的記錄,當EditLog檔案非常大的時候,會導致名稱節點啟動操作非常慢,而在這段 時間內HDFS系統處於安全模式,一直無法對外提供寫操作,影響了使用者的使用。 解決辦法是第二名稱節點(:SecondaryNameNode)
第二名稱節點是HDFS架構中的一個組成部分,它是用來儲存名稱節點中對HDFS 元 資料資訊的備份,並減少名稱節點重啟的時間。SecondaryNameNode一般是單獨運 行在一臺機器上 資料節點(DataNode) • 資料節點是分散式檔案系統HDFS的工作節點,負責資料的儲存和讀取,會根據客戶端或 者是名稱節點的排程來進行資料的儲存和檢索,並且向名稱節點定期傳送自己所儲存的塊 的列表 • 每個資料節點中的資料會被儲存在各自節點的本地Linux檔案系統中