1. 程式人生 > >大資料筆記之分散式檔案系統HDFS筆記一

大資料筆記之分散式檔案系統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檔案包含檔案系統中所有目錄和檔案inode的序列化形式。每個inode是一個檔案或目錄的元資料的內部表示,幷包含此類資訊:檔案的複製等級、修改和訪問時間、訪問許可權、塊大小以及組成檔案的塊。對於目錄,則儲存修改時間、許可權和配額元資料 • FsImage檔案沒有記錄檔案包含哪些塊以及每個塊儲存在哪個資料節點。而是由名 稱節點把這些對映資訊保留在記憶體中,當資料節點加入HDFS叢集時,資料節點會把自己所包含的塊列表告知給名稱節點,此後會定期執行這種告知操作,以確保名稱節點的塊對映是最新的。

名稱節點的啟動

在名稱節點啟動的時候,它會將FsImage檔案中的內容載入到記憶體中,之後再執行 EditLog檔案中的各項操作,使得記憶體中的元資料和實際的同步,存在記憶體中的元數 據支援客戶端的讀操作。 • 一旦在記憶體中成功建立檔案系統元資料的對映,則建立一個新的FsImage檔案和一個 空的EditLog檔案 • 名稱節點起來之後,HDFS中的更新操作會重新寫到EditLog檔案中,因為FsImage文 件一般都很大(GB級別的很常見),如果所有的更新操作都往FsImage檔案中新增 ,這樣會導致系統執行的十分緩慢,但是,如果往EditLog檔案裡面寫就不會這樣, 因為EditLog 要小很多。每次執行寫操作之後,且在向客戶端傳送成功程式碼之前, edits檔案都需要同步更新

當名稱節點重啟的時候,名 稱節點需要先將FsImage裡面的所有內容映像到記憶體中,然後再一條一條地執行EditLog 中的記錄,當EditLog檔案非常大的時候,會導致名稱節點啟動操作非常慢,而在這段 時間內HDFS系統處於安全模式,一直無法對外提供寫操作,影響了使用者的使用。 解決辦法是第二名稱節點(:SecondaryNameNode)

第二名稱節點是HDFS架構中的一個組成部分,它是用來儲存名稱節點中對HDFS 元 資料資訊的備份,並減少名稱節點重啟的時間。SecondaryNameNode一般是單獨運 行在一臺機器上 在這裡插入圖片描述 資料節點(DataNode) • 資料節點是分散式檔案系統HDFS的工作節點,負責資料的儲存和讀取,會根據客戶端或 者是名稱節點的排程來進行資料的儲存和檢索,並且向名稱節點定期傳送自己所儲存的塊 的列表 • 每個資料節點中的資料會被儲存在各自節點的本地Linux檔案系統中