Log表新的RowKey设计,预Split
1 目前Rawlog表的问题
- region数量庞大,空region 率大
- 共有12791个region
- 11409空region, 比例为89.19%
- 剩余的region大小也是极度不均衡,最大的region 287G, <1m的region有129个
- 读写不均衡
- 现有的rowkey设计,简单来说是appid+date的顺序序列
- 简单来说对于每个appid都有一个写热点,这不仅没有利用到分布式的优点,还会极大的降低整个hbase集群的服务能力
- 读存在同样的问题,一次读基本上会集中在一个region上,这对于scan是好的,但目前我们所有的log查询都是基于mutiget的,还不如分散来的性能好。
2 解决方案
现有的log查询方案:
- 从logindex表获取log的rowkey
- 根据rowkey使用mutiget获取具体的log
所以不在需要顺序的rowkey设计。
- 解决region数量庞大的问题
- 使用预分的region
- 根据实际数据量,预分出足够的region, 后续保证尽量少的出现split
- 解决空region率,大小不均衡,及读写不均衡
- 这些问题可以一起解决
- 写的时候足够散列的(平均)写到这些region上
- 理想状态下各region大小会完全一致
- 读写理想状态下也会完成一致
- 可以减少split的次数,理想状态下不会再出现,同样减少了该表region的blance出现的次数,理想状态下不会出现。
现在进行改造的优势是,我们有生产数据进行支持,金桥是一个全新的集群,这是一个机会,可以不考虑老数据的迁移(到时福泉与金桥应用并行运行,避免迁移数据)
2.1 预分region的数量
- 目前生产rawlog表的大小为2938.5G, 也就是3T,保存了7天的数据
- 考虑到以后的数据增量,以10T为存储目标,一个region2G, 可以预分5000个region
2.2 如何实现足够散列写(或对region平均写)
- 理论上可以对region依次写入一条log, 轮循一遍后,再次从头轮循,这样可以达到绝对平均
- 实际解决方案, 可以设计一种rowkey结构
hashcode
|
unique-id
|
---|---|
1 ~ 100000 | appid + hostip + timestamp + logid |
- 从通用角度,rowkey 分为两部分
- hashcode: 散列值,用于将数据散列到各region上
- unique-id: 这条数据的一个唯一id, 这个基本上和业务相关
- 对于rowlog表
- hashcode: 可以是一个1 ~ 100000的int值
- unique-id: 可以是一个由appid + hostip + timestamp + logid 组成的唯一id, 也是现有的rowkey设计
- 如果预分5000个region, 每个region将占有20个散列值(startKey-endKey):1-20, 21-40, .... 99981-100000
2.3 工作量
- 只要修改writer端rowlog的rowkey生成策略
- 对于其他地方完全透明
- 编码的话只要两个小时就足够了,后续就是支持工作了。
- 如何获取一条log的hashcode, 有几种方案:
- writer每收一条log可以递增,到达100000,归1
- 也可以每次取1-100000的随机值,效率最低
- 为了去除1-20的连续写, 可以
- 可以分配一个int[100000],里面存放shuffle后的1-100000的值
- 每来一条log从数组里取一个值int[i++]
- 到达数组结尾后可以直接从头再取,或shuffle后再从头取
- 或着一开始就预先shuffle好几个数组,待用。
Log表新的RowKey设计,预Split的更多相关文章
- HBase的Rowkey设计(mark)
在HBase中细节上的设计,最最最重要的就是我该选取什么做Rowkey,Rowkey的选择,最直接的影响就是对你之后分析数据的影响了. Rowkey是不可分割的字节数,按照字典排序由低到高存储在表中. ...
- HBase之六:HBase的RowKey设计
数据模型 我们可以将一个表想象成一个大的映射关系,通过行健.行健+时间戳或行键+列(列族:列修饰符),就可以定位特定数据,Hbase是稀疏存储数据的,因此某些列可以是空白的, Row Key Time ...
- Hbase Rowkey设计
转自:http://www.bcmeng.com/hbase-rowkey/ 建立Schema Hbase 模式建立或更新可以通过 Hbase shell 工具或者使用Hbase Java API 中 ...
- HBase高级特性、rowkey设计以及热点问题处理
在阐述HBase高级特性和热点问题处理前,首先回顾一下HBase的特点:分布式.列存储.支持实时读写.存储的数据类型都是字节数组byte[],主要用来处理结构化和半结构化数据,底层数据存储基于hdfs ...
- 大数据性能调优之HBase的RowKey设计
1 概述 HBase是一个分布式的.面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式. 既然HBase是采用KeyValue ...
- hbase rowkey 设计
HBase中的rowkey是按字典顺序排序的,通过rowkey查询可以对千万级的数据实现毫秒级响应.然而,如果rowkey设计不合理的话经常会出现一个很普遍的问题----热点.当大量client的请求 ...
- hbase实践之rowkey设计
rowkey设计的重要性 rowkeys是HBase表设计中唯一重要的一点. rowkey设计要求 唯一性 存储特性 按照字典顺序排序存储 查询特性 由于其存储特性导致查询特性: 查询单个记录: 查定 ...
- Hbase Rowkey设计原则
Hbase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位 ...
- HBase学习(四) 二级索引 rowkey设计
HBase学习(四) 一.HBase的读写流程 画出架构 1.1 HBase读流程 Hbase读取数据的流程:1)是由客户端发起读取数据的请求,首先会与zookeeper建立连接2)从zookeepe ...
随机推荐
- C#导出Excel按照指定格式设置单元格属性值
最近项目中一直在写XML.Table.Excel之间的转化.之前一直都是不考虑格式的导出,今天给出一个格式,让按照格式导出,还真把我这新手为难了一翻,网上给出的资料基本一样.为了一个单元格文字变色纠结 ...
- Java 基本语法----进制、运算符
进 制 对于整数,有四种表示方式: 二进制:0,1 ,满 2 进 1.以 0b 或 0B 开头.十进制:0-9 ,满 10 进 1. 八进制:0-7 ,满 8 进1. 以数字 0 开头表示.十六进制: ...
- linux 添加交换分区
[操作简介] 增加swap分区方法: 1.新建磁盘分区作为swap分区 2.用文件作为swap分区 (操作更简单,我更常用) 下面介绍这两种方法:(都必须用root权限,操作过程应该小心谨慎.) ...
- Redis(七)-- SpringMVC整合Redis集群
1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- 如何使用css影藏滚动条
1.单纯的一句代码: div ::-webkit-scrollbar {width: 0px;}//或者display:none 但是这代码最大的弊端就是只能在webkit内核的浏览器上进行显示,无法 ...
- 《C++ Primer Plus》第12章 类和动态内存分配 学习笔记
本章介绍了定义和使用类的许多重要方面.其中的一些方面是非常微妙甚至很难理解的概念.如果其中的某些概念对于您来说过于复杂,也不用害怕——这些问题对于大多数C++的初学者来说都是很难的.通常,对于诸如复制 ...
- 罗云彬win32汇编教程笔记 子函数的声明, 定义与调用
在主程序中用call指令来调用子程序. Win32汇编中的子程序也采用堆栈来传递参数,这样就可以用invoke伪指令来进行调用和语法检查工作. 一. 子程序的定义 子程序的定义方式如下所示. 子程序名 ...
- poj_2195 最小费用最大流
题目大意 一个nxm的地图,地图上的横纵交错成nxm个交叉点,其中有k个交叉点为房间,k个交叉点为k个小人的初始位置.小人可以在地图上沿着水平或垂直方向行走,每走一步的代价为1.求这k个小人分别到达k ...
- Docker源码分析(六):Docker Daemon网络
1. 前言 Docker作为一个开源的轻量级虚拟化容器引擎技术,已然给云计算领域带来了新的发展模式.Docker借助容器技术彻底释放了轻量级虚拟化技术的威力,让容器的伸缩.应用的运行都变得前所未有的方 ...
- Excel 2010 最熟悉的陌生功能:筛选器(将当前所选内容添加到筛选器)
使用excel2010版的同学,在进行筛选时,肯定都对这句话很熟悉:将当前所选内容添加到筛选器.但很多同学天天看到,却不知道什么是筛选器?它有什么作用. 其实,这里所指的筛选器就是储存筛选结果的一个虚 ...