php使用hbase

github.com/aliyun/aliyun-apsaradb-... phpsdkdemo

一、背景信息

云数据库HBase增强版,是由云原生多模数据库Lindorm的宽表引擎云原生多模数据库Lindorm的宽表引擎提供的、完全兼容HBase的云上托管数据库

二、hbase遇到的问题

  1. 问题:正式上线后三天、log每天200G数据写入到hbase后变成了2TB数据

  2. 排查路线:排查到日志原始存储大小和和hbase中内存大小差异过大、使用阿里云shell工具查看表结构

  3. 表结构存在问题、遇到大数据量容易崩溃

  4. 没有设置列簇的压缩

  5. 没有设置冷热存储

  6. 没有设置数据过期时间自动删除机制

  7. 列簇过多设计不合理

  8. 解决方案:

// 设置列簇的压缩
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’

  1. 效果: hbase从1.5TB降到70G左右

    三、hbase命令详解

  2. COMPRESSION 压缩算法方式、DATA_BLOCK_ENCODING 压缩算法
  3. 目前阿里云平台支持压缩算法有: LZO、ZSTD、GZ、LZ4、SNAPPY NONE,其中NONE就代表不开启压缩。不同压缩算法在不同场景的压缩比,及解压速度对比如下,都是来自线上真实场景。
  4. 阿里云接口文档: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 |

  1. COLD_BOUNDARY 数据在热存储的周期,之后存入冷存储
  2. TTL 数据过期时间单位(秒)
  3. 存活时间
  4. 列簇可以设置TTL秒数,HBase在超时后将自动删除数据,HBase里面TTL时间时区是UTC。

存储文件仅包含有过期的行(expired rows),它们可通过minor compaction删除。将hbase.store.delete.expired.storefile设置为false,可禁用此功能;将最小版本数设置成非0值也可达到同样的效果。

  1. HBase的最新版本还支持将设定的时间存放在每个结构单元。TTL单元通过Mutation#setTTL作为更变请求(Appends, Increments, Puts, etc.)的一个属性提交,如果TTL的属性被设定了,它将会应用到由于该变更操作更新的所有单元上。Cell TTL handling和ColumnFamily TTLs间有两个显著的差别:

  2. Cell TTLs的数量级是毫秒而不是秒。

  3. 一个Cell TTL不能超出ColumnFamily TTLs设置的有效时间。

  4. major_compact

  5. 合并文件

  6. 清除删除、过期、多余版本的数据

  7. 提高读写数据的效率

  8. 数据什么时候进冷存?

  9. Lindorm通过compaction机制异步得将冷数据从热存中归档到冷存,触发时间默认为冷热分界的一半,最小为1天。比如您设置冷热边界是3天,那么默认1.5天就会自动触发一次compaction;如果设置冷热边界为1天,后台会1天触发一次compaction。

  10. 我可以手动强制触发compaction吗?

  11. 可以的,您可以通过HBase shell对表执行 major_compact ‘tableName’ 命令来强制触发major compaction,不仅把热存中的冷数据归档到冷存中,同时也会合并所有冷区热区的文件。但请不要频繁使用该命令,它会加重IO负载。

  12. 为什么我的表冷数据归档的慢?

  13. 请检查您的Lindorm版本,如果版本不大于2.1.20,可以升级到最新的版本,冷数据会根据 1中提到的周期进入冷存。如果您选择暂缓升级,可以联系专家服务来帮您优化参数。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!