HBase存储方案设计总结

1 整体存储方案

        由于项目所有的文件数据都会存放到HBase表格中,数据量较大,因此采用按时间分表的方式,将不同时间段的数据存放到不同的表格中。

2 分表策略

        因项目增量较大,日增约600GB,一年数据量约为200TB,因此采用按年分表,每年的数据放置在一张HBase表格中。每到新的一年开始,新建一张表格,存储下一年的数据。表格命名规则如下:

表格名称+年份,例如historyfile_2022。

3 表结构设计

3.1 Rowkey设计

        Rowkey采用加盐+文件路径的方式。使用文件路径,是因为查询的时候需要使用文件路径进行定位。如果不做加盐,部分路径的数据量会特别大,导致出现热点region问题,因此还需要采用加盐。

        加盐,通过在主键之前加上部分的hash值。场景的实现方式为key.hashcode%regionNum+key。这样可以把记录相对比较均匀的打散到每个region。

3.2 Rowkey全局唯一性

        由于每份文件都不同,需要确保Rowkey全局唯一,即文件路径需要全局唯一。如果Rowkey相同。默认情况下HBase会重复写入,并且保存为较新的版本,默认有3个版本(后面第4章会提到)。

应用层面实现全局唯一,可以通过如下逻辑实现:

  1. 如果是数据写入,首先获取对应key的内容
  2. 如果没有对应记录,则尝试写入
  3. 如果存在,则写入失败。

3.3 Column Family设计

HBase表格每条记录可以分为如下几个部分:

  1. Rowkey:全局唯一的主键
  2. Cloumn Family:可以有多个,一个Column Family可以办好多个列
  3. Column:一列。
  4. 不同的行可以有不同的Column Family和Column。

列族/列

名称

含义

MOB启用

列族

f

c

存放文件数据

3.4 Mob功能

        Mob(HBase Medium Object Storage)功能,主要用于优化中等文件(100k到10M)在Hbase中的读写延迟,以及随机访问的能力。该功能使得HBase能够比较好的读写中等大小的文件头,例如文档,图片,音频等。

HBase默认的读写机制,在读写中等文件时,会出现延迟非常不均匀的情况。Mob功能的实现修复了这个问题。MOB通过使用额外的存储路径来存放这些文件,并且采用了全新的compaction机制。MOB文件存储的路径,称为MOB region,一开始存入MOB region的文件,会随着写入的增多,文件数不断增多,通过compaction机制,MOB文件会进行合并。默认合并的机制,是同一个region下,同一天的数据会合并成一个文件。也就是说,一个region目录下,一年会有365个文件。如果表格有1000个region,那么一年将会产生365*1000个文件。

MOB功能可以对Column Family级别设置启用,启用后通过MOB_THRESHOLD参数来设置记录是否会被存放到MOB。如果记录大小超过MOB_THRESHOLD则会写入MOB,否则会按正常路径存放。

3.5 Region个数

HBase的一张表格会划分成多个region, 每个region负责存储一部分数据。Region的个数,在使用MOB功能的情况下,需要根据以下两个因素去考虑:

  1. 表格的数据量
  2. 产生的文件数

本次采用分表的策略,一年的数据,存放在一张表格。因此,集群HBase,所有的数据量为单张HBase表格*年数,产生的文件数为单张HBase表格*10。

上一章节中描述使用MOB功能后,Hbase表格文件数为region数*365*年数。

按需求的推算,一年将近有200TB数据,每天约有600GB数据。如果单张表使用200个region,则每个region平均为1TB数据,且每天的MOB文件数大小约为2.75GB。相对比较合理。

因此建议,1年的数据使用200个region。

4 HBase记录版本设置

        HBase每条记录可以保存多个版本,也就是同一个Rowkey 的同一个列可以写入多个版本的记录。HBase支持获取这些版本的值。

若所有文件具有唯一性,不存在一份文件有多个版本的情况。只需要记录一个版本就行。因此对于具有唯一性的文件建议将HBase记录的版本数设置为1。

若存储的文件不具备唯一性,则需要根据存储容量评估可存储的版本数。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值