HBASE的出现

最适合使用Hbase存储的数据是非常稀疏的数据(非结构化或者半结构化的数据)。


另外,HBase的原型是Google的BigTable论文。HBase是一个/*高可靠性、高性能、面向列、可伸缩的分布式存储系统*/,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群,基于Hadoop。

结构化数据

具有固定的结构,属性划分,以及类型等信息。我们通常所理解的关系型数据库中所存储的数据信息,大多是结构化数据, 如职工信息表,拥有ID、Name、Phone、Address等属性信息。

半结构化数据

具有一定的结构,但又有一定的灵活可变性。典型如XML、HTML等数据。其实也是非结构化数据的一种。

非结构化数据

无法用统一的结构来表示。如文本文件、图像、视频、声音、网页等信息。

HBASE表的特点

大:一个表中可以有数十亿行,上百万列

无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列

面向列:面向列存储和权限控制

稀疏:空列并不占用存储空间,可以设计的非常稀疏

数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入的时间戳

数据类型单一:Hbase中的数据都是字符串,没有类型

HBASE的各组件及作用

Client

是HBase的接口,并维护cache来加快对HBase的访问,client不是直接和HMaster直接通信,而是和ZooKeeper,Zookeeper与HMaster通信后返回HRegionServer给Client, client再去找对应的HRegionServer

HMaster

Master进程负责管理所有的RegionServer,包括新的RegionServer的注册,RegionServer的故障切换处理。负责RegionServer的负载均衡。发现失效的RegionServer并重新分配其上的Region。管理用户对table的增删改查工作。GFS上的垃圾文件回收。处理Schema更新请求

Zookeeper

保证任何时候集群只有一个Master(Master的高可用)。存储region的寻址入口。实现监控RegionServer的上线和下线信息,并实现通知给Master。存储HBase的schema(架构)和table元数据


HMaseter的选举及故障切换

主备Master同时向ZooKeeper注册自己的节点信息,谁先写入,谁就是主节点
注册写入时会查询有没有相对应的节点,如果有,这个HMaster查看主节点是谁,如果主Master有相对应的节点并且实时更新了,那么这个HMaster就会自动作为备节点,进入休眠状态
备节点会实时监听ZooKeeper的状态主节点的信息
在系统开始时,主备节点都会向Zookeeper里面创建一个目录,比如叫HBase,在目录中写入节点信息,创建之前先去查询里面有没有这个目录以及目录里面文件的时间戳信息与当前节点的时间戳信息做对比,如果对比超过了5秒钟,那说明这个节点已经损坏了。主节点每隔一秒更新下时间戳,备节点每隔一秒去查询下时间戳,当主节点宕机时,时间戳没更新,备节点查询超过5秒钟没有更新,意味着主节点已经宕机,备节点非常高兴的把自己的节点信息写入,变成主节点
保证任何时候,集群中只有一个Master

HRegion Server

HRegionServer是HBase的从点,它负责提供表数据读写等服务,是数据存储和计算单元。一台HRegionServer管理多个Region和一个Hlog.
Region Server负责维护Master分配给它的Region,处理对这些Region的IO请求.
Region Server负责切分在运行过程中变得过大的Region.

Region

一个region由一个或多个store组成,每个store存储该region一个列簇的数据,一个store包含一个memstore缓存以及若干StoreFile文件,Memstore缓存客户端向region插入的数据,同时写入Hlog,当HregionServer中的Memstore大小达到配置容量上限时,RegionServer会将Memstore中的数据刷新(flush)到HDFS中,成为Hfile,删除Hlog文件。


Region分为元数据Region以及用户Region两类
元数据Region也叫Meta Region,记录了每个Region的路由信息,每个子表的存放位置,起始Key值,元数据Region存放在Root表中,Root表则存放在Zookeeper中

Hbase寻找数据的过程

读取Region数据的路由需要以下几步
1:在Zookeeper只查找Meta Region的地址
2:再由Meta Region中寻找User Region的地址

Hbase数据的删除

HBase数据的修改和删除是在数据合并时,才会真正的做修改和删除

Hbase的读写流程

HBase的写流程
数据写请求首先发给client,client向zookeeper发送请求查询materegion表的路由信息,zk向Hmaster请求后返回给client一个regionserver,client查询该数据应该往哪个地方。获取到之后,再根据获取额结果做个分组,发给各个RegionServer,数据并发写入,数据先写入MemStore,然后再写入HLog,写完后,HMaster也会做相应的更新,然后才会返回写成功。
当MemStore达到一定值时,也会做个刷盘操作,生成一个新的HFile文件,当HFile文件变多之后,也会做个合并,数据最终存放在DataNode里面

HBase的读流程
客户端发起请求,通过Zookeeper寻找到Meta表所在RegionServer,通过RowKey查找Meta表,获取所要读取的Region所在RegionServer,请求发送到该RegionServer,由其具体处理数据读取