一、HBase目录结构
1.1、On ZooKeeper
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $ for i in $(echo "ls /hbase" | zookeeper-client | tail -2 | head -1 | awk -F '[][]' '{print $2}'); do echo $i; done meta-region-server, rs, splitWAL, backup-masters, table-lock, flush-table-proc, master-maintenance, online-snapshot, master, switch, running, draining, namespace, hbaseid, table
|
说明:
- meta-region-server:包含meta region
- rs
- splitWAL
- backup-masters
- table-lock
- flush-table-proc
- master-maintenance
- online-snapshot
- master
- switch
- running
- draining
- namespace
- hbaseid
- table
1.2、On HDFS
1.2.1、根级目录/文件
1 2 3 4 5 6 7 8 9 10 11 12
| $ sudo -u hdfs hadoop fs -ls /hbase Found 14 items drwxr-xr-x - hdfs supergroup 0 2019-11-12 03:31 /hbase/.hbase-snapshot drwxr-xr-x - hbase supergroup 0 2019-11-12 03:16 /hbase/.tmp drwxr-xr-x - hbase supergroup 0 2019-11-12 04:30 /hbase/MasterProcWALs drwxr-xr-x - hbase supergroup 0 2019-11-12 03:16 /hbase/WALs drwxr-xr-x - hbase supergroup 0 2019-11-12 03:31 /hbase/archive drwxr-xr-x - hbase supergroup 0 2019-11-12 03:13 /hbase/corrupt drwxr-xr-x - hbase supergroup 0 2019-11-12 03:17 /hbase/data -rw-r--r-- 3 hbase supergroup 42 2019-11-12 03:13 /hbase/hbase.id -rw-r--r-- 3 hbase supergroup 7 2019-11-12 03:13 /hbase/hbase.version drwxr-xr-x - hbase supergroup 0 2019-11-12 04:30 /hbase/oldWALs
|
说明:
- /hbase/.hbase-snapshot - 存储Snapshot的相关信息
- /hbase/.tmp - 临时目录。比如,写一个hbase.id文件,先在这里写成功后,再rename到/hbase/hbase.id
- /hbase/MasterProcWALs - 保存master执行过程中程序的状态,用于中断恢复执行使用
- /hbase/WALs - 记录每台regionserver上的WAL日志文件
- /hbase/archive - 归档目录。进行snapshot或者升级时会使用该目录,compaction删除hfile时也会把旧的hfile归档到这里。该目录由 HMaster 上的一个定时任务定期去清理。
- /hbase/corrupt - splitlog的corrupt目录,以及corrupt hfile的目录
- /hbase/data - HBase的表数据目录。从0.98版本开始支持 namespace 的概念模型,系统会预置两个 namespace 即: hbase 和 default
- /hbase/hbase.id - 集群的唯一ID文件。在集群启动时初始化生成
- /hbase/hbase.version - 版本文件(hbase软件版本、代码静态版本),现在都是8
- /hbase/oldWALs - 历史WAL日志。已经确认持久化了的WAL日志文件会被移到这里,完成了splitlog的旧日志,也会被放到这里。
1.2.2、子目录/文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| # # 对于每个regionServer节点,WALs日志目录下都包含一个对应的子目录 # 用于记录每台RegionServer上的WAL日志文件 # regionServer目录的名字是有时间的。下一次启动时,RS目录就会使用新的目录结构存放wal,这个旧的RS目录会被splitlog拆分回放 $ sudo -u hdfs hadoop fs -ls /hbase/WALs Found 4 items drwxr-xr-x - hbase supergroup 0 2019-11-12 05:16 /hbase/WALs/node2,16020,1573528597339 drwxr-xr-x - hbase supergroup 0 2019-11-12 05:16 /hbase/WALs/node3,16020,1573528597152 drwxr-xr-x - hbase supergroup 0 2019-11-12 05:16 /hbase/WALs/node4,16020,1573528597150 drwxr-xr-x - hbase supergroup 0 2019-11-12 05:16 /hbase/WALs/node5,16020,1573528597109
# 每个子目录下会有多个HLog文件(因为日志滚动) $ sudo -u hdfs hadoop fs -ls /hbase/WALs/node2,16020,1573528597339 Found 1 items -rw-r--r-- 3 hbase supergroup 0 2019-11-12 05:16 /hbase/WALs/node2,16020,1573528597339/node2%2C16020%2C1573528597339.node2%2C16020%2C1573528597339.regiongroup-0.1573535804334
# # 具体的oldWALs文件 $ sudo -u hdfs hadoop fs -ls /hbase/oldWALs Found 220 items -rw-r--r-- 3 hbase supergroup 91 2019-11-12 06:16 /hbase/oldWALs/node2%2C16020%2C1573528597339.node2%2C16020%2C1573528597339.regiongroup-0.1573535804334 -rw-r--r-- 3 hbase supergroup 91 2019-11-12 06:16 /hbase/oldWALs/node3%2C16020%2C1573528597152.node3%2C16020%2C1573528597152.regiongroup-0.1573535804199 -rw-r--r-- 3 hbase supergroup 91 2019-11-12 06:16 /hbase/oldWALs/node4%2C16020%2C1573528597150.meta.1573535805180.meta -rw-r--r-- 3 hbase supergroup 91 2019-11-12 06:16 /hbase/oldWALs/node4%2C16020%2C1573528597150.node4%2C16020%2C1573528597150.regiongroup-0.1573535804696 -rw-r--r-- 3 hbase supergroup 91 2019-11-12 06:16 /hbase/oldWALs/node5%2C16020%2C1573528597109.node5%2C16020%2C1573528597109.regiongroup-0.1573535804408 -rw-r--r-- 3 hbase supergroup 33602916 2019-11-12 03:34 /hbase/oldWALs/pv2-00000000000000000001.log
# # 表的归档和快照具体目录形如: /hbase/archive/data/default/表名/region名/列族名/fd2221d8d1ae4e579c21882f0ec4c5a5
# # default存放所有用户的数据表 # hbase存放HBase的系统表 $ sudo -u hdfs hadoop fs -ls /hbase/data Found 2 items drwxr-xr-x - hbase supergroup 0 2019-11-12 03:17 /hbase/data/default drwxr-xr-x - hbase supergroup 0 2019-11-12 03:16 /hbase/data/hbase
# # meta是元数据表,记录region相关信息 # namespace存储了HBase中的所有namespace信息,包括预置的hbase 和 default $ sudo -u hdfs hadoop fs -ls /hbase/data/hbase Found 2 items drwxr-xr-x - hbase supergroup 0 2019-11-12 03:13 /hbase/data/hbase/meta drwxr-xr-x - hbase supergroup 0 2019-11-12 03:16 /hbase/data/hbase/namespace
|
1.2.3、表目录
1 2 3 4
| /hbase/data/default/TestTable/.tabledesc/ /hbase/data/default/TestTable/.tabledesc/.tableinfo.0000000001 /hbase/data/default/TestTable/.tabledesc/.tmp /hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/
|
它们的作用分别是:
- 存放表的元数据信息文件
- 表具体的元数据信息文件
- 存放中间数据的临时目录,当.tableinfo被更新时该目录就会被用到
- 表中的region目录 , 由表名+Start Key+时间戳产生的hashcode
1.2.4、region目录
1 2 3 4 5 6 7
| /hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/列族名/ /hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/列族名/2e58b3e274ba4d889408b05e526d4b7b /hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/recovered.edits/340.seqid /hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/.regioninfo /hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/.tmp /hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/.splits /hbase/data/default/TestTable/fc06f27a6c5bc2ff57ea38018b4dd399/.merges
|
它们的作用分别是:
- 存储该列族所有的数据文件
- 该列族实际的数据文件(HFile)
- 当splitlog发生时,一个RS的wal会按照region级别split WALs写到对应目录下的的recovered.edits目录上,使得此region再次被open的时候,回放这些recovered.edits 日志。
- regioninfo文件。 包含了region的HRegionInfo的序列化信息,与tableinfo类似。hbase hbck 工具可以用它来生成丢失的表条目元数据
- compaction时的临时目录
- split时的临时目录,如果region上一次的split没有完成就被中断了,这个region再open时会自动清理这个目录,一般不需要人工干预。
- merges时的临时目录,和split一样,如果没有正常完成就被中断了,那么在下次被open的时候自动清理。一般也不需要人工干预。
二、HBase涉及的主要文件
- hfile - 数据文件
- hfilelink - hbase snapshot会用到, migration upgrade 也会使用到。
- reference - 用来指定half hfile,一个region有reference时,这个region不能split。split/merge会创建这个。进行compaction后生成新的hfile后,会把这个reference删除。hfile的reference文件名格式一般是 hfile.parentEncRegion。如:/hbase/data/default/table/region-one/family/hfilename。其region-two有reference hfile文件名格式为:/hbase/data/default/table/region-two/family/hfile.region-one 通常无效引用就是 region-one的hfile不存在了,那么这个引用就会失效。他的修复方法一般是把reference无效的引用移除。
- .regioninfo - 保存着 endkey/offline标志/regionid/regionName/split标志/startkey/tablename等信息
- tableinfo 保存着 tableName/table属性信息/table级别config信息/family信息。其中family信息保存着 famliyName/famiy属性/famliy级别config信息等。
三、参考
https://segmentfault.com/a/1190000014708618
https://lihuimintu.github.io/2019/06/19/HBase-File-ZK-Structure/#在-hdfs-路径](https://lihuimintu.github.io/2019/06/19/HBase-File-ZK-Structure/#在-hdfs-路径)
https://blog.bcmeng.com/post/hbase-hdfs.html