数据字典用来存储了系统的元数据。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数据字典的更多相关文章

  1. hbase基本结构

    HBASE  基本结构一.overview1. hbase <=> NOSQL     不错,hbase 就是某种类型的nosql 数据库,唯一的区别就是他支持海量的数据.    hbas ...

  2. HBase replication

    Hbase Replication 介绍 现状 Hbase 的replication目前在业界使用并不多见,原因有很多方面,比如说HDFS目前已经有多份备份在某种程度上帮助HBASE底层数据的安全性, ...

  3. HBase的replication原理及部署

    一.hbase replication原理 hbase 的复制方式是 master-push 方式,即主集群推的方式,主要是因为每个rs都有自己的WAL. 一个master集群可以复制给多个从集群,复 ...

  4. Mapreduce的文件和hbase共同输入

    Mapreduce的文件和hbase共同输入 package duogemap;   import java.io.IOException;   import org.apache.hadoop.co ...

  5. Redis/HBase/Tair比较

    KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式    支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...

  6. Hbase的伪分布式安装

    Hbase安装模式介绍 单机模式 1> Hbase不使用HDFS,仅使用本地文件系统 2> ZooKeeper与Hbase运行在同一个JVM中 分布式模式– 伪分布式模式1> 所有进 ...

  7. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  8. Spark读写Hbase的二种方式对比

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...

  9. 深入学习HBase架构原理

    HBase定义 HBase 是一个高可靠.高性能.面向列.可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建 大规模结构化存储集群. HBase 是Google Bigtabl ...

随机推荐

  1. Dynamics CRM2015 页面导航栏顶部全局快速查找功能配置

    在CRM2015中微软加入了新的快速查找功能,让你的数据查找更加方便,功能栏如下图所示,直接可以框中输入搜索项进行搜索. 但该功能是需要进行些配置,具体的配置在设置-管理-系统设置中,默认的就是红框中 ...

  2. 指令汇B新闻客户端开发(三) 下拉刷新

    现在我们继续这个新闻客户端的开发,今天分享的是下拉刷新的实现,我们都知道下拉刷新是一个应用很常见也很实用的功能.我这个应用是通过拉ListView来实现刷新的,先看一张刷新的原理图 从图中可知,手指移 ...

  3. memcached实战系列(五)Memcached: List all keys 查询所有的key

    memcached可能当时设计的时候就把它定位为内存性的kv结构的缓存系统.所以没有持久化到磁盘的命令,也没有查看所有key的值得命令.可能觉得没必要吧,你要是缓存1个G内存的数据,自己都头大,还敢看 ...

  4. 剑指offer面试题6 重建二叉树(c)

  5. 15 ActionProvider代码例子

    Menu文件夹下代码: <menu xmlns:android="http://schemas.android.com/apk/res/android" > <! ...

  6. 【一天一道Leetcode】#203.Remove Linked List Elements

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 我的个人博客已创建,欢迎大家持续关注! 一天一道le ...

  7. (七十六)CoreLocation(二)获取经纬度、速度、方向,进行区域监听

    上节说明了如何在iOS7和iOS8上完成授权,并且开始获取位置,这一节介绍获取位置信息的方法. [定位精度] 定位精度有多种选择:根据字面意思即可理解 extern const CLLocationA ...

  8. (Tomcat)服务器之web应用的虚拟目录映射和主机搭建

    首先来了解一下web的虚拟目录映射和主机搭建的知识 第一:web的虚拟目录映射 首先我们要知道什么叫做web的虚拟目录映射,这个很好理解的,就是将我们本地硬盘上的web应用映射出一个供外界用户访问的地 ...

  9. FORM中的MOAC控制

    1.创建表时,对_ALL表创建同义词 -- Create Multi Org Synonym CREATE  OR REPLACE  SYNONYM CUX_WF_DEF_HEADER FOR CUX ...

  10. android eclipse写layout文件失效问题解决

    设置 xml 文件的代码提示功能 打开 Eclipse 依次选择 Window > Preferences > Xml > Editor > Content Assist &g ...