• 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

  • 相关阅读:
    BZOJ5104 二次剩余板子
    BZOJ5329 [Sdoi2018]战略游戏 圆方树+虚树
    BZOJ1095 动态点分治
    BZOJ3992: [SDOI2015]序列统计
    kd-tree板子
    thusc2018翻车记
    BZOJ5336 DP套DP
    BZOJ4316 仙人掌DP
    问题 F: 最小花费
    问题 C: 热浪
  • 原文地址:https://www.cnblogs.com/zhangwuji/p/9160301.html
Copyright © 2020-2023  润新知