hbase Compaction
以牺牲磁盘io来换取读性能的基本稳定
小合并:一个region下一个store中的部分HFile合并成一个比较大的StoreFile.
大合并:一个region下一个store中的所有HFile合并成一个更大的HFile.会清理ttl过期,版本超限定,标记删除的数据。
合并流程:
1.hbase基于1、Memstore Flush(每次memstore在flush之后都会判断是否触发Compaction) 2、后台线程周期性检查、3、手动触发 某种触发条件触发Compaction.
2.hbase会单独有一个线程进行从该store中选择合适的HFile。
3.针对小合并,大合并,split等操作都会有对应的线程池进行处理
4.分别读出待合并Hfile文件的数据(K,V),进行归并排序,之后写到./tmp临时文件中。
5.将临时文件移动到对应的Store的数据目录
6.将Compaction的输入文件路径和输出路径封装成KV写入到HLog日志,并打上Compaction标记,最后强制执行sync。
7.将对应的Store数据目录下的Compaction输入文件全部删除。
优缺点
会尽量提高数据的本地化率,因为有些文件是在远程节点存储,通过Compaction会尽量本地化。降低数据读取响应延时,减少网络IO。
在Compaction过程中会对读请求造成较大的毛刺,为了使文件数趋于稳定,在操作过程中会有带宽压力和IO压力。
以牺牲短时间的性能资源来换取后续查询的稳定。
在Compaction过程中也会对写请求造成阻塞,比如Hfile较多时,达到默认配置可能会限制写请求的速度或者短时间的阻塞。