HDFS元數據管理實戰篇
node
做者:尹正傑ide
版權聲明:原創做品,謝絕轉載!不然將追究法律責任。工具
一.HDFS元數據概述oop
1>.什麼是HDFS元數據fetch
NameNode的主要工做是存儲HDFS命名空間,HDFS元數據(或HDFS命名空間)是由inode(其存儲屬性,如權限,修改,訪問時間和磁盤空間配額)表示的文件和目錄的層次結構。命名空間還包括文件到塊ID的映射關係。
NameNode存儲HDFS元數據,而DataNode存儲實際的HDFS數據。當客戶端鏈接到Hadoop讀取和寫入數據時,它們首先鏈接到NameNode,從而直到實際數據塊存儲在哪裏或往哪一個DataNode寫入其數據。。
HDFS元數據包括如下信息:
(1)HDFS文件位置(持久化);
(2)HDFS文件的全部權和權限(持久化);
(3)HDFS數據塊的名稱(持久化);
(4)HDFS數據塊的位置(爲持久化,僅在內存中存儲,該信息由集羣的全部DataNodes節點彙報而來);
舒適提示:
除了上面的第4條,元數據文件fsimage包括以上列出的全部元數據。
2>.檢查點優化
NameNode維護命名空間樹,以及將數據塊映射到集羣中的DataNode。inode和塊列表一塊兒定義命名空間的元數據,稱爲映像(fsimage)。
NameNode將整個映像存儲在其內存中,並在NameNode文件系統上存儲該映像的記錄。命名空間的這個持久記錄稱爲檢查點。
NameNode將對HDFS文件系統的更改寫入日誌,命名爲編輯日誌。很重要的一點是,僅當NameNode啓動,用戶請求或者輔助節點或Standby NameNode建立新的檢查點時纔會改變檢查點,不然NameNode在運行時不會改變它的檢查點。
當NameNode啓動時,它會從磁盤上的檢查點初始化命名空間映像,並重播日誌中的全部更改。在開始爲客戶端提供服務以前,他會建立一個新的檢查點(fsimage文件)和一個空編輯日誌文件。
舒適提示:
fsimage文件包含存儲在DataNode上的數據塊和HDFS文件之間的映射信息。若是這個文件丟失或損壞,則存儲在DataNode上的HDFS數據沒法被訪問,好像全部的數據已經消失了!
3>.fsimage和編輯日誌spa
當客戶端將數據寫入HDFS時,寫操做會更改HDFS元數據,固然,這些更改將由NameNode記錄到編輯日誌中。同時,NameNode還將更新其元數據的內存。
每一個客戶端事務由NameNode記錄在預寫日誌中,NameNode在向客戶端發送確認以前刷新並同步編輯日誌。
NameNode處理來自集羣中多個客戶端的請求,所以爲了優化將這些事務保存到磁盤的過程,它批處理多個客戶端事務。
二.下載最新的fsimage文件日誌
1>.fsimage和編輯日誌的存儲位置code
fsimage和編輯日誌時與HDFS元數據相關聯的兩個關鍵結構。NameNode將這了兩個結構存儲在由hdfs-site.xml文件中的配置參數"dfs.namenode.name.dir"(映像文件)和"dfs.namenode.edits.dir"(編輯文件)指定的存儲路徑。
以下圖所示,是咱們上面提到的兩個參數指定的目錄內容。
舒適提示:
Secondary NameNode(或Standby NameNode)具備相同的文件結構。
另外須要注意的是,編輯日誌由多個編輯段組成的,每一個段都是以"edits_*"開頭的文件;fsimage文件固然以"fsimage_*"開頭。
2>.下載最新的映像(fsimage)文件xml
[root@hadoop105.yinzhengjie.com ~]# hdfs dfsadmin -help fetchImage -fetchImage <local directory>: Downloads the most recent fsimage from the Name Node and saves it in the specified local directory. [root@hadoop105.yinzhengjie.com ~]#
[root@hadoop105.yinzhengjie.com ~]# ll total 0 [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# hdfs dfsadmin -fetchImage ./ #下載最新的映像文件到當前目錄 20/09/02 00:54:34 INFO namenode.TransferFsImage: Opening connection to http://hadoop101.yinzhengjie.com:50070/imagetransfer?getimage=1&txid=latest 20/09/02 00:54:34 INFO common.Util: Combined time for fsimage download and fsync to all disks took 0.00s. The fsimage download took 0.00s at 3000.00 KB/s. Synchronous (fsync) write to disk of /root/./fsimage_0000000000000004419 took 0.00s. [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# [root@hadoop105.yinzhengjie.com ~]# ll total 4 -rw-r--r-- 1 root root 3731 Sep 2 00:54 fsimage_0000000000000004419 [root@hadoop105.yinzhengjie.com ~]#
3>.舒適提示
NameNode僅存儲文件系統元數據,例如磁盤上fsimage文件中的文件,塊,目錄和權限信息,它將實際塊位置信息保留在內存中。
當客戶端讀取數據時,NmaeNode會高速客戶端文件塊所在位置。在這一點上,客戶端不須要進一步與NameNode進行關於數據自己傳送的通訊。
因爲NameNode元數據具備的關鍵性質,所以應配置多個目錄做爲dfs.namenode.name.dir配置參數的值。在理想狀況下,推薦使用NFS設備掛載點,這樣作的目的是能夠保證數據的冗餘性。
三.離線映像查看器
1>.如何查看映像文件的內容呢?
下載映像文件後, 如何查看其內容呢?以下圖所示,下載的映像文件其是一個二進制文件,咱們不能使用文本工具去查看相應的內容(若是您強行這樣作,根本得不到該文件存儲的正確信息,以下圖所示)。 能夠使用離線映像查看器(oiv)查看fsimage文件的內容,從而瞭解集羣的命名空間。此工具將fsimage文件的內容轉換爲人類可讀的格式,並容許經過只讀WebHDFS API檢查HDFS的命名空間。 生產環境中fsimage文件通常都至關大(若是您的集羣數據量在剛剛達到PB級別,那麼映像文件一般都能達到GB的容量),OIV能夠幫助您快速處理文件的內容。正如其名,它能夠離線幫我們查看映像文件。 舒適提示: 上面咱們提到了如何下載映像文件,細心的小夥伴估計已經發現了,若是你能夠直接登陸到NameNode節點,壓根就無需下載映像文件。只要到對應的存儲目錄拷貝一份便可,千萬別試圖去修改它!(若是你之意要這樣作,修改前最好作好備份喲~)
2>.
3>.