1/5 HBase( 二 )



1/5 HBase

文章插图
在创建一个表的时候,列族必须作为模式定义的一部分预先给出,而列族是支持动态扩展的,也就是列族成员可以随后按需加入 。物理上,所有的列族成员一起存放在文件系统上,所以实际上说HBase是面向列的数据库,更准确的应该是面向列族,调优和存储都是在列族这个层次上进行的 。一般情况下,同一个列族的成员最后具有相同的访问模式和大小特征 。
??总结起来 , HBase表和我们熟知的RDBMS的表很像,不同之处在于:行按行键排序 , 列划分为列族,单元格有版本号,没有数据类型 。
2.4.2 Hbase数据坐标
HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格(cell),cell中的数据是没有类型的,全部是字节码形式存贮 。,因此,可以视为一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳] 。

1/5 HBase

文章插图
对于上图这样一个HBase表,其数据坐标举例如下:
键值[“201505003”, “Info”, “email”, 1174184619081]“xie@qq.com”[“201505003”, “Info”, “email”, 1174184620720]“you@163.com”2.4.3 HBase区域
HBase自动把表水平划分为区域(Region),每个区域都是有若干连续行构成的 , 一个区域由所属的表、起始行、终止行(不包括这行)三个要素来表示 。
??一开始,一个表只有一个区域 , 但是随着数据的增加,区域逐渐变大,等到它超出设定的阈值大?。?就会在某行的边界上进行拆分,分成两个大小基本相同的区域 。然后随着数据的再增加,区域就不断的增加,如果超出了单台服务器的容量,就可以把一些区域放到其他节点上去,构成一个集群 。也就是说:集群中的每个节点(Region Server)管理整个表的若干个区域 。所以,我们说:区域是HBase集群上分布数据的最小单位 。

1/5 HBase

文章插图
三、HBase系统架构3.1 架构图
1/5 HBase

文章插图
3.2 组件介绍HBase由三种类型的服务器以主从模式构成:
  • Region Server:负责数据的读写服务,用户通过与Region server交互来实现对数据的访问 。
  • HBase HMaster:负责Region的分配及数据库的创建和删除等操作 。
  • ZooKeeper:负责维护集群的状态(某台服务器是否在线 , 服务器之间数据的同步操作及master的选举等) 。
HDFS的DataNode负责存储所有Region Server所管理的数据,即HBase中的所有数据都是以HDFS文件的形式存储的 。出于使Region server所管理的数据更加本地化的考虑,Region server是根据DataNode分布的 。HBase的数据在写入的时候都存储在本地 。但当某一个region被移除或被重新分配的时候,就可能产生数据不在本地的情况 。这种情况只有在所谓的compaction之后才能解决 。
Client
包含访问HBase的接口并维护cache来加快对HBase的访问
Zookeeper
保证任何时候,集群中只有一个master
存贮所有Region的寻址入口 。
实时监控Region server的上线和下线信息 。并实时通知Master
存储HBase的schema和table元数据
Master
为Region server分配region
负责Region server的负载均衡
发现失效的Region server并重新分配其上的region
管理用户对table的增删改操作
RegionServer
Region server维护region , 处理对这些region的IO请求
Region server负责切分在运行过程中变得过大的region
HLog(WAL log):
HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是 HLogKey对象,HLogKey中记录了写入数据的归属信息 , 除了table和 region名字外,同时还包括sequence number和timestamp,timestamp是” 写入时间”,sequence number的起始值为0,或者是最近一次存入文件系 统sequence number 。
HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的 KeyValue
Region
HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据;每个表一开始只有一个region , 随着数据不断插 入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region(裂变);

推荐阅读