原文地址web
總所周知,HBase 是天生就是架設在 HDFS 上,在這個分佈式文件系統中,HBase 是怎麼去構建本身的目錄樹的呢?運維
這裏只介紹系統級別的目錄樹。分佈式
1、0.94-cdh4.2.1版本ide
系統級別的一級目錄以下,用戶自定義的均在這個/hbase 下的一級子目錄下工具
/hbase/-ROOT-post
/hbase/.META.優化
/hbase/.archiveui
/hbase/.corrupt加密
/hbase/.hbck
/hbase/.logs
/hbase/.oldlogs
/hbase/.snapshot
/hbase/.tmp
/hbase/hbase.id
/hbase/hbase.version
一、/hbase/-ROOT-
hbase讀寫數據的時候採用三級尋址方式,首先找到從 zk 中找到ROOT 表所在位置,經過 ROOT 表找到 META 表所在位置,而後再從 META 表定位到你要讀寫數據Region 所在的Regionserver。因此-ROOT-目錄對應 HBase 中的系統表ROOT,就很少作解釋了。
二、/hbase/.META.
就是存儲1中介紹的 META 表的存儲路徑。
三、/hbase/.archive
HBase 在作 Split或者 compact 操做完成以後,會將 HFile 移到.archive 目錄中,而後將以前的 hfile 刪除掉,該目錄由 HMaster 上的一個定時任務按期去清理。
四、/hbase/.corrupt
存儲HBase作損壞的日誌文件,通常都是爲空的。
五、/hbase/.hbck
HBase 運維過程當中偶爾會遇到元數據不一致的狀況,這時候會用到提供的 hbck 工具去修復,修復過程當中會使用該目錄做爲臨時過分緩衝。
六、/hbase/.logs
你們都知道 HBase 是支持 WAL(Write Ahead Log) 的,HBase 會在第一次啓動之初會給每一臺 RegionServer 在.log 下建立一個目錄,若客戶端若是開啓WAL 模式,會先將數據寫入一份到.log 下,當 RegionServer crash 或者目錄達到必定大小,會開啓 replay 模式,相似 MySQL 的 binlog。
七、/hbase/.oldlogs
當.logs 文件夾中的 HLog 沒用以後會 move 到.oldlogs 中,HMaster 會按期去清理。
八、/hbase/.snapshot
hbase若開啓了 snapshot 功能以後,對某一個用戶表創建一個 snapshot 以後,snapshot 都存儲在該目錄下,如對錶test 作了一個 名爲sp_test 的snapshot,就會在/hbase/.snapshot/目錄下建立一個sp_test 文件夾,snapshot 以後的全部寫入都是記錄在這個 snapshot 之上。
九、/hbase/.tmp
當對錶作建立或者刪除操做的時候,會將表move 到該 tmp 目錄下,而後再去作處理操做。
十、/hbase/hbase.id
它是一個文件,存儲集羣惟一的 cluster id 號,是一個 uuid。
十一、/hbase/hbase.version
一樣也是一個文件,存儲集羣的版本號,貌似是加密的,看不到,只能經過web-ui 才能正確顯示出來。
2、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
一、/hbase/.tmp
這個目錄不變仍是原來的tmp目錄,做用是同樣的。
二、/hbase/WALs
這裏對應0.94的.logs 目錄,取名爲 WALs 更加見名知意了,點個贊!
三、/hbase/archive
和0.94同樣,只是去掉了.而已,估計是做者不想把它做爲一個隱藏文件夾了吧
四、/hbase/corrupt
和0.94同樣,去了.
五、/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。 namespace 中存儲了 HBase 中的全部 namespace 信息,包括預置的hbase 和 default。acl 則是表的用戶權限控制。
若是自定義一些 namespace 的話,就會再/hbase/data 目錄下新建一個 namespace 文件夾,該 namespace 下的表都將 flush 到該目錄下。
六、/hbase/hbase.id
它是一個文件,存儲集羣惟一的 cluster id 號,是一個 uuid。
七、/hbase/hbase.version
一樣也是一個文件,存儲集羣的版本號,貌似是加密的,看不到,只能經過web-ui 才能正確顯示出來。
八、/hbase/oldWALs
這裏對應0.94的.oldlogs 目錄,取名爲 oldWALs 是否是更好了呢!