github.com/aliyun/aliyun-apsaradb-... phpsdkdemo
一、背景信息
云数据库HBase增强版,是由云原生多模数据库Lindorm的宽表引擎云原生多模数据库Lindorm的宽表引擎提供的、完全兼容HBase的云上托管数据库
二、hbase遇到的问题
- 问题:正式上线后三天、log每天200G数据写入到hbase后变成了2TB数据
- 排查路线:排查到日志原始存储大小和和hbase中内存大小差异过大、使用阿里云shell工具查看表结构
- 表结构存在问题、遇到大数据量容易崩溃
- 没有设置列簇的压缩
- 没有设置冷热存储
- 没有设置数据过期时间自动删除机制
- 列簇过多设计不合理
- 解决方案:
// 设置列簇的压缩
disable ‘test_logs’
// 删除列簇
alter ‘test_logs’,’delete’=>’test_info’
// 设置列簇的压缩
alter ‘test_logs’ ,{NAME=>’test’,COMPRESSION=>’LZ4’,DATA_BLOCK_ENCODING => ‘DIFF’}
// 设置设置冷热存储、数据过期时间自动删除机制
alter ‘test_logs’ , {NAME=>’test’, COLD_BOUNDARY=>’604800’,TTL=>2592000}
// 启用table
enable ‘test_logs’
// 压缩编码并不会立即生效,需要major_compact,此会耗时较长,注意在业务低峰期进行。
major_compact ‘test_logs’
- 效果: hbase从1.5TB降到70G左右
三、hbase命令详解
- COMPRESSION 压缩算法方式、DATA_BLOCK_ENCODING 压缩算法
- 目前阿里云平台支持压缩算法有: LZO、ZSTD、GZ、LZ4、SNAPPY NONE,其中NONE就代表不开启压缩。不同压缩算法在不同场景的压缩比,及解压速度对比如下,都是来自线上真实场景。
- 阿里云接口文档:help.aliyun.com/document_detail/59...
| 业务类型 | 无压缩表大小 | LZO(压缩率/解压速度MB/s) | ZSTD(压缩率/解压速度MB/s) | LZ4(压缩率/解压速度MB/s) |
| 监控类 | 419.75T | 5.82/372 | 13.09/256 | 5.19/463.8 |
| 日志类 | 77.26T | 4.11/333 | 6.0/287 | 4.16/496.1 |
| 风控类 | 147.83T | 4.29/297.7 | 5.93/270 | 4.19/441.38 |
| 消费记录 | 108.04T | 5.93/316.8 | 10.51/288.3 | 5.55/520.3 |
- COLD_BOUNDARY 数据在热存储的周期,之后存入冷存储
- TTL 数据过期时间单位(秒)
- 存活时间
- 列簇可以设置TTL秒数,HBase在超时后将自动删除数据,HBase里面TTL时间时区是UTC。
存储文件仅包含有过期的行(expired rows),它们可通过minor compaction删除。将hbase.store.delete.expired.storefile设置为false,可禁用此功能;将最小版本数设置成非0值也可达到同样的效果。
- HBase的最新版本还支持将设定的时间存放在每个结构单元。TTL单元通过Mutation#setTTL作为更变请求(Appends, Increments, Puts, etc.)的一个属性提交,如果TTL的属性被设定了,它将会应用到由于该变更操作更新的所有单元上。Cell TTL handling和ColumnFamily TTLs间有两个显著的差别:
- Cell TTLs的数量级是毫秒而不是秒。
- 一个Cell TTL不能超出ColumnFamily TTLs设置的有效时间。
- major_compact
- 合并文件
- 清除删除、过期、多余版本的数据
- 提高读写数据的效率
- 数据什么时候进冷存?
- Lindorm通过compaction机制异步得将冷数据从热存中归档到冷存,触发时间默认为冷热分界的一半,最小为1天。比如您设置冷热边界是3天,那么默认1.5天就会自动触发一次compaction;如果设置冷热边界为1天,后台会1天触发一次compaction。
- 我可以手动强制触发compaction吗?
- 可以的,您可以通过HBase shell对表执行 major_compact ‘tableName’ 命令来强制触发major compaction,不仅把热存中的冷数据归档到冷存中,同时也会合并所有冷区热区的文件。但请不要频繁使用该命令,它会加重IO负载。
- 为什么我的表冷数据归档的慢?
- 请检查您的Lindorm版本,如果版本不大于2.1.20,可以升级到最新的版本,冷数据会根据 1中提到的周期进入冷存。如果您选择暂缓升级,可以联系专家服务来帮您优化参数。