女友在高考
2022/09/03阅读:16主题:默认主题
HBase概念入门
HBase 简介
HBase 基于 Google 的 BigTable 论文而来,是一个分布式海量列式非关系型数据库系统,可以提供大规模数据集的实时随机读写。
下面通过一个小场景认识 HBase 存储。同样的一个数据
用 Mysql 存储是这样的:
id | name | age | salary | job |
---|---|---|---|---|
1 | 小明 | 23 | 学生 | |
2 | 小红 | 1000 | 律师 |
如果是 HBase 的话,存储是类似这样列式存储的:
field1 | filed2 |
---|---|
rowkey:1 | name:小明 |
rowkey:1 | age:23 |
rowkey:1 | job:学生 |
rowkey:2 | name:小红 |
rowkey:2 | salary:1000 |
rowkey:2 | job:律师 |
HBase 这样存储的优点是:
-
有空值字段的情况下,能减少存储空间占用 -
支持好多列
HBase 的特点
-
海量存储:底层基于 HDFS 存储海量数据 -
列式存储:HBase 表的数据是基于列族进行存储的,一个列族包含若干列 -
极易扩展:底层依赖 HDFS,当磁盘空间不足的时候,只需要动态添加 DataNode 服务节点就行了 -
高并发:支持高并发的读写请求 -
稀疏性:稀疏主要是针对 HBase 列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。 -
数据的多版本:HBase 表中的数据可以有多个版本值,默认情况下是根据版本号取区分,版本号就是插入数据的时间戳 -
数据类型单一:所有的数据在 HBase 中是以字节数组进行存储
HBase 的应用
-
交通方面:船只 GPS 信息,每天都有成千上万的数据存储 -
金融方面:消费信息、贷款信息、信用卡还款信息 -
电商方面:电商网站的交易信息、物流信息、游览信息等 -
电信、移动等:通话信息
HBase 的缺点
-
HBase 的有效性存在一定的问题,集群中一个节点宕机,这个节点的数据暂时就不能访问了,需要等待一定的时间进行同步处理。 -
HBase 的监控粒度太粗 -
查询简单,只能根据 key 扫描一条信息或者全部扫描 -
不支持交叉表、事务、连接查询
总结:HBase 适合海量明细数据的存储,并且后期能有很好的查询性能(单表超千万、上亿,且并发要求高)
HBase 数据模型
HBase 逻辑结构

HBase 物理存储
HBase 存储的时候是以列族为单位进行存储的。
HBase 模型描述
-
NameSpace
命名空间,类似于关系型数据库的 database 概念。每个 namespace 下有多个表。HBase 两个自带的 namespace,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 表是用户默认使用的 namespace。一个表可以自由选择是否有 namespace,如果创建表的时候加了 namespace,这个表名字以:作为区分
-
Table
类似于关系型数据库的表的概念。不同的是,HBase 定义表时只需要声明列族即可,数据属性:如超时时间、压缩算法等,都在列族的定义中定义,不需要声明具体的列
-
Row
HBase 表中的每行数据都由一个 RowKey 和多个 Column 列组成。一个行包含了多个列,这些列通过列族来分类,行中的数据所属列族只能从表所定义的列族中选取
-
RowKey
Rowkey 由用户指定的一串不重复的字符串定义,是一行的唯一标识。数据是按照 Rowkey 的字典顺序存储的,并且查询数据时只能根据 Rowkey 进行检索,所以 Rowkey 的设计十分重要。如果使用了之前已经定义的 RowKey,那么会将之前的数据更新掉
-
Column Family(列族)
列族是多个列的集合,一个列族可以动态灵活的定义多个列。表的相关属性大部分都定义在列族上,同一个表里的不同列族可以有完全不同的属性配置,但是同一个列族内的所有列都会有相同的属性。列族存在的意义是 HBase 会把相同列族的列尽量放在同一台机器上。
-
Column Wualifier(列)
HBase 中的列是可以随意定义的,一个行中的列不限名字、不限数量、只限定列族。因此列必须依赖于列族存在。列的名称前必须带着所属的列族
-
TimeStamp(版本)
用于标识数据的不同版本,时间戳默认由系统指定,也可以用户显式指定。在读取数据的单元格时,版本号可以忽略,如果不指定,HBase 默认会获取最后一个版本的数据返回
-
Cell
一个列中可以存储多个版本的数据。而每个版本就称为一个单元格
-
Region
HBase 将表中的数据基于 RowKey 的不同范围划分到不同 Region 上,每个 Region 都负责一定范围的数据存储和访问。每个表一开始只有一个 Region,随着数据不断插入表,Region 不断增大,当增大到一个阀值的时候,Region 就会等分成两个新的 Region。当 table 中的行不断增多,就会有越来越多的 Region。
HBase 整体架构

-
Zookeeper
-
实现了 HMaster 的高可用,保存了 HBase 的元数据信息,是所有 HBase 表的寻址入口 -
对 HMaster 和 HRegionServer 实现了监控
-
-
HMaster(Master)
-
为 HRegionServer 分配 Region -
维护整个集群的负载均衡 -
发现失效的 Region,并将失效的 Region 分配到正常的 HRegionServer 上
-
-
HRegionServer(RegionServer)
-
负责管理 Region -
接受客户端的读写数据请求 -
切分在运行过程中变大的 Region
-
-
Region
-
每个 HRegion 由多个 Store 构成 -
每个 Store 保存一个列族,表有几个列族,则有几个 Store -
每个 Store 由一个 MemStore 和多个 StoreFile 组成,MemStore 是 Store 在内存中的内容,写到文件后就是 StoreFile。StoreFile 底层就是以 HFile 的格式保存。
-
作者介绍