pbc1984

一、概述

    hbase 写入优化除了参数配置之外,很大的一块要考虑避免region的热点问题,避免region 热点问题,主要的目的是提高hbase 数据表rowkey的分散。结合实际情况主要有以下几个办法

    1.1 rowkey的创建规则 避免, 比如 通过rowkey前几位的hash。业务规则避免,比如 用户id+时间、手机号的倒叙、

    1.2 通过hbase的访问API的扩展,在HBASE的访问API 通过对读写的封装,实现自动在hbase的rowkey前面增加随机码的方式实现region的进一步分散

    1.3 通过表的创建预分区 实现region的分散

二、预分区表的创建

    结合实际情况,创建预分区需要注意,预分区的创建也要尽可能的分散。

    在实际业务中,全链路数据表的rowkey是采用guid ,由于GUid  仅采用0-9,a-f  16个字段,也就是如果仅按照第一个字母创建,仅能创建16个分区,也就是16个region,为了更好的利用水平扩展的能力,需要尽可能多的创建预先多的region,但是也要综合考虑,创建过多额region,会导致查询比较慢。结合实际的集群和使用情况,全链路的写入压力比较大,tps需要达到2.5w,并且要非常稳定。因此 为了提升写入速度,决定第全链路创建尽可能多的rgion

 操作命令如下:

  ---采用基于前面的2个字段创建,一定要注意要尽可能的平均,否则会造成热点问题   

create \'TTrace_20190817\',\'d\', 
SPLITS => 
[\'00|\',\'06|\',\'0a|\',\'0d|\',
\'10|\',\'16|\',\'1a|\',\'1d|\',
\'20|\',\'26|\',\'2a|\',\'2d|\',
\'30|\',\'36|\',\'3a|\',\'3d|\',
\'40|\',\'46|\',\'4a|\',\'4d|\',
\'50|\',\'56|\',\'5a|\',\'5d|\',
\'60|\',\'66|\',\'6a|\',\'6d|\',
\'70|\',\'76|\',\'7a|\',\'7d|\',
\'80|\',\'86|\',\'8a|\',\'8d|\',
\'90|\',\'96|\',\'9a|\',\'9d|\',
\'a0|\',\'a1|\',\'a5|\',\'ab|\',\'ac|\',\'ad|\',\'ae|\',\'af|\',\'aa|\',\'a8|\',\'a9|\',
\'b0|\',\'b1|\',\'b5|\',\'b8|\',\'b9|\',\'ba|\',\'bb|\',\'bc|\',\'bd|\',\'be|\',\'bf|\',
\'c0|\',\'c1|\',\'c5|\',\'c8|\',\'c9|\',\'ca|\',\'cb|\',\'cc|\',\'cd|\',\'ce|\',\'cf|\',
\'d0|\',\'d1|\',\'d5|\',\'d8|\',\'d9|\',\'da|\',\'db|\',\'dc|\',\'dd|\',\'de|\',\'df|\',
\'e0|\',\'e1|\',\'e5|\',\'e8|\',\'e9|\',\'ea|\',\'eb|\',\'ec|\',\'ed|\',\'ee|\',\'ef|\',
\'f0|\',\'f1|\',\'f5|\',\'f8|\',\'f9|\',\'fa|\',\'fb|\',\'fc|\',\'fd|\',\'fe|\',\'ff|\' 
]

----由于目前hbase的查询缓存 gc回收算法 仍然是 LruBlockCache  ,目前这个表的查询重复的场景并不多,同时为了防止查询内存的GC,从而影响写入速度的问题,将此表的缓存设置为false

alter \'TTrace_20190817\', {NAME=>\'d\',BLOCKCACHE=>\'false\'}

--预写日志禁用,提升写入速度

alter \'TTrace_20190817\', METHOD => \'table_att\', DURABILITY => \'SKIP_WAL\'

三、ttl表数据的删除

    1.数据的及时清理,降低存储成本

     业务特点:1.写入tps 高  2.热数据需要保存的时间不长  3.查询不是按照时间序列查询  4.存储采用hbase  5.查询延迟要求较低

    针对此类数据,为了降低存储 节约成本,主要有2个方案,

   1. 数据落盘之前,进行数据的清理,此方案的架构如下,但是 遇到的技术问题 -会对流计算带来非常大的压力,内存和cpu占用非常高,因此不宜采用

         

 

2.数据落盘之后,采用离线任务,将有用的数据进行及时清洗出来,并通过TTL 及时将冷数据进行删除。降低存储,采用的架构如下:

   

 为了配合数据的删除,并且之前发生过hbase 删除单表超过5t的数据表时,速度非常慢,并且容易对集群的稳定性有影响,结合hbase 数据删除的原理 ,主要采用如下方法,删除大表

 场景:

   1.表每天的数据为3t。需要保留的热数据为2个小时。冷数据需要及时删除,降低存储

方案:

  1.hbase 每天创建一个表,查询和写入 对表的分区 通过数据治理实现对表分区的隔离,实现用户访问端的无感知

 2.hbase的表的ttl 设置为2个小时,及时删除数同时提升查询速度

 3.hbase 每天对天表删除–先进行大合并(大合并时对数据进行真实删除),前提是 表已经无实时的写入,大合并时,不会对数据文件进行合并,因为数据都已经过期了。大合并之后,删除表即可

分类:

技术点:

相关文章:

  • 2021-11-18
  • 2021-11-18
  • 2021-11-18
  • 2021-11-18
  • 2022-01-12
  • 2021-06-22
  • 2021-06-15
  • 2021-11-18
猜你喜欢
  • 2021-09-26
  • 2021-07-23
  • 2021-11-18
  • 2022-12-23
  • 2021-11-18
  • 2021-11-17
  • 2021-11-06
相关资源
相似解决方案