php使用hbase

PHP技术
643
0
0
2022-07-18
标签   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命令详解

  1. COMPRESSION 压缩算法方式、DATA_BLOCK_ENCODING 压缩算法
  2. 目前阿里云平台支持压缩算法有: LZO、ZSTD、GZ、LZ4、SNAPPY NONE,其中NONE就代表不开启压缩。不同压缩算法在不同场景的压缩比,及解压速度对比如下,都是来自线上真实场景。
  3. 阿里云接口文档: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中提到的周期进入冷存。如果您选择暂缓升级,可以联系专家服务来帮您优化参数。