背景
业务导入的小文件数量过多,降低了compaction的效率:
经统计,业务有至少60%的文件是小于100B的小文件,且每天每台机器4小时内平均新增1万个文件,最高2万个。
大部分compaction的文件总大小仅几十KB。
优化措施
根据分析的原因,进行了代码和配置的双重优化:
- 限制stripe和L0触发compact的最小大小,提升compact的效率:
- 避免频繁进行KB级别大小的compaction;
- 避免过小的stripe频繁参与compaction;
- 增加的compaction队列的管理:
- 增加队列监控,避免同一store重复加入队列浪费计算资源;
- 增加队列长度限制,避免过多store等待compaction;
- 优化bulk load后触发compact的机制:避免重复加入到compaction队列;
HBASE-26249 Ameliorate compaction made by bulk-loading files - 配置合理的compact线程数量,避免compact占用过多的系统资源。
hbase.regionserver.thread.compaction.large
hbase.regionserver.thread.compaction.small - 配置合理的compact周期,及早触发compaction。(像业务这种小文件很多的模式,需要频繁触发compaction以减少文件数量,最终提升查询性能。但是同时需要避免compact线程长时间占用计算资源。)
hbase.server.compactchecker.interval.multiplier=400
效果
从文件数量指标和请求处理时间来衡量

本文介绍了在HBase中,由于小文件过多导致compaction效率低下,进而影响查询性能的问题。通过调整优化代码和配置,如限制compact的最小大小,增加compaction队列管理和监控,优化bulk load后的compact机制,配置合理的compact线程数量和周期,成功提升了compact效率,减少了文件数量,从而显著改善了查询请求的处理时间,将p99延迟从14000ms降低到120ms。

7678

被折叠的 条评论
为什么被折叠?



