Hbase概述

一、 HBase的起源

HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储。

官方网站:http://hbase.apache.org

* 2006年Google发表BigTable白皮书

* 2006年开始开发HBase

* 2008年HBase弄成了Hadoop的子项目

* 2010年HBase成为Apache顶级项目

* 现在很多公司二次开发出了很多发行版本,你也开始使用了

二、基于HadoopHBase架构

HBase内置有zookeeper,但一般我们会有其他的Zookeeper集群来监管masterregionserverZookeeper通过选举,保证任何时候,集群中只有一个活跃的HMasterHMasterHRegionServer 启动时会向ZooKeeper注册,存储所有HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBaseschematable元数据,默认情况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster不再是单点故障。一般情况下会启动两个HMaster,非ActiveHMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担

一个RegionServer可以包含多个HRegion,每个HRegion维护一个HLog,和多个HFiles以及其对应的MemStoreRegionServer运行于DataNode上,数量可以与DatNode数量一致,请参考如下架构图:

、HBase特征简要

自动故障处理和负载均衡

HBase运行在HDFS上,所以HBase中的数据以多副本形式存放,数据也服从分布式存放,数据的恢复也可以得到保障。另外,HMasterRegionServer也是多副本的。

自动分区

HBase表是由分布在多个RegionServer中的region组成的,这些RegionServer又分布在不同的DataNode上,如果一个region增长到了一个阈值,为了负载均衡和减少IOHBase可以自动或手动干预的将region切分为更小的region,也称之为subregion

集成Hadoop/HDFS

虽然HBase也可以运行在其他的分布式文件系统之上,但是与HDFS结合非常之方便,而且HDFS也非常之流行。

实时随机大数据访问

HBase采用log-structured merge-tree作为内部数据存储架构,这种架构会周期性地将小文件合并成大文件以减少磁盘访问同时减少NameNode压力。

MapReduce

HBase内建支持MapReduce框架,更加方便快速,并行的处理数据。

Java API

HBase提供原声的Java API支持,方便开发。

横向扩展

HBase支持横向扩展,这就意味着如果现有服务器硬件性能出现瓶颈,不需要停掉现有集群提升硬件配置,而只需要在现有的正在运行的集群中添加新的机器节点即可,而且新的RegionServer一旦建立完毕,集群会开始重新调整。

列存储

HBase是面向列存储的,每个列都单独存储,所以在HBase中列是连续存储的,而行不是。

HBase Shell

HBase提供了交互式命令行工具可以进行创建表、添加数据、扫描数据、删除数据等操作和其他一些管理命令。

四、HBase在集群中的定位

HBase一种是作为存储的分布式文件系统,另一种是作为数据处理模型的MR框架。因为日常开发人员比较熟练的是结构化的数据进行处理,但是在HDFS直接存储的文件往往不具有结构化,所以催生出了HBaseHDFS上的操作。如果需要查询数据,只需要通过键值便可以成功访问。

五、HBase内部存储架构

HBase是由row keycolumn familycolumncell组成,row key确定唯一的一行,column family由若干column组成,column是表的字段,cell存储了实际的值或数据。

六、HBase与Hadoop

1HDFS

* 为分布式存储提供文件系统

针对存储大尺寸的文件进行优化,不需要对HDFS上的文件进行随机读写

* 直接使用文件

* 数据模型不灵活

* 使用文件系统和处理框架

2HBase

* 提供表状的面向列的数据存储

* 针对表状数据的随机读写进行优化

使用key-value操作数据

* 提供灵活的数据模型

使用表状存储,支持MapReduce,依赖HDFS

* 优化了多次读,以及多次写

七、HBase的优缺点

1、优点

* 方便高效的压缩数据

* 支持快速数据检索

* 管理和配置简单,支持横向扩展,所以非常容易扩展

* 聚合查询性能非常高

可高效地进行分区,提供自动分区机制把大的region切分成小的subregion

2、缺点

JOIN以及多表合并数据的查询性能不好

* 更新过程中有大量的写入和删除操作,需要频繁合并和分裂,降低存储效率

* 对关系模型支持不好,分区和索引模式设计比较困难。

八、HBase环境角色

1HMaster

1、功能描述

监控RegionServer

处理RegionServer故障转移

* 处理元数据的变更

处理region的分配或移除

* 在空闲时间进行数据的负载均衡

通过Zookeeper发布自己的位置给客户端

2RegionServer

2.1、功能描述

负责存储HBase的实际数据

处理分配给它的Region

* 刷新缓存到HDFS

维护HLog

* 执行压缩

负责处理Region分片

2.2、内含组件

* Write-Ahead logs

HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。如果机器突然原地爆炸,把数据保存在内存中会引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

* HFile

这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。

* Store

HFile存储在Store中,一个Store对应HBase表中的一个列族

* MemStore

顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。

* Region

Hbase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region

3Zookeeper

HMasterHRegionServer 启动时会向ZooKeeper注册,存储所有HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBaseschematable元数据,默认情况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster不再是单点故障。一般情况下会启动两个HMaster,非ActiveHMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担

九、使用场景的探讨

1、何时使用

* 如果数据有很多列,且包含很多空字段

* 数据包含了不定数量的列

* 需要维护数据的版本

* 需要很高的横向扩展性

* 需要大量的压缩数据

需要大量的I/O

一般而言数百万行的数据和频率不高的读写操作,是不需要HBase的,如果有几十亿列数据,同时在单位时间内有数以千、万记的读写操作,可以考虑HBase

2、何时不使用

数据总量不大时(比如就几个G

当需要JOIN以及关系型数据库的一些特性时

* 如果关系型数据库可以满足需求

 

posted @ 2019-05-24 16:31  zhangqi0828  阅读(397)  评论(0编辑  收藏  举报