1. HBASE 定义
HBASE
是一种分布式、可拓展、支持海量数据存储的 NoSQL
数据库
什么时候可以用 HBase
- 单表数据量超千万,且并发还挺高
- 数据分析需求较弱,或不需要那么灵活或者实时
以下情况之一建议不要使用 HBase
:
- 主要需求为数据分析,如做报表
- 单表数据量不超过千万
HBase 与 Hive 对比
HBase
:主要解决实时数据查询问题,HBase
是基于Hadoop
的数据库,适用于海量明细数据(十亿、百亿)的随机实时查询,如:日志明细、交易清单、轨迹行为等,偏向于实时查询。Hive
:主要解决数据处理和计算问题,Hive
是Hadoop
数据仓库,严格来说不算是数据库,主要用于开发人员能够通过SQL
来计算处理HDFS
上的结构化数据,适用于离线的批量数据计算,偏向于离线计算。
2. HBase 逻辑结构
HBase
底层物理结构是一个 k/v
结构,存储形式类似于关系型数据库,不过 HBase
是列式存储:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m8j3AZfp-1673957162822)(http://vdposter.bdstatic.com/eba01e9456981373d1ad3cbf5856d810.jpeg)]
HBase 物理存储结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQpT3MPj-1673957162823)(https://graph.baidu.com/thumb/v4/4192437538,675179936.jpg)]
3. HBase 数据模型
HBase
中的几个常用概念:
Name Space
:命名空间,类似于 数据库的概念,每个命名空间下有多个表;自带两个命名空间,分别为:hbase、default
,其中hbase
存放的是HBase
内置表,default
表时用户默认使用的命名空间Region
:类似于 数据表,不同的是HBase
在定义表时,只需声明列族即可,列名可 动态、按需指定,与关系型数据库相比,更为灵活Row
:行,每行数据由一个rowkey
和多个column
组成,数据安装rowkey
的字典顺序存储,查询时只能根据rowkey
检索Column
:列,列由Column Family 列族
、Column Qualifier 列限定符
进行限定,如:info:name
,其中info
是列族,name
即为列限定符,在创建表时可以不指定列限定符TimeStamp
:数据版本,用于标识数据的不同版本,每条数据写入时,若不指定时间戳,系统自动添加该字段,为写入HBase
的时间Cell
:单元格,里面存储的是实际的数据,HBase 存储的数据是没有类型的,全部是字节码形式存储,rowkey、cf、cn、timestamp
可以唯一确定一个cell
4. HBase 基本架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WKJF1ujP-1673957163483)(null)]
架构角色
Regio Server
:Region
的管理者,其实现类为HRgionServer
,作用:- 对数据操作:
get、put、delete
- 对
Region
操作:splitRegion、compactRegion
- 对数据操作:
Master
:是所有Region Server
的管理者,其实现类为HMaster
,作用:- 对于表的操作:
create、delete、alter
- 对于
RegionServer
操作:分配region
对每个RegionServer
,监控每个RegionServer
状态,负载均衡和故障转移
- 对于表的操作:
Zookeeper
:HBase
通过Zookeeper
来做Master
的高可用、RegionServer
的监控、元数据的入口以及集群配置的维护等工作HDFS
:为HBase
提供最终的底层数据存储服务,同时提供高可用支持
4.1 部署架构
HBase
有两种服务器:
Master
服务器:一个,负责维护表结构信息RegionServer
服务器:多个,存储实际数据,RegionServer
保存的表数据直接存储在Hadoop
的HDFS
上
RegionServer
依赖 zookeeper
,它类似于一个管家,管理所有 RegionServer
的信息,包括具体的数据段放在哪个 RegionServer
上;客户端每次与 HBase
连接,其实都是先与 ZooKeeper
通信,查询出哪
个 RegionServer
需要连接,然后再连接 RegionServer。
注意:客户端获取数据由客户端直连
RegionServer
,即使Master
挂掉依然可以查数据,但是不能新建表!
4.2 Region 是什么
Region
是一段数据的集合,一张表中一般有一个或多个,其特性如下:
- 不能跨服务器,一个
RegionServer
上有一个或多个Region
- 数据量小时,一个
Region
足以存储所有数据,当量比较大的时候,HBase
则会拆分Region
- 当
HBase
进行负载均衡时,也有可能会从一台RegionServer
上把Region
移动到另一台RegionServer
上 Region
基于hdfs
,所有数据存取操作都是调用hdfs
的客户端接口来实现的
4.3 RegionServer 是什么
RegionServer
是存放 Region
的容器,也可以说是一个服务;一般来说一个节点会有一个 RegionServer
服务,也可以开启多个。
当客户端从 Zookeeper
获取 RegionServer
地址后,它会直接从 RegionServer
获取数据。
4.4 Master 是什么
结论:Master
的工作是 “打杂”,负责协调,集群对 Master
依赖小,不容易引起单点故障
Master
只负责协调工作,如:建表、删表、移动 Region
、合并等,这些操作的共性是需要跨 RegionServer
。这种结果的好处是降低了集群对 Master
的依赖,而 Master
节点一般只有一两个,即使宕机也不会发生单点故障,依然可以存储和删除数据。