调优向:编码、压缩、TTL

公众号:yunops

Hbase 的编码、压缩、TTL 说明

  1. HBase 编码(DATA_BLOCK_ENCODING )和压缩(COMPRESSION):这是两个功能,但是使命基本相同:消耗 CPU 资源压缩数据大小,可以认为是一种时间换空间的做法,通常情况下还可以提高系统吞吐率;但是默认建表并未启用编码或者压缩,需自行配置;是否适合启用压缩要看实际场景,如果在数据写入前就压缩过了,这时候在 HBase 中设置压缩反而不仅压缩率不理想,还会浪费 CPU,反而得不偿失;
    • 编码和压缩可以单独使用也可以结合起来使用;
    • HBase 压缩有多种压缩算法可供选择,有不同的适用场景
    • 如何修改编码或者压缩?编码压缩是 column family 级别的,可以通过 shell 来在线修改,参数包括 DATA_BLOCK_ENCODING (编码)和 COMPRESSION(压缩),hbase shell 命令示例:
      desc 'table01'
      alter 'table01', {NAME => 'info', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'ZSTD'}
      
  2. Compaction 功能:为了防止小文件过多,以保证保证查询效率,hbase 需要在必要的时候将这些小的 store file 合并成相对较大的 store file 的过程,触发 major compaction 的可能条件有:
    1. hbase shell 命令行手动执行:major_compact 命令;
    2. 调用 majorCompact() API 接口(不推荐);
    3. region server 自动运行(相关参数:hbase.hregion.majorcompaction 默认为 24 小时(单位为 ms);hbase.hregion.majorcompaction.jetter 默认值为 0.2 防止 region server 在同一时间进行 major compaction)
      • 查看当前配置:hbase-site.xml 文件的 hbase.hregion.majorcompaction 参数的值(单位为 ms);
      • 修改配置:hbase-site.xml 文件的 hbase.hregion.majorcompaction 参数的值(单位为 ms),重启 hbase;
  3. TTL(Time To Live):设置数据过期时间,一般以表中的 Column Family 为操作单位(数据单位为秒),设置 TTL 需要修改表结构,在低版本中修改表结构要 disable 表,否则表会被清空!设置后在指定数据到达 ttl 时间后数据被标记上删除标记(暂时不会释放磁盘空间),在下次 Compaction 时物理删除(此时才会释放磁盘空间)
    • 较新版本也支持设置单元格 ttl,特性如下:
    • 单元格 TTL 使用的单位是毫秒而不是秒
    • 一个单元格 TTL 不能设置存活时间比列族的 TTL 时间长在 hbase shell 命令行下查看表的指定 column 当前 ttl 配置与修改 ttl 配置示例:
      desc 'TraceV2'
      disable 'TraceV2'
      alter 'TraceV2' , {NAME=>'S',TTL=>'604800'}
      enable 'TraceV2