Hbase

作者: 乔一波一 | 来源:发表于2019-04-11 21:21 被阅读67次

Hbase参考

参考http://www.nosqlnotes.com/technotes/hbase/hbase-overview-concepts/

简介

Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库;存储在内存,面向列每一行之间列可以不同;

HBase常被用来存放一些结构简单,但数据量非常大的数据(通常在TB/PB级别),如历史订单记录,日志数据,监控Metris数据等等,HBase提供了简单的基于Key值的快速查询能力。

数据模型

ROW KEY:

决定一行数据,按照字典顺序排序的,Row key最大只能存储64k的字节数据

稀疏矩阵:

HBase中一个表的数据是按照稀疏矩阵的方式组织的,如下表所示:

看的出来:每一行中,列的组成都是灵活的,行与行之间并不需要遵循相同的列定义, 也就是HBase数据表”schema-less“的特点。

Region:

Hbase中采用了“Range分区”,将Key的完整分区切割成一个个的“key Range”,每一个“Key range”称之为一个Region;

也可以这么理解:将Hbase中拥有数亿行的一个大表,横向切割成一个个子表,这一个"子表"就是Region

Region是HBase中负载均衡的基本单元,当一个Region增长到一定大小以后,会自动分裂成两个。

CF :

如果将Region看成是一个表的横向切割,那么,一个Region中的数据列的纵向切割,称之为一个Column Family。每一个列,都必须归属于一个Column Family,这个归属关系是在写数据时指定的,而不是建表时预先定义。如 create ‘test’, ‘course’;列名以列族作为前缀,每个“列族”都可以有多个列成员(column);

KeyValue:

每一行中的每一列数据,都被包装成独立的拥有特定结构的KeyValue,KeyValue中包含了丰富的自我描述信息:

看的出来,KeyValue是支撑”稀疏矩阵”设计的一个关键点:一些Key相同的任意数量的独立KeyValue就可以构成一行数据。但这种设计带来的一个显而易见的缺点:每一个KeyValue所携带的自我描述信息,会带来显著的数据膨胀

时间戳:

精确到毫秒的系统时间,在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面;

Cell单元格:

由行和列的坐标交叉决定;单元格是有版本的;单元格的内容是未解析的字节数组;

由{row key, column( =<family> +<qualifier>), version} 唯一确定的单元,cell中的数据是没有类型的,全部是字节数组形式存贮;

Hbase适用场景

HBase的数据模型比较简单,数据按照RowKey排序存放,适合HBase存储的数据,可以简单总结如下:

一:以实体为中心的数据

实体可以包括但不限于如下几种:

        自然人/账户/手机号/车辆相关数据

        用户画像数据(含标签类数据)

        图数据(关系类数据)

描述这些实体的,可以有基础属性信息,实体关系(图数据),所发生的事件

二: 以事件为中心的数据

        监控数据

        时序数据

        实时位置类数据

        消息/日志类数据

上面所描述的这些数据,有的是结构化数据,有的是半结构化或非结构化数据。HBase的“稀疏矩阵”设计,使其应对非结构化数据存储时能够得心应手,但在我们的实际用户场景中,结构化数据存储依然占据了比较重的比例。由于HBase仅提供了基于RowKey的单维度索引能力,在应对一些具体的场景时,依然还需要基于HBase之上构建一些专业的能力,

架构

架构图

Client:读写请求的发起方,并维护meta : region 本地缓存 cache来加快对HBase Region 的访问;

Zookeeper:

        (1):保证任何时候,集群中只有一个活跃Master;

        (2):存贮所有Region的寻址入口;集群所有Region的元数据是由一台RegionServer管理的,这里的寻址入口指的就是管理元数据的RegionServer;

        (3):实时监控Region server的状态。并实时通知Master;

        (4):保存表的相关信息;

Master:

        1):为Region server分配region:

        2):负责Region server的负载均衡:平衡RegionServer节点上的region;

        3):发现失效的Region server并重新分配其上的regions:Zookeeper通知Master,Master重新分配;

        4):建表/修改表/删除表等DDL操作请求的服务端执行主体;

        5):Master自身也可以作为一个RegionServer提供服务,该能力是可配置的。

RegionServer:

        1):Region server维护region,处理对这些region的IO请求;

        2):Region server负责切分在运行过程中变得过大的region,切分出来的region由master重新分配regionserver;

组件:

region:

        1):HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据

        2):每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region(裂变);

        3):当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver 上。

store,Memstore 与 storefile:

        2):store包括位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile;

        3):当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile;当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡;

        4):客户端检索数据,先在memstore找,再到blockcache找,找不到再找storefile;

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;

Hbase完全分布式搭建:

进入到conf目录 hbase-site.xml如下配置:

regionservers :配置regionserver节点信息

hbase-env.sh 

vim backup-masters :配置备Hmaster

拷贝hbase到其他节点,配置hbase环境变量;

启动hbase集群;

访问hbase webUI

查看zookeeper存放数据

hbase集群启动后会在zookeeper集群注册如下节点:

1):replication:表示hbase副本状态,下面有三个节点:peer 节点管理slave集群在zk上的配置;state节点记录replication运行的状态;rs 节点记录着本集群rs中对应的hlog同步的信息,包括check point信息;

2):meta-region-server节点存放了当前hbase集群元数据哪台regionserver管理;

3):rs:记录在线的regionserver

4):splitWAL:当某台RegionServer服务器挂掉时,由于总有一部分新写入的数据还没有持久化到HFile中,因此在迁移该RegionServer的服务时,一个重要的工作就是从WAL中恢复这部分还在内存中的数据,而这部分工作最关键的一步就是SplitWAL,即HMaster需要遍历该RegionServer服务器的WAL,并按Region切分成小块移动到新的地址下,并进行日志的回放(replay)。

5):backup-masters:记录backup master节点

6):table-lock:记录defaults下所有表

7):flush-table-proc:

8):region-in-transition:region状态变迁(RegionState中region有四种状态:unassign,assign,split,merge)

9):online_snapshot:

10):master:master节点信息

11):running:

12):recovering-regions:

13):draining:

14):namespace:

15):hbaseid:hbase集群id

16):table:

HBase的数据模型比较简单,数据按照RowKey排序存放,适合HBase存储的数据,可以简单总结如下:

相关文章

网友评论

    本文标题:Hbase

    本文链接:https://www.haomeiwen.com/subject/qyrtwqtx.html