原文地址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 是否是更好了呢!