Hbase简介及各个组件介绍

一.Hbase简介

我们目前所使用的数据库类型主要有两种,关系型数据库,和非关系型数据库。
关系型数据库,我们之前可能会有所了解,如mysql,oracle,sqlserver等。
今天我们所要介绍的而是属于另外一种非关系型数据库 ,非关系型数据库也许多,如Mongdb,redis,Hbase等。今天主要介绍一下Hbase!

1.为什么使用Hbase?

尽管已经有许多数据存储和访问的策略方法,但是事实上的一些解决方案,尤其是关系型的,在构建并没有考虑到数据的规模以及分布式的特点。oracle最近的版本才开始发行集群版本的oracle。许多公司都是通过复制和分区的方法进行业务的扩展数据,使其摆脱单节点的束缚,但是由于是事后增加,安装以及后期的维护非常复杂。同时也会影响RDBMS(即关系数据库管理系统)的特定功能,如复杂查询,联接,触发器,视图以及外键约束等操作在大型的RDBMS的代价非常高,甚至有些是无法实现!

Hbase利用自身的特点考虑处理伸缩性的问题,通过线性方式从下岛上增加节点来进行扩展,虽然Hbase不是关系型数据库,不支持sql语句,但是它的一些有点事RDBMS不能及的。

2.什么是Hbase?

1.hbase来源于Google的BigTable论文,由于这篇论文,才一步步有了今天的Hbase。起初是Hadoop的子项目,用于支持结构化的数据存储。

2.发展历程:

2006年Google发表BigTable白皮书
2006开始开发Hbase

2008年,Hbase成为了Hadoop的子项目

2010年Hbase称为Apache顶级项目

Hbase是一个高可靠性,高性能,面向列,可伸缩的分布式存储系统,利用Hbase技术,可以在廉价的PC Server搭建起大规模的结构化的存储集群。
Hbase的目标是存储处理大型的数据,典型地利用空间换取时间等性能上的优势。

3.Hbase特点

(1)海量存储

Hbase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。

(2)列式存储

列式存储在hbase就是列族存储,Hbase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。

(3)极易扩展

Hbase的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
通过横向添加RegionSever的机器,进行水平扩展,提升Hbase上层的处理能力,提升Hbsae服务更多Region的能力。
备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。

(4)高并发

由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。能获得高并发、低延迟的服务。

(5)稀疏

稀疏主要是针对Hbase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。

二.Hbase架构

在这里插入图片描述

1.主要组件介绍

1.Client

1.整个Hbase集群的访问入口
2.Client当中包含了访问Hbase接口,此外,Client维护了对应了的cache加速Hbase访问,比如cache的.META.元数据的信息
3.与HRegionServer进行数据读写类操作
4.使用HBase RPC机制与HMaster和HRegionServer进行通信;

2.Zookeeper

1.高可用
通过Zookeeper来保证master的高可用,保证集群中只有一个master运行。
如果正在服务的master产生异常,通过竞争机制,产生新的master提供服务。

2.存储元数据的入口
这一功能减轻了master节点的“负担,把元数据交给zookeeper进行管理, 存储HBase的schema和table元数据,Zookeeper是存储元数据的统一入口地址

3.监控RegionServer
通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息

此外集群的一些维护工作也交给Zookeeper

3.HMaster

1.为RegionServer分配Region
2.维护整个集群的负载均衡,以及元数据信息
3.处理Region/RegionServer的分配或者转移
4.通过Zookeeper将自身位置发布给Client

4.HRegionServer

1.直接对接用户的读写请求,处理来自客户端的读写请求,是真正的“干活”的节点
2.管理master为其分配的Region。
3.负责存储HBase的实际数据
4.负责和底层HDFS的交互,刷新缓存到HDFS以及存储数据到HDFS
5.负责Region变大以后的拆分
6.负责Storefile的合并工作
7.维护Hlog
8.执行压缩

5.HRegion

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

6.Hdfs

1.HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog存储在HDFS)的支持。
2.提供元数据和表数据的底层分布式存储服务,数据多副本,保证的高可靠和高可用性

2.其他组件

1.Write-Ahead logs

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

用户所有的数据写入put等都会经过regionserver的log然后再去写

Wal解决的什么问题:
Hbaase ha的问题,hbase崩溃的时候,它可以恢复到崩溃前的状态
实现远程备份,客户端初始化一个对数据库改动的操作,比如,put,delete。
修改操作被封装在一个key,value实例里面然后通过rpc调用发送给regionserver,regionserver先写log再去写hregion

2.Hlog

Hlog是实现WAL的类,一个hregionserver对应一个Hlog的实例,一台服务器只有一个Hlog实例, 当region初始化的时候,Hlog会作为参数传递给hregion的构造函数,这样获取到Hlog的引用,可以实现打日志
Hlog最核心的是调用append方法,完成对于日志的追加写,出于对性能的考虑,put,delete,increment有一个开关函数set retowal函数传进布尔类型的参数,如果设置成false将禁用WAL,,
Hlog通过序列化的number追踪数据的改变,内部原子类型的log保证线程安全

3.Store

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

4.MemStore

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

5.HFile

这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以Hfile的形式存储在HDFS的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值