hbase
来源:互联网 发布:linux tar 命令 编辑:程序博客网 时间:2024/05/05 13:17
数据字典用来存储了系统的元数据。HBase的元数据包括:用户表的定义、表的切分方案、分片的分布情况(即分片分布在哪个regionserver上)、分片对应的数据文件和日志文件。其中,分片和数据文件的映射关系是通过目录映射实现的,即不同的分片的数据文件存储在不同的目录中,其中目录的名称是分片的名称。【对比:在Hypertable中分片与数据文件的映射关系记录在表中】
如图3-13所示。HBase使用表-ROOT-和表.META存储元数据【Oracle也用表存储元数据】。和普通的表一样,这两张表对应的分片分布在RegionServer上的。.META.存储了所有用户表的元数据库,可以被分裂,其元数据存储在表-ROOT-中。-ROOT-有且只有一个分片,不能被分裂。ZooKeeper的节点ZK/hbase/root-region-server存储了加载-ROOT-分片的RegionServer的地址信息,是整个系统的入口。
注:在本文描述的HBase0.90.0中,.META.还不支持分裂,不过最新版本已经支持分裂.META.了。
图3-13 定位分片的层次
1 表.META.
表.META.的定义脚本如下:
create '.META.', {NAME => 'info', VERSIONS => 10, COMPRESSION => 'none', IN_MEMORY => true, BLOCKCACHE => true, BLOCKSIZE =>8096,TTL => 2147483647, BLOOMFILTER => 'NONE', REPLICATION_SCOPE => 0 }
family
qualifer
描述
info
regioninfo
分片的属性信息,包括startkey,endkey,对应表的定义等
server
加载本分片的RS地址信息
serverstartcode
加载本分片的RS的启动时间,用于MasterServer区分RS是否重启
splitA
子分片A的regioninfo
splitB
子分片B的regioninfo
表3-1 .META.的定义
.META.的rowKey是分片的名称。regionname的格式如表3-2.
分片类型
分片名称的格式
-ROOT-
tablename+','+startkey+','+regionid
规定-ROOT-分片的regionid为0,所以名称为: "-ROOT-,,0"
.META.
tablename+','+startkey+','+regionid
0.90.3版本不支持.META.分裂,规定.META.分片的regionid为1所以名称为: ".META.,,1"
普通分片
tablename+','+startkey+','+regionid+'.'+md5+'.'其中md5是tablename+','+startkey+','+regionid的md5码
表3-2 分片名称的格式
分片名称中存在regionid的原因?
父分片分裂后,由于垃圾回收机制的需要,父分片的元数据不能立即在.META.得到删除,所以父分片和子分片的元数据会同时出现在.META.中。但是第一个子分片与父分片的tablename和startkey都一样, tablename+startkey无法唯一标识一个分片,所以在分片名称的尾部增加了一个regionid,从而使得分片名称可以唯一标记一个分片。regionid实际是分片的生成时间,子分片的regionid一定要比父分片的regionid要大。
regioninfo的定义参见下图。
图3-14 序列化的regioninfo
字段
描述
version
版本号。为0
endkey
offLine
用于分裂。true表示已经closed,但是还不能删除,因为其数据文件还在被子分片使用
regionId
分片创建当前时间
regionName
见表3-2
split
true:本分片已经被split。
startKey
tableDesc
见表3-4
hashCode
前面所有字段的hash值
表3-3 regioninfo的各个字段的定义
字段
描述
version
5
name
表名
isRoot
是否是表-ROOT- ,冗余信息?
isMeta
是否是表.META. ,冗余信息?
tableAttrNum
字段tableAttrList中表属性的个数
tableAttrList
见表3-5
familyListNum
列族的数量
familyList
见表3-6
表3-4 tableDesc的定义
名称
描述
默认值
FAMILIES
未使用?
IS_ROOT
是否是表"-ROOT-"
IS_META
是否是表".META."
READONLY
表的状态
false
DEFERRED_LOG_FLUSH
若为true。写数据时,无需确认WAL是否写入磁盘,即可返回。以数据的持久性交换写性能。
false
MAX_FILESIZE
分片所有数据文件的总大小达到这个阀值后,需要分裂分片。单位是字节。
256M
MEMSTORE_FLUSHSIZE
当分片的所有MemStore的总大小到达这个阀值后,需要把MemStore中的数据写入磁盘数据文件。单位是字节。
64M
表3-5 tableAttrList
名称
描述
默认值
NAME
列族名称
无
VERSIONS
最大版本数
3
TTL
time to live
Integer.MAX_VALUE,表示永久有效
IN_MEMORY
是否常驻内存
false
COMPRESSION
列族的压缩算法
包括 "lzo" "gz" "none"
"none"
COMPRESSION_COMPACT
major时的压缩算法
同COMPRESSION
BLOOMFILTER
"NONE" "ROW" "ROWCOL"
"NONE"
REPLICATION_SCOPE
多个数据中心备份数据的参数。【待研究】
0
BLOCKSIZE
StoreFile的 data block大小,
单位字节
64*1024
BLOCKCACHE
是否缓存其block
true
表3-6 familyAttrList
2 表-ROOT-
表-ROOT-存储了表的.META.的元数据,并且不可以分裂。创建-ROOT-表的脚本如下:
create '-ROOT-', {NAME => 'info', VERSIONS => 10, COMPRESSION => 'none', IN_MEMORY => true, BLOCKCACHE => true, BLOCKSIZE =>8096,TTL => 2147483647, BLOOMFILTER => 'NONE', REPLICATION_SCOPE => 0 }
3 系统入口
从某种程度上来说,zookeeper是一个小型文件系统,可以用来存储及少量的数据。ZK/hbase/root-region-server是zookeeper中的一个文件,用来存储了加载-ROOT-分片的RegionServer的地址信息(主机名+port),是HBase集群的总入口。
- Hbase
- HBase
- hbase
- HBase
- HBASE
- Hbase
- Hbase
- HBase
- hbase
- HBase
- HBase
- hbase
- hbase
- Hbase
- HBase
- hbase
- hbase
- HBase
- 关于NSJSONReadingOptions参数的含义
- 文件操作
- iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
- spring配置的时候报no declaration can be found for element 'tx:advice'是为什么呢?
- jquery cookie的用法
- hbase
- error CVT1100的解决方法
- 【Boost】MSVC编译Boost的几种链接方式
- 东北赛的各种吐槽
- SVN版本控制与分支设置
- linux系统备份工具:clonezilla
- 分享外链建设质量
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 判断ipad横竖屏的两个方法