记一次HBase bulkload后,上万小文件查询性能的优化实践

针对业务中大量小文件导致的compaction效率低下问题,进行了代码和配置优化。限制了stripe和L0的compact最小大小,增加了compaction队列监控和长度限制,优化了bulkload后compact机制,并调整了compact线程数和周期。这些改进使得文件数量在bulkload后显著下降,单机新增文件数量减少了88%,同时查询请求处理的p99延迟从14000ms降至120ms,大幅提升了系统性能。

背景

业务导入的小文件数量过多,降低了compaction的效率:
经统计,业务有至少60%的文件是小于100B的小文件,且每天每台机器4小时内平均新增1万个文件,最高2万个。大部分compaction的文件总大小仅几十KB。

优化措施

根据分析的原因,进行了代码和配置的双重优化:

  1. 限制stripe和L0触发compact的最小大小,提升compact的效率:
    避免频繁进行KB级别大小的compaction;
    避免过小的stripe频繁参与compaction;
  2. 增加的compaction队列的管理:
    增加队列监控,避免同一store重复加入队列浪费计算资源;
    增加队列长度限制,避免过多store等待compaction;
  3. 优化bulk load后触发compact的机制:避免重复加入到compaction队列;
    HBASE-26249 Ameliorate compaction made by bulk-loading files
  4. 配置合理的compact线程数量,避免compact占用过多的系统资源。
    hbase.regionserver.thread.compaction.large
    hbase.regionserver.thread.compaction.small
  5. 配置合理的compact周期,及早触发compaction。(像业务这种小文件很多的模式,需要频繁触发compaction以减少文件数量,最终提升查询性能。但是同时需要避免compact线程长时间占用计算资源。)
    hbase.server.compactchecker.interval.multiplier=400

效果

从文件数量指标和请求处理时间来衡量

文件数量bulkload前后变化

用户每天都会有bulk load任务,最后一轮优化前,文件数量在bulk load后都是仅减少一部分,整体呈累计上升趋势。
升级后,compact效率提高,文件数量首先有大幅下降。
经过bulk load后,文件数量恢复较快,整体文件数量稳定。
从单机文件数量增长指标看,升级前每天的导入任务单机短时间内约新增1万个文件,而升级后,单机无段时间内文件大量新增情况,整体每天新增约1200个文件。单机新增文件数量降低了88%。
并不是用户导入的新增文件减少了,而是compact从用户导入一小部分文件就开始高效执行,及时通过compact减少了文件数量,且compact压力不会在bulkload后的短时间内聚集,整体压力分散了。

查询请求处理时间前后变化

同时整体文件数量增速减缓带来的好处是,单机的处理请求p99延迟从最高14000ms降低到120ms,降低了2个数量级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值