![de3100f0222b76954ef3e9a2b0f69632.png](https://i-blog.csdnimg.cn/blog_migrate/0ff0de4b47c950759fc21eb71b8c0b63.jpeg)
HBase在HDFS上的目录及文件简介
我们使用HUE可以查看HDFS上的文件,使用HDFS NameNode Web UI也可以查看,下面我们使用NameNode Web UI看看。
下面是NameNode Web UI,点击Utilities可以看到HDFS上都有哪些文件。
![7815b48520354819321d12ccac78a9b6.png](https://i-blog.csdnimg.cn/blog_migrate/1aa648751c1792acbc970c2faffa1cb8.jpeg)
![483941584f9725bf384aa2186905ef08.png](https://i-blog.csdnimg.cn/blog_migrate/b48617c1bdf398193d85a9c1edd2351f.jpeg)
那么,和HBase相关的文件在哪呢?
注意,名称为hbase的目录,所有与HBase相关的文件都存储在此目录下。/hbase这个目录可以通过配置hbase.rootdir更改,默认是/hbase。让我们展开目录看看,如下图:
![aba9dd94a8d3d5ce3291932626c42997.png](https://i-blog.csdnimg.cn/blog_migrate/856375928732848eff36e30d4bde9d05.jpeg)
我们可以看到只有两个文件hbase.id和hbase.version(Permission的第一位是-,它表示普通文件),其余都是目录(Permission的第一位是d,它表示目录)。下面按照上图的顺序依次介绍一下。
1)/hbase/.hbck
当遇到元数据不一致时,使用hbck 工具修复,修复过程中会使用该目录作为临时目录。
但是对于HBase2.0.0及其以后版本这个工具已经不能用来修复HBase了,要使用hbck2。
2) /hbase/.tmp
当创建或删除表时,会将表移动到该此目录下,然后再处理。
3) /hbase/MasterProcWALs
此目录下包含HMaster主节点状态日志文件。
可以在停止服务后删除这个目录,然后重启HBase,这个目录会自动被创建。
![8e6cc1754cff09f478b5cb2a7fb030d6.png](https://i-blog.csdnimg.cn/blog_migrate/10a1a0d153d6cd4a7160567d367995f9.jpeg)
4)/hbase/WALs
HBase 是支持WAL(Write Ahead Log)的,HBase会在第一次启动之初会在每一个RegionServer的.log目录下创建一个目录,若客户端开启WAL模式,会先将数据写入一份到.log下,当 RegionServer crash或目录达到一定大小,会开启 replay模式,这类似 MySQL的binlog。
![d907e2aa758746c827631543bc0cdb8e.png](https://i-blog.csdnimg.cn/blog_migrate/28808ed1f44f4daba1982b06393efbe5.jpeg)
5)/hbase/archive
HBase在完成Split或者compact操作之后,会将HFile移到.archive目录中,然后将之前的hfile删除掉,该目录由HMaster上的一个定时任务定期清理。
6)/hbase/corrupt
存储HBase损坏的日志文件,一般都是为空的。
7)/hbase/data
/hbase/data目录是最重要的目录,存储hbase数据,下面含有两个命名空间default和hbase,其中default是默认命名空间,如果创建的表未指定命名空间,将存放在该命名空间下,hbase是系统命名空间。
![f13822f84c20ea54ce055b98bb5d45b1.png](https://i-blog.csdnimg.cn/blog_migrate/6c1f1c6ea007bba182113a7b0b7a788f.jpeg)
/hbase/data/acl
![0c35ab88df96524a67c511e34e2d984a.png](https://i-blog.csdnimg.cn/blog_migrate/5b9abf86337c6b4f1ed7c57a7199b564.jpeg)
其中
.tabledesc表示表的元数据信息。
.tmp表示临时数据,当表被更新时会使用这个目录。
fcd3a7a6e8fe7e3a55d2aa76b53dfdcb,这是region的名称,它是由表名+Start Key+时间戳产生的哈希码。此目录包含子目录,如下图所示。
/hbase/data/hbase/acl/fcd3a7a6e8fe7e3a55d2aa76b53dfdcb/ .regioninfo文件是对应Region的HRegionInfo的序列化信息。
/hbase/data/hbase/acl/fcd3a7a6e8fe7e3a55d2aa76b53dfdcb/.tmp临时文件
/hbase/data/hbase/acl/fcd3a7a6e8fe7e3a55d2aa76b53dfdcb/l列族的数据文件
/hbase/data/hbase/acl/fcd3a7a6e8fe7e3a55d2aa76b53dfdcb/recovered.edits为Region拆分时的临时数据
![0ef4a27eeb6fe30c2bd8ec55d6304019.png](https://i-blog.csdnimg.cn/blog_migrate/ff5912d6bfda32044d89b406e4037d05.jpeg)
这个文件对应的表名为hbase:acl,我们查下这个表看看都存些什么:
![51da0ac0041a7ae83f5b9ac0904ef02b.png](https://i-blog.csdnimg.cn/blog_migrate/8d374a9ecee8ec99b1d2d5dd71e8806c.jpeg)
记录了我们自定义的表信息,并分配了相应的权限,其中value=RWXCA表示READ(读), WRITE(写), EXEC(执行), CREATE(创建), ADMIN(管理员权限)。
/hbase/data/meta
![105ad2952e14ece517dec975dc6793e6.png](https://i-blog.csdnimg.cn/blog_migrate/319247e7321eef05e41515c50489a481.jpeg)
这个文件对应的表名为hbase:meta,我们查下这个表看看都存些什么:
![bbbc6a2787d19cc9d30f69313c411e40.png](https://i-blog.csdnimg.cn/blog_migrate/958bd01e04b30dd56e92f09beadab38a.jpeg)
这个表记录了所有HBase表的元数据。
/hbase/data/namespace
![0bed940cb0064509dc9b3210dd98216f.png](https://i-blog.csdnimg.cn/blog_migrate/b76f3b74a4c65f1975cb52d5dd8a550d.jpeg)
这个文件对应的表名为hbase:namespace,我们查下这个表看看都存些什么:
![f8af84efb0b58013c2d65970aadd15cf.png](https://i-blog.csdnimg.cn/blog_migrate/524633b1eb1e8c6e7d59100c856a28da.jpeg)
这个表记录了命名空间。
自定义命名空间
除了这两个命名空间以外,如果你指定一个命名空间,那么会在/hbase/data创建一个目录,用来放表文件。
例如,指定命名空间为article,那么当前/hbase/data目录如下所示:
![a3e8413f38ce4a09f1c7ec766c5cd6a6.png](https://i-blog.csdnimg.cn/blog_migrate/e65784d51b2a216506ec3b19214b4f08.jpeg)
我们看看/hbase/data/article这个目录下都有哪些文件,首先要说明的是我创建了一个表名称为CCND,命名空间为article。表有一个列族i,和两列h和c。
![9a8fb8771a43f9bcd41af7bb09e6b305.png](https://i-blog.csdnimg.cn/blog_migrate/f55a1d06cba49d36449610990860a603.jpeg)
![f6b2d67eaf7e155ad24706378b14c982.png](https://i-blog.csdnimg.cn/blog_migrate/4f542835cf786e83eebe5b1484fcb2e9.jpeg)
其中
l /hbase/data/article/CCND/.tabledesc存放表元数据信息,用HUE打开可以看到如下信息:
![68a2aa9c68e7cbe259d40ec0501fdce0.png](https://i-blog.csdnimg.cn/blog_migrate/04934c1dcdd6b71c574ebd246fc41886.jpeg)
l /hbase/data/article/CCND/.tmp存放临时文件
l /hbase/data/article/CCND/1bff78545728ab01c7646a79de4ce00d存放表数据,
让我们看看这个目录下的文件。
![148bc9fe8260b63093c54530dc3fe8f5.png](https://i-blog.csdnimg.cn/blog_migrate/d52b104fb88f0fbedf280c4da287560c.jpeg)
8)/hbase/mobdir
此目录对应MOB文件。
9)/hbase/oldWALs
与hbase操作相关的旧日志存放目录.当/hbase/WALs中的HLog文件被持久化到存储文件中,不再需要日志文件时,它们会被移动到/hbase/oldWALs目录。
删掉此目录后,重启HBase会自动创建这个目录。
![ca018de062c3d28a7093a30b261f5f85.png](https://i-blog.csdnimg.cn/blog_migrate/c3e09dac0845d92b114ad72f4a2562ae.jpeg)
10)/hbase/staging
在bulkload时会创建并使用这个文件夹,通过查看官方文档可以证实这一点,原文如下:
![cb6a4c81c08048e1931137fa44e04301.png](https://i-blog.csdnimg.cn/blog_migrate/41f074d064c2db357cec1b480bea1e8f.jpeg)
11)/hbase/hbase.id
它是一个文件,存储集群唯一的cluster id号,是一个uuid。使用HUE打开这个文件,让我们看看具体内容:
![6b8dc3ee7c934f272f155f9e2c73575f.png](https://i-blog.csdnimg.cn/blog_migrate/6cf09ff13cf7f1a5ef3a5b3e68e79099.jpeg)
12)/hbase/hbase.version
它是一个文件,存储集群的版本号,貌似是加密的,看不到,只能通过web-ui 才能正确显示出来,这里我们使用HUE看一下:
![757d4bf3f25c43b54a4b256914065d37.png](https://i-blog.csdnimg.cn/blog_migrate/3b26c41289b407cf826fdca091c203a4.jpeg)