美文网首页
一、HBase概述

一、HBase概述

作者: loukey_j | 来源:发表于2020-01-13 13:51 被阅读0次

    1、Map由key和value组成,HBase的Map的key是一个复合键,由rowkey、column family、qualifier、type、以及timestamp组成,value 即为cell的值。

    2、HBase中数据的存储特点

    2.1、多维:HBase中Map与普通Map最大的不同在于,key是一个符合数据结构,由多维元素构成。

    2.2、稀疏:稀疏性是HBase的一个突出特点,在整整一行数据仅有几列数据有值,其他列都为空值的情况下,在其他数据库中,对于空值的处理一般都会填充null,但对于HBase,空值不需要任何填充。避免空间的浪费。

    2.3、排序:构成HBase的KV在同一个文件中是有序的,并不是仅仅按照rowkey排序,而是按照KV中的key进行排序——先比较rowkey,rowkey小的排在前面,如果rowkey相同,再比较column,即column family:qualifier,column小的排前面;如果column还相同再比较时间戳timestamp,即版本信息,timestamp大的排再前面。

    2.4、分布式:构成HBase的所有Map并不集中再某台机器,而是分布在整个集群中。

    3、HBase中的数据是按照列簇存储的,即数据按照列簇分别存储在不同的目录中。

    4、行式存储&列式存储

    4.1、行式存储在获取一行数据是很高效的,但是在获取某一列的场景下需要先查出列所在的所有行,这种方式在查找过程中引入了大量无用的列信息,从而导致大量占用内存。

          4.2、列式存储对于只查找某些列的请求非常高效,获取一行数据的请求不高效,需要多次IO读多个列数据,最终合并到一行数据。另外,因为同一行的数据通常具有相同的数据类型,因此列式存储具有天然的高压缩特性。

    4.3、HBase是列簇式存储,列簇是存储介于行式存储和列式存储之前,可以通过不同的设计思路在行式存储和列式存储之间相互切换,比如一张表只设置了一个列簇,这个列簇包含了所有列,HBase中一个列簇的数据是存储在一起的,因此这种设计模式就等同于行式存储。再比如一张表设置大量的列簇,每个列簇下仅一列,那就等同于列式存储。上面两例是两种极端的情况,在当前HBase中不建议设置大多的列簇。

    5、HBase体系结构

    5.1、HBase客户端

    HBase客户端提供了Java API等多种编程接口,支持常见的DML操作以及DDL操作。

    5.2、Zookeeper

    5.2.1、实现Master高可用

    5.2.2、管理核心元数据:保存hbase:meta所在的Region Server地址,管理当前工作的Region Server集合

    5.2.3、参与Region Server宕机恢复:通过心跳可以感知到Region Server是否宕机,并在宕机后通知Master进行宕机处理

    5.2.4、实现分布式表锁:HBase中对一张表进行各种管理操作(比如alte操作)需要先对表加锁,和其他RDBMS表不同,HBase中的表通常是分布式存储可以通过Zookeeper实现分布式锁

    5.3、Master

    5.3.1、处理用户的各种管理请求,包括建表、修改表、权限操作、切分表、合并数据分片以及Compaction等

    5.3.2、管理RegionServer,包括RegionServer中Region的负载均衡,RegionServer的宕机恢复以及Region的迁移等

    5.3.3、清理过期日志以及文件

    5.4、Region Server

          Region Sever主要用来响应用户的IO请求,是HBase中最核心的模块,由WAL(HLog)、BlockCache以及多个Region组成

          5.4.1、WAL

    HBase数据随机写入时,并非直接写入HFile数据文件,而是先写入缓存,再异步刷新落盘。为了防止数据丢失,数据写入缓存之前需要首先顺序写入HLog,这样即使缓存数据丢失,仍可以通过HLog日志恢复;在实现集群之间主从复制中,通过回放主集群推送过来的HLog日志实现主从复制。

    5.4.2、BlockCache

    HBase系统中的读缓存。客户端从磁盘读取数据之后通常会将数据缓存在系统内存中。BlockCache缓存对象时一系列的Block块,一个Block默认是64K.当前BlockCache主要由两种实现LRUBlockCache和BuketCache,前者实现相对简单,而后者在GC优化方面有明显的提升。

    5.4.3、Region

    Region代表表的一个分片,当表数据大小大达到一定阈值之后就会水平切分,分裂为2个Regin。Region是集群负载均衡的基本单位。

    一个Region由一个或多个Store组成,Store的个数由列簇的个数决定,在HBase中每个列簇数据都集中放在一起形成一个存储单元Store,因此建议具有相同IO特性的数据设置为同一个列簇中

    每个Store由一个MemStore和一个或多个HFlie组成。MemStore是写缓存,数据先写入MemStore当MemStore写满之后系统会异步地将数据flush形成一个HFile(MemStore 默认是128M)。随着数据不断写入,HFile越来越多,当HFile文件数量达到一定阈值之后系统将会执行Compact操作,将这些小文件通过一定策略合并成一个或多个大文件。

    6、HBase特点

    优点

    容量巨大

    良好的可扩展性

    稀疏性

    高性能

    多版本

    支持过期:HBase支持TTL过期特性,用户只需要设置过期时间,超过TTL的数据会被自动清理。

    Hadoop原生支持

    缺点

    HBase本身不支持复杂的聚合运算(如join、GroupBy等)如果业务需要使用聚合运算,可以在HBase之上架设Phoenix组件或者Spark组件。

    HBase本身没由实现二级索引功能,目前比较普遍的使用Phoenix提供的二级索引功能。

    HBase原生不支持全局跨行事务,只支持单行事务模型。可以使用Phoenix提供的全局事务模型组件来弥补HBase的这个缺陷。

    相关文章

      网友评论

          本文标题:一、HBase概述

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