HBase在HDFS上的目錄介紹


總所周知,HBase 是天生就是架設在 HDFS 上,在這個分布式文件系統中,HBase 是怎么去構建自己的目錄樹的呢?

第一,介紹系統級別的目錄樹。

一、0.94-cdh4.2.1版本

系統級別的一級目錄如下,用戶自定義的均在這個/hbase 下的一級子目錄下

/hbase/-ROOT-

/hbase/.META.

/hbase/.archive

/hbase/.corrupt

/hbase/.hbck

/hbase/.logs

/hbase/.oldlogs

/hbase/.snapshot

/hbase/.tmp

/hbase/hbase.id

/hbase/hbase.version

1、/hbase/-ROOT-

hbase讀寫數據的時候采用三級尋址方式,首先找到從 zk 中找到ROOT 表所在位置,通過 ROOT 表找到 META 表所在位置,然后再從 META 表定位到你要讀寫數據Region 所在的Regionserver。所以-ROOT-目錄對應 HBase 中的系統表ROOT,就不多做解釋了。

2、/hbase/.META.

     就是存儲1中介紹的 META 表的存儲路徑。

3、/hbase/.archive

HBase 在做 Split或者 compact 操作完成之后,會將 HFile 移到.archive 目錄中,然后將之前的 hfile 刪除掉,該目錄由 HMaster 上的一個定時任務定期去清理。

4、/hbase/.corrupt

存儲HBase做損壞的日志文件,一般都是為空的。

5、/hbase/.hbck

     HBase 運維過程中偶爾會遇到元數據不一致的情況,這時候會用到提供的 hbck 工具去修復,修復過程中會使用該目錄作為臨時過度緩沖。

6、/hbase/.logs

大家都知道 HBase 是支持 WAL(Write Ahead Log) 的,HBase 會在第一次啟動之初會給每一台 RegionServer 在.log 下創建一個目錄,若客戶端如果開啟WAL 模式,會先將數據寫入一份到.log 下,當 RegionServer crash 或者目錄達到一定大小,會開啟 replay 模式,類似 MySQL 的 binlog。

7、/hbase/.oldlogs

當.logs 文件夾中的 HLog 沒用之后會 move 到.oldlogs 中,HMaster 會定期去清理。

8、/hbase/.snapshot

hbase若開啟了 snapshot 功能之后,對某一個用戶表建立一個 snapshot 之后,snapshot 都存儲在該目錄下,如對表test 做了一個 名為sp_test 的snapshot,就會在/hbase/.snapshot/目錄下創建一個sp_test 文件夾,snapshot 之后的所有寫入都是記錄在這個 snapshot 之上。

9、/hbase/.tmp

     當對表做創建或者刪除操作的時候,會將表move 到該 tmp 目錄下,然后再去做處理操作。

10、/hbase/hbase.id

     它是一個文件,存儲集群唯一的 cluster id 號,是一個 uuid。

11、/hbase/hbase.version

     同樣也是一個文件,存儲集群的版本號,貌似是加密的,看不到,只能通過web-ui 才能正確顯示出來。

二、0.98.8版本

自0.96版本之后,hbase 源碼結構上做了很大的優化,目錄結構也發生了變化,做了精簡和優化,這里以0.98.8為例介紹,目錄如下:

/hbase/.tmp

/hbase/WALs

/hbase/archive

/hbase/corrupt

/hbase/data

/hbase/hbase.id

/hbase/hbase.version

/hbase/oldWALs

1、/hbase/.tmp

這個目錄不變還是原來的tmp目錄,作用是一樣的。

2、/hbase/WALs

這里對應0.94的.logs 目錄,取名為 WALs 更加見名知意了,點個贊!

3、/hbase/archive

和0.94一樣,只是去掉了.而已,估計是作者不想把它作為一個隱藏文件夾了吧

4、/hbase/corrupt

和0.94一樣,去了.

5、/hbase/data

這個才是 hbase 的核心目錄,0.98版本里支持 namespace 的概念模型,系統會預置兩個 namespace 即:hbase和default

5.1 /hbase/data/default

     這個默認的namespace即沒有指定namespace 的表都將會flush 到該目錄下面。

5.2 /hbase/data/hbase

     這個namespace 下面存儲了 HBase 的 namespace、meta 和acl 三個表,這里的 meta 表跟0.94版本的.META.是一樣的,自0.96之后就已經將 ROOT 表去掉了,直接從Zookeeper 中找到meta 表的位置,然后通過 meta 表定位到 region。

meta保存系統中所有region的列表,region是存儲用戶數據的最基本單元,meta存儲於regionserver上,它的位置是存儲於zookeeper上,所以說用戶的API首先要去zookeeper上拿到meta表的數據,再去對應的查找對應的用戶數據。namespace 中存儲了 HBase 中的所有 namespace 信息,包括預置的hbase 和 default。acl 則是表的用戶權限控制。

     如果自定義一些 namespace 的話,就會再/hbase/data 目錄下新建一個 namespace 文件夾,該 namespace 下的表都將 flush 到該目錄下。

6、/hbase/hbase.id

它是一個文件,存儲集群唯一的 cluster id 號,是一個 uuid

7、/hbase/hbase.version

同樣也是一個文件,存儲集群的版本號,貌似是加密的,看不到,只能通過web-ui 才能正確顯示出來

8、/hbase/oldWALs

這里對應0.94的.oldlogs 目錄,取名為 oldWALs 是不是更好了呢!

第二,介紹用戶級別的目錄,也就是表數據存儲目錄結構。

進入上文提到的系統級目錄/hbase/data/default下面,如下圖所示,其中test就是一個hbase表名。

參考:https://www.cnblogs.com/nexiyi/p/hbase_on_hdfs_directory.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM