博客
关于我
HBase最佳实践-列族设计优化
阅读量:797 次
发布时间:2023-04-04

本文共 1618 字,大约阅读时间需要 5 分钟。

BLOCKSIZE属性在不同场景下应该如何设置?

块大小是HBase的一个重要配置选项,默认块大小为64M。对于不同的业务数据,块大小的合理设置对读写性能有很大影响。具体来说,块大小的设置主要取决于两方面:

  • 用户平均读取数据的大小:如果用户平均读取数据的大小较小,建议将块大小设置较小,这样可以使得内存可以缓存更多的块,从而提升读性能。相反,如果用户平均读取数据的大小较大,则可以适当增大块大小,以减少I/O操作次数,提升读性能。
  • 数据平均键值对规模:可以通过HFile命令查看平均键值对的规模。例如,如果平均键值对规模较小(如155B),可以适当调低块大小(如32KB)以提升读性能。
  • COMPRESSION属性和DATA_BLOCK_ENCODING属性的区别是什么?

    HBase提供了两种主要的数据压缩方式:数据压缩(Compress)和数据编码(Data Block Encoding)。两者都可以减少磁盘存储空间,但在实现方式和对资源使用的影响上有所不同。

  • 数据压缩(Compress)

    • 数据在写入HDFS之前会被压缩,减少磁盘空间使用量。
    • 在读取时,首先从HDFS解压,然后缓存到BlockCache中。
    • 压缩方式包括GZip、LZO和Snappy三种,Snappy的压缩率最低,但编解码速率最高,CPU消耗最小。
    • 压缩对读写性能的影响较小,主要是通过减少磁盘空间来优化资源使用。
  • 数据编码(Data Block Encoding)

    • 数据在写入HDFS之前会被编码,减少磁盘空间使用量。
    • 编码方式包括Prefix、Diff、Fast_Diff和Prefix_Tree四种,其中Prefix_Tree编码性能最稳定。
    • 编码会增加读取时的CPU负载,因为读取时需要解码数据。
    • 通常情况下,建议优先使用Prefix_Tree编码。
  • HBase需要注意哪些设计原则?

    在设计HBase时,需要遵循以下原则以确保系统的稳定性和性能:

  • 在任何场景下开启Prefix_Tree编码都是安全的
  • 在任何场景下都不要同时开启Snappy压缩和Prefix_Tree编码
  • 通常情况下,Snappy压缩并不能比Prefix_Tree编码获得更好的优化结果,如果需要使用Snappy需要针对业务数据进行实际测试
  • 块大小设置的优化

    通过测试发现,块大小的设置对读写性能有显著影响:

    • Get请求为主时,建议将块大小调小(如16K),以提升随机读性能。
    • Scan请求为主时,建议将块大小调大(如128K),以提升扫描读性能。
    • 默认的64M块大小是一个平衡设置,适用于混合读写场景。

    数据压缩与编码的权衡

    数据压缩和编码是时间换空间的典型策略,虽然可以减少磁盘空间使用量,但会消耗较多的CPU资源:

    • 压缩:压缩率一般为0.7左右,压缩和解压需要大量CPU资源。
    • 编码:编码率一般为5:2,编码和解码同样需要大量CPU资源。
    • 压缩+编码:压缩率和编码率基本相当,但CPU开销会显著增加。

    测试结果分析

    通过实际测试发现:

    • 随机读场景:Snappy压缩和Prefix_Tree编码对性能提升有限,且CPU开销增加。
    • 扫描读场景:Snappy压缩略有提升,但CPU开销增加。Prefix_Tree编码性能略有下降,但CPU开销减少。
    • 压缩+编码:对性能提升无明显效果,但CPU开销显著增加。

    设计总结

    在实际应用中,建议根据业务需求选择合适的压缩和编码方式:

    • 仅使用Prefix_Tree编码:在任何场景下都不会对性能产生负面影响。
    • 仅使用Snappy压缩:在大多数场景下性能提升有限,但如果需要使用压缩,建议进行实际测试以确认是否适合业务需求。
    • 避免同时使用Snappy压缩和Prefix_Tree编码:这会对CPU资源造成额外负担,且对性能提升无明显效果。

    通过合理设置块大小和优化压缩编码策略,可以显著提升HBase的读写性能,同时减少对硬件资源的消耗。

    转载地址:http://zjrfk.baihongyu.com/

    你可能感兴趣的文章
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>
    MySQL_西安11月销售昨日未上架的产品_20161212
    查看>>
    Mysql——深入浅出InnoDB底层原理
    查看>>
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>
    MySQL不同字符集及排序规则详解:业务场景下的最佳选
    查看>>
    Mysql不同官方版本对比
    查看>>
    MySQL与Informix数据库中的同义表创建:深入解析与比较
    查看>>
    mysql与mem_细说 MySQL 之 MEM_ROOT
    查看>>
    MySQL与Oracle的数据迁移注意事项,另附转换工具链接
    查看>>