Hbase架构与存储组件结构与功能


HBase宏观架构

架构图
在这里插入图片描述

Master

负责启动的时候分配Region到具体的RegionServer,执行各种管理操作,如:Region的分割与合并、创建表、修改列族配置等操作。

RegionServer

存在一个或多个Region,所有的数据是存储在Region上的。Region所有数据存取都是调用HDFS的客户端实现的。

Region

表的一部分数据。HBase是一个会自动分片的数据库。一个Region就相当于关系型数据库中分区表的一个分区。

HDFS

HBase并不直接跟服务器的硬盘交互,而是跟HDFS交互,HDFS是真正承载数据的载体。

ZooKeeper

HBase中组件的高可用是基于ZooKeeper实现,以及元数据一般都是存储在ZooKeeper上的。

Region

一个RegionServer会存在一个或多个Region。

Region相当于一个数据分片,每个Region都有起始rowkey和结束rowkey,代表它所存储的Row范围。

架构图
在这里插入图片描述

WAL(预写日志)

WAL(Write-Ahead Log),当操作到达Region的时候,HBase会先将操作写入WAL中,在把数据放到基于内存实现的MemStore中,等到数据达到一定的数量时才刷写(flush)到最终存储的HFile中。当遇到故障的时候可以根据WAL恢复数据。

操作类型有:Put、Append、Increment、Delete。当操作到达时会立即被写入WAL中,写入调用的是HDFS客户端接口写入HDFS的。

关闭/打开WAL

WAL模式默认是开启的,可以通过调用下列语句关闭WAL。

Meutaion.setDurability(Durability.SKIP_WAL);

还可以关闭/开启指定操作类型的WAL。这样虽然可以让数据操作更快一点,当服务器宕机时,会导致数据丢失。

延迟(异步)同步写入WAL

通过异步写入WAL,可以让数据操作更快一点,但是也会导致部分数据丢失。
WAL异步写入,调用方法

Meutaion.setDurability(Durability.ASYNC_WAL);

WAL滚动

WAL是一个环状的滚动日志结构,因为这种结构可以写入效果最高,而且可以保证空间不会持续变大。

WAL的检查间隔由hbase.regionserver.logroll.period定义,默认值1小时。检查的内容是把当前WAL中的操作跟实际持久化到HDFS上的操作比较,看哪些操作已经别持久化了,被持久化的操作就会被移动到.oldlogs文件夹内(也存储在HDFS上)。

一个WAL实例包含多个WAL文件。WAL文件的最大数量通过hbase.regionserver.maxlogs定义,默认值32。

触发滚动的条件:

  1. 当WAL文件所在的快(Block)快要满了。
  2. 当WAL所占空间大于或等于某个阀值,计算公司hbase.regionserver.hlog.blocksize * hbase.regionserver.logroll.multiplier

hbase.regionserver.hlog.blocksize:存储系统块(Block)大小,一般是HDFS的块大小即可,不设定HBase会自己去尝试获取这个参数的值。

hbase.regionserver.logroll.multiplier:默认0.95,如果WAL文件所占空间大于或等于95%的块大小,则这个WAL文件就会被归档到.oldlogs文件夹中。

WAL文件归档

WAL文件被创建出来后会被放在/hbase/.log下,一旦WAL文件被归档,则会被移动到/hbase/.oldlogs文件夹下。

Master会负责定期地清理.oldlogs文件夹,条件是”当这个WAL不需要作为用来恢复数据的备份“时候。判断条件是”没有任何引用指向这个WAL文件“,才会被系统彻底删除。

  1. TTL进程:该进程会保证WAL文件一直存活直到hbase.master.logcleaner.ttl定义的超时时间(默认10分钟)为止。
  2. 备份(replication)机制:如果开启了HBase的备份机制,那么HBase要保证备份集群已经完全不需要这个WAL文件了,才会删除这个WAL文件。
    备份:是把一个集群的数据实时备份到另外一个集群,如果就一个集群就不需要考虑这个因素。

Store

一个Region可能包含多个Store实例。一个Store对应一个列族的数据,Store内部含有MemStore和HFile这两个组件。

每个Store只有一个MemStore实例,多个HFile实例。当MemStore满了之后HBase就会在HDFS上生成一个新的HFile,然后把MemStore中的内容写到HFile中。

MemStore

数据被写入WAL之后就会被加载到MemStore中,当MemStore的大小增加到超过一定阀值的时候就会被刷写到HDFS上,以HFile形式被持久化起来。

设计MemStore的原因有以下几点

  1. 由于HDFS上的文件是不可修改的,为了让数据顺序存储从而提高读取效率,HBase使用了LSM树结果来存储数据。
    MemStore会将数据整理成LSM树,最后在刷写到HFile上。
    读取操作是先BlockCache,在读取MemStore+HFile。
  2. 优化数据的存储。如:一个数据添加后立马就删除,这样在刷写的时候就可以直接不把这个数据写到HDFS上。

