一、概述

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

hbase 集群写入能力优化-预分区、TTL的应用的更多相关文章

  1. Java客户端访问HBase集群解决方案(优化)

    测试环境:Idea+Windows10 准备工作: <1>.打开本地 C:\Windows\System32\drivers\etc(系统默认)下名为hosts的系统文件,如果提示当前用户 ...

  2. hbase大规模数据写入的优化历程

    业务背景:由于需要将ngix日志过滤出来的1亿+条用户行为记录存入Hbase数据库,以此根据一定的条件来提供近实时查询,比如根据用户id及一定的时间段等条件来过滤符合要求的若干行为记录,满足这一场景的 ...

  3. 高可用Hadoop平台-HBase集群搭建

    1.概述 今天补充一篇HBase集群的搭建,这个是高可用系列遗漏的一篇博客,今天抽时间补上,今天给大家介绍的主要内容目录如下所示: 基础软件的准备 HBase介绍 HBase集群搭建 单点问题验证 截 ...

  4. hbase集群安装与部署

    1.相关环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 hbase1.2.4 本篇文章仅涉及hbase集群的搭建,关于hadoop与zookeeper的相关部 ...

  5. HBase集群出现NotServingRegionException问题的排查及解决方法

    HBase集群在读写过程中,可能由于Region Split或Region Blance等导致Region的短暂下线,此时客户端与HBase集群进行RPC操作时会抛出NotServingRegionE ...

  6. Hbase集群类型|集群配置|服务器选型|磁盘容量规划

    HBase和Hadoop的集群类型 1.单机模式 主要用于开发工作,一台机器上运行所有的守护进程,或者一台机器运行多个虚拟机.一般用于评估和测试. 2.小型集群 20台机器以内的集群,不同的机器运行不 ...

  7. 基于docker快速搭建hbase集群

    一.概述 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像Bigt ...

  8. Hbase集群搭建及所有配置调优参数整理及API代码运行

    最近为了方便开发,在自己的虚拟机上搭建了三节点的Hadoop集群与Hbase集群,hadoop集群的搭建与zookeeper集群这里就不再详细说明,原来的笔记中记录过.这里将hbase配置参数进行相应 ...

  9. [How to]HBase集群备份方法--Replication机制

    1.简介 HBase备份的方法在[How to]HBase集群备份方法文章中已经有些介绍,但是这些方法都不是HBase本身的特性在支持,都是通过MR计算框架结合HBase客户端的方式,或者直接拷贝HB ...

  10. Hadoop hbase集群断电数据块被破坏无法启动

    集群机器意外断电重启,导致hbase 无法正常启动,抛出reflect invocation异常,可能是正在执行的插入或合并等操作进行到一半时中断,导致部分数据文件不完整格式不正确或在hdfs上blo ...

随机推荐

  1. 手把手教你用Typora自动上传到picgo图床【教程与排坑】

    手把手教你用Typora自动上传到picgo图床[教程与排坑] 参考链接: 1. https://blog.csdn.net/disILLL/article/details/104944710?utm ...

  2. Spring Security 自定义认证逻辑

    Spring Security 自定义认证逻辑 这篇文章的内容基于对Spring Security 认证流程的理解,如果你不了解,可以读一下这篇文章:Spring Security 认证流程 . 分析 ...

  3. JAVASCRIPT 对有符号整型、无符号整型、浮点型、十六进制、二进制的数据处理

    1.十六进制字符串转有符号整型,支持S8.S16.S32: function hexToInt(hex) { if(hex.length % 2 != 0) { hex = "0" ...

  4. window java 字节码修改

    前提:  win10 安装包: 1.  JDK10.0.1.msi (包含jre环境),    JDK的安装路径 2.  jclasslib 6.0.3    用于编辑常量 3.JBE    用于编辑 ...

  5. 基于.NET Core3.1的SQLiteHelper增删改帮助类

    安装驱动包 install-package Microsoft.Data.Sqlite -version 3.1.7 install-package System.Data.SQLite.Core - ...

  6. Linux-centos7 下开放某个端口

    方式一 1.开启防火墙 systemctl start firewalld  2.开放指定端口 firewall-cmd --zone=public --add-port=1935/tcp --per ...

  7. NX 二次开发,线性移动uf5943

    #include <uf.h> #include <uf_modl.h> #include <uf_part.h> #include <uf_modl_pri ...

  8. 12. Redis 安装

    参考http://www.runoob.com/redis/redis-install.html Window 下安装 下载地址:https://github.com/MSOpenTech/redis ...

  9. FPGAUSB控制器编程

    FPGA产生PLL LED子module,显示FPGA在运行 USB控制子module,USB时钟输入,状态输入,总线输出,USBFIFO地址总线,数据双向总线. USB状态机,Flaga有效时,转为 ...

  10. sqlserver将查询中一行内容转化为多行内容

    WITH CTE AS( SELECT top 5 TaskID ,Attachments from [V_AllAccessoriesAompression])SELECT a.TaskID,c.A ...