咱們都知道Hadoop的底層是HDFS-Hadoop Distributed File System.也就是Hadoop分佈式文件系統。 node
全部的運算都是基於HDFS文件的,它的核心關鍵詞有:主從NameNode VS DataNode. linux
-----------其中NameNode上存儲的就是元數據---描述數據文件的meta信息。 redis
存在形式有:內存信息+硬盤文件信息。 數據庫
這段時間,就讓咱們一塊兒來了解HDFS的元數據以及HDFS文件系統的要義吧。 框架
------------------------------------------------------------------------------------------------- 分佈式
試想,若是讓咱們本身設計一個文件系統,咱們須要元數據存儲哪些信息? oop
其實這取決於信息獲得哪些功能? spa
我的認爲功能包括: 設計
1)namenode和全部datanode的IP,端口,文件夾,容量等信息。這至關於一個整體的文件系統框架描述。 日誌
2)每一個datanode的文件的層次描述,文件目錄關係。這個比1就更細緻了。
3)對於某個文件,知道拆分了幾塊,每塊的大小,備份狀況,分別分佈在哪些datanode上的哪些路徑上。
從1咱們能夠獲得分佈式文件系統框架的骨架,從2咱們能夠獲得分佈式文件系統的血肉,從3咱們能夠獲得具體的訪問一個文件的方式。
有了以上3個,實際上就是namenode的元數據信息的組成部分,一切從應用的需求出發才能夠獲得設計圖。
-------------------------------------------------------------------------------------------------
啓動時,元數據從硬盤裏被FSImage讀取到內存中。
在持久化時,元數據被FSImage持久化到硬盤中。
同時硬盤中也會存放操做日誌edits.我目前的理解是:把操做日誌的行爲累加起來---》最終的元數據。
這個也就像是redis裏乾的同樣了。不少數據庫也是這麼操做的,這個沒啥好說的,很簡答!
-------------------------------------------------------------------------------------------------
HDFS也引入了INode,這實際上跟linux中的文件系統中的INode是同樣的,其次就是因爲是分佈式文件系統
因此每一個文件的分片在hdfs中就成了Block。塊。
這裏必需要強調:塊是按照物理大小分的,而不是分局邏輯大小,這樣會引入什麼問題?
就是一個邏輯記錄可能會分到2個塊中,而這2個塊可能仍是跨機器的。
這些hadoop都會解決。之後再討論。
-------------------------------------------------------------------------------------------------
理論講得再多,也不及代碼來得實在而痛快。
下面就講一講HDFS的format究竟作了哪些事情!