女友在高考

V1

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 的格式保存。

分类:

后端

标签:

大数据

作者介绍

女友在高考
V1