HFile

HFile是数据存储的实际载体,创建的所有标、列等数据都存储在HFile里面。

HFile是由一个一个的块组成的。在HBase中一个块的大小默认是64KB,由列族上的BLOCKSIZE属性定义。

架构图
在这里插入图片描述

  1. Data: 数据块。每个HFile中有多个Data块。存储HBase表中的数据。(可选)
  2. Meta:元数据块。Meta块只有在文件关闭时才写入,Meta块存储该Hfile文件的元信息。(可选)
  3. FileInfo:文件信息。在文件关闭时写入,存储的是这个文件的信息,如:最后一个Key(Last Key)、平均的Key长度(Avg Key Len)等。(必选)
  4. DataIndex:存储Data块索引信息的文件块。索引信息即Data块的偏移值(offset),有Data块就有DataIndex。(可选)
  5. MetaIndex:存储Meta块索引信息的文件块。有Meta才有MetaIndex。
  6. Trailer:存储FileInfo、DataIndex、MetaIndex块的偏移值。(必选)

Data

Data数据块的第一位存储的是块的elixir,后面存储多个Cell(KeyValue键值对)。

BlockType(块类型)

  1. DATA(数据)
  2. ENCODE_DATA(数据编码格式)
  3. LEAF_INDEX(叶索引)
  4. BLOOM_CHUNK(BLOOM块)
  5. META(元数据)
  6. INTERMEDIATE_INDEX(中间索引)
  7. ROOT_INDEX(根索引)
  8. GENERAL_BLOOM_META(通用BLOOM元数据)
  9. DELETE_FAMILY_BLOOM_META(删除族BLOOM元数据)
  10. TRAILER
  11. INDEX_V1

KeyValue类(Cell)

  1. KeyLen 键长读
  2. ValueLen 值长度
  3. RowLen 行长度
  4. Row:行
  5. CF LEN:(Column Family,列族)长度
  6. CF:(Column Family,列族)
  7. Col: (Column,列)
  8. Time Stamp: 时间戳
  9. Key Type: 键类型
    10.Value: 具体值

HBase实现增删改成

因HBase是持久化到HDFS的,所有不支持修改。

  1. 新增一个单元格的时候,HBae在HDFS新增一条数据。
  2. 修改一个单元格的时候,HBase在HDFS新增一条数据,只是版本好比之间的大。
  3. 删除一个单元格的时候,Hbase在HDFS新增一条数据,这条数据没有value,类型为DELETE。

真正删除发生的时候

通过Minor Compaction 和 Major Compaction合并实现删除数据

  1. Minor Compaction: 将Store中多个HFile合并为一个HFile。在这个过程中达到TTL的数据会被移除,但是被手动删除的数据不会被移除,触发频率高。
  2. Major Compaction: 合并Store中所有HFile为一个HFile。在这个过程中手动删除的数据会被真正地移除。同时被删除的还有单元格内超过MaxVersion的版本数据,触发频率低,默认为7天一次,且消耗性能较大。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿里云大规模结构化云存储HBase是一个分布式、可扩展和高可靠的NoSQL数据库系统。它基于Hadoop分布式文件系统(HDFS)构建,主要用于存储和管理海量结构化数据。 HBase架构是由多个组件组成的。首先是RegionServer,它是HBase的核心组件之一,负责管理和存储一部分数据,每个RegionServer可以管理多个Region。Region是HBase中最小的数据单元,一个表被分割成多个Region并在不同的RegionServer上存储。这种分布式的存储方式使得HBase能够水平扩展,处理海量数据。 另一个重要组件是HMaster,它负责协调和管理整个集群中的RegionServer。HMaster维护了整个HBase集群的元数据,包括表的结构、Region的分布等信息。 HBase还有一个重要的组件是Zookeeper,用于保存HBase集群的状态信息和一致性协调。Zookeeper能够监控和管理HBase集群的变化,保证数据的一致性和可靠性。 HBase存储基于HDFS,数据被分割成多个块并在HDFS的不同节点上存储HBase使用Hadoop中的块缓存来优化读取性能,并且支持数据的压缩和版本控制。 HBase提供了高性能的读写操作,能够快速处理大规模结构化数据。它支持强一致性的读写操作,并且还提供了快速的随机访问能力。 总结来说,阿里云大规模结构化云存储HBase采用分布式架构,能够处理海量结构化数据。通过多个组件的协同工作,HBase实现了高可靠性、可扩展性和高性能的存储和管理功能。它在大数据环境中得到广泛应用,并为用户提供了强大的数据存储和处理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值