Hbase基础(一):HBase 简介

1 什么是 HBase

HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。

2 Hbase 特点

1)海量存储
Hbase 适合存储 PB 级别的海量数据,在 PB 级别的数据以及采用廉价 PC 存储的情况下,能在几十到百毫秒内返回数据。这与 Hbase 的极易扩展性息息相关。正式因为 Hbase 良好的扩展性,才为海量数据的存储提供了便利。
2)列式存储
这里的列式存储其实说的是列族存储,Hbase 是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
3)极易扩展
  Hbase 的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS)。
  通过横向添加 RegionSever 的机器,进行水平扩展,提升 Hbase 上层的处理能力,提升 Hbsae服务更多 Region 的能力。
备注:RegionServer 的作用是管理 region、承接业务的访问,这个后面会详细的介绍通过横向添加 Datanode 的机器,进行存储层扩容,提升 Hbase 的数据存储能力和提升后端存储的读写能力。
4)高并发
  由于目前大部分使用 Hbase 的架构,都是采用的廉价 PC,因此单个 IO 的延迟其实并不小,一般在几十到上百 ms 之间。这里说的高并发,主要是在并发的情况下,Hbase 的单个IO 延迟下降并不多。能获得高并发、低延迟的服务。
5)稀疏
稀疏主要是针对 Hbase 列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。

3 HBase 架构

图 1 HBase 架构图
从图中可以看出 Hbase 是由 Client、Zookeeper、Master、HRegionServer、HDFS 等几个组件组成,下面来介绍一下几个组件的相关功能:
1)Client
Client 包含了访问 Hbase 的接口,另外 Client 还维护了对应的 cache 来加速 Hbase 的访问,比如 cache 的.META.元数据的信息。
2)Zookeeper
  HBase 通过 Zookeeper 来做 master 的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。具体工作如下:
  通过 Zoopkeeper 来保证集群中只有 1 个 master 在运行,如果 master 异常,会通过竞争机制产生新的 master 提供服务
  通过 Zoopkeeper 来监控 RegionServer 的状态,当 RegionSevrer 有异常的时候,通过回调的形式通知 Master RegionServer 上下线的信息
  通过 Zoopkeeper 存储元数据的统一入口地址
3)Hmaster
master 节点的主要职责如下:
为 RegionServer 分配 Region
维护整个集群的负载均衡
维护集群的元数据信息
发现失效的 Region,并将失效的 Region 分配到正常的 RegionServer 上
当 RegionSever 失效的时候,协调对应 Hlog 的拆分
4)HregionServer
HregionServer 直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如下:
管理 master 为其分配的 Region
处理来自客户端的读写请求
负责和底层 HDFS 的交互,存储数据到 HDFS
负责 Region 变大以后的拆分
负责 Storefile 的合并工作
5)HDFS
HDFS 为 Hbase 提供最终的底层数据存储服务,同时为 HBase 提供高可用(Hlog 存储在HDFS)的支持,具体功能概括如下:
提供元数据和表数据的底层分布式存储服务
数据多副本,保证的高可靠和高可用性

4 HBase 中的角色

4.1 HMaster
功能
1.监控 RegionServer
2.处理 RegionServer 故障转移
3.处理元数据的变更
4.处理 region 的分配或转移
5.在空闲时间进行数据的负载均衡
6.通过 Zookeeper 发布自己的位置给客户端
4.2 RegionServer
功能
1.负责存储 HBase 的实际数据
2.处理分配给它的 Region
3.刷新缓存到 HDFS
4.维护 Hlog
5.执行压缩
6.负责处理 Region 分片
4.3 其他组件
1.Write-Ahead logs
HBase 的修改记录,当对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
2.Region
Hbase 表的分片,HBase 表会根据 RowKey值被切分成不同的 region 存储在 RegionServer中,在一个 RegionServer 中可以有多个不同的 region。
3.Store
HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个列族。
4.MemStore
顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL 中之后,RegsionServer 会在内存中存储键值对。
5.HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile 是以 Hfile的形式存储在 HDFS 的。

5 HBase 数据模型

逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从 HBase 的底层物理存储结构(K-V)来看,HBase 更像是一个 multi-dimensional map。
5.1 HBase 逻辑结构
5.2 HBase 物理存储结构
5.3 数据模型
1)Name Space
  命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase有两个自带的命名空间, 分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,
default 表是用户默认使用的命名空间。
2)Region
  类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明 列族即可,不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以 动态、按需指定。因此,和关
系型数据库相比,HBase 能够轻松应对字段变更的场景。
3)Row
  HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey的 字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。
4)Column
  HBase 中的每个列都由 Column Family(列族)Column Qualifier(列限定符)进行限定,例如 info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。
5)Time Stamp
  用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入 HBase 的时间。
6)Cell
  由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/qiu-hua/p/13400794.html