【HBase】介绍


Apache HBase™ 是以 hdfs 为数据存储的,一种分布式、可扩展的 NoSQL 数据库。

Bigtable 是一个稀疏的、分布式的、持久的多维排序 map。

该映射由行键、列键和时间戳索引;映射中的每个值都是一个未解释的字节数组

HBase 使用与 Bigtable 非常相似的数据模型。用户将数据行存储在带标签的表中。数 据行具有可排序的键和任意数量的列。该表存储稀疏,因此如果用户喜欢,同一表中的行可 以具有疯狂变化的列。

HBase 数据模型的关键在于稀疏、分布式、多维、排序的映射。其中映射 map 指代非关系型数据库的 key-Value 结构。

什么时候用Hbase?

数据库量要足够多,如果有十亿及百亿行数据,那么Hbase是一个很好的选项,如果只有几百万行甚至不到的数据量,RDBMS是一个很好的选择。因为数据量小的话,真正能工作的机器量少,剩余的机器都处于空闲的状态

如果你不需要辅助索引,静态类型的列,事务等特性,一个已经用RDBMS的系统想要切换到Hbase,则需要重新设计系统。

保证硬件资源足够,每个HDFS集群在少于5个节点的时候,都不能表现的很好。因为HDFS默认的复制数量是3,再加上一个NameNode。

常见应用场景

  • 存储业务数据:车辆GPS信息,司机点位信息,用户操作信息,设备访问信息。。。
  • 存储日志数据:架构监控数据(登录日志,中间件访问日志,推送日志,短信邮件发送记录。。。),业务操作日志信息
  • 存储业务附件:UDFS系统存储图像,视频,文档等附件信息

一般不使用原生的Hbase API,使用原生的API会导致访问不可监控,影响系统稳定性,以致于版本升级的不可控。

逻辑结构

  {
        "row_key1":{
        "personal_info":{
            "name":"zhangsan", "city":"北京", "phone":"131********"
        },
        "office_info":{
            "tel":"010-1111111", "address":"atguigu"
        }
    },
        "row_key11":{
        "personal_info":{
            "city":"上海", "phone":"132********"
        },
        "office_info":{
            "tel":"010-1111111" 尚硅谷大数据技术之 HBase

        }
    },
        "row_key2":{
......
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fMX1dvVz-1683896989230)(C:/Users/19801/AppData/Roaming/Typora/typora-user-images/image-20230512193725892.png)]

物理结构

物理存储结构即为数据映射关系,而在概念视图的空单元格,底层实际根本不存储。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oa52ioUJ-1683896989231)(C:/Users/19801/AppData/Roaming/Typora/typora-user-images/image-20230512193805170.png)]

数据模型

Name Space

类似关系型数据库的 database 概念,每个命名空间下有多个表。

HBase 两 个自带的命名空间,分别是 hbase (存放的是 HBase 内置的表),default(用户默认使用的命名空间)。

Table

类似关系型数据库的概念。

不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。

因为数据存储时稀疏的,所有往 HBase 写入数据时,字段可以动态、按需 指定。

Row

每行数据都由一个 RowKey 和多个 **Column(列)**组成。

数据按照 RowKey 的字典顺序存储,并且查询数据时只能根据 RowKey 进行检索

Column

由 Column Family(列族)和 Column Qualifier(列限定符)限定

例如 info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。

Time Stamp

用于标识数据的不同版本(version)

每条数据写入时,系统会自动为其加上该字段, 其值为写入 HBase 的时间。

Cell

{rowkey, column Family:column Qualifier, timestamp} 唯一确定的单元.

由字节码形式存贮。

存储设计

在Hbase中,表被分割成多个更小的块然后分散的存储在不同的服务器上,这些小块叫做Regions,存放Regions的地方叫做RegionServer。

Master进程负责处理不同的RegionServer之间的Region的分发。

在Hbase实现中HRegionServer和HRegion类代表RegionServer和Region。

HRegionServer除了包含一些HRegions之外,还处理两种类型的文件用于数据存储

  • HLog, 预写日志文件,也叫做WAL(write-ahead log)
  • HFile 真实的数据存储文件

HLog

  • MasterProcWAL:HMaster记录管理操作,比如解决冲突的服务器,表创建和其它DDLs等操作到它的WAL文件中,这个WALs存储在MasterProcWALs目录下,它不像RegionServer的WALs,HMaster的WAL也支持弹性操作,就是如果Master服务器挂了,其它的Master接管的时候继续操作这个文件。

  • WAL记录所有的Hbase数据改变,如果一个RegionServer在MemStore进行FLush的时候挂掉了,WAL可以保证数据的改变被应用到。如果写WAL失败了,那么修改数据的完整操作就是失败的。

    • 通常情况,每个RegionServer只有一个WAL实例。在2.0之前,WAL的实现叫做HLog
    • WAL位于*/hbase/WALs/*目录下
    • MultiWAL: 如果每个RegionServer只有一个WAL,由于HDFS必须是连续的,导致必须写WAL连续的,然后出现性能问题。MultiWAL可以让RegionServer同时写多个WAL并行的,通过HDFS底层的多管道,最终提升总的吞吐量,但是不会提升单个Region的吞吐量。
  • WAL的配置:

    // 启用multiwal
    <property>
      <name>hbase.wal.provider</name>
      <value>multiwal</value>
    </property>
    

    Wiki百科关于WAL

HFile

HFile是Hbase在HDFS中存储数据的格式,它包含多层的索引,这样在Hbase检索数据的时候就不用完全的加载整个文件。索引的大小(keys的大小,数据量的大小)影响block的大小,在大数据集的情况下,block的大小设置为每个RegionServer 1GB也是常见的。

探讨数据库的数据存储方式,其实就是探讨数据如何在磁盘上进行有效的组织。因为我们通常以如何高效读取和消费数据为目的,而不是数据存储本身。

Hfile生成方式

起初,HFile中并没有任何Block,数据还存在于MemStore中。

Flush发生时,创建HFile Writer,第一个空的Data Block出现,初始化后的Data Block中为Header部分预留了空间,Header部分用来存放一个Data Block的元数据信息。

而后,位于MemStore中的KeyValues被一个个append到位于内存中的第一个Data Block中:

:如果配置了Data Block Encoding,则会在Append KeyValue的时候进行同步编码,编码后的数据不再是单纯的KeyValue模式。Data Block Encoding是HBase为了降低KeyValue结构性膨胀而提供的内部编码机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

返返返

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值