想访问国外网站 dns,合肥大建设,免费下载的网页模板,qq在线网页登录目录 Compaction触发条件相关参数 文件选取策略ExploringCompactionPolicy常见优化 Compaction
随着memstore的不断flush#xff0c;storefile的数量将会不断增加。compaction将通过合并storefile来减少文件数量#xff0c;并提高读性能。conpaction以store为单位
Compacti… 目录 Compaction触发条件相关参数 文件选取策略ExploringCompactionPolicy常见优化 Compaction
随着memstore的不断flushstorefile的数量将会不断增加。compaction将通过合并storefile来减少文件数量并提高读性能。conpaction以store为单位
Compaction分为两种minor和major。
minor通过选择较小的相邻文件合并重写为单个storefile。minor合并不会删除delete或者过期的版本数据。major合并的最终结果是每个store下只有一个StoreFilemajor合并将会清除已标记删除的最大版本。 HBase中发生显式删除时数据实际上并没有被删除。只是会写入一个删除标记这样在查询时将不会返回有该标记的数据。在major合并中数据被最终删除。 major合并默认每七天执行一次。可以使用compaction_switch命令动态开关rs的Compaction
触发条件
1.超过一定的storefile数量flush不断执行storefile的数量会不断增多 2.后台线程周期检查线程 CompactionChecker定期触发检查是否需要执行 Compaction 3.手动触发通过hbase shell或API触发
相关参数
选取策略相关
hbase.hstore.compaction.min.size134217728
storeFile小于该值时会选择进行minor compaction。大于等于该值时由hbase.hstore.compaction.ratio参数来决定是否compaction。在一些写业务中如果storeFile仅仅在1-2M之间建议减小该值避免compaction之后的文件大小仍然小于该值从而继续compaction。此参数越小ratio check会越频繁。单位字节默认128Mhbase.hstore.compaction.max.size9223372036854775807
大于该值的storeFile不会进行compaction。增大该参数会使一些较少同时较大的storeFile不会经常compaction。如果compaction发生较频繁可以考虑增大该值。单位字节默认LONG.MAX_VALUEhbase.hstore.compaction.ratio1.2F
对于minor compaction该参数决定大于hbase.hstore.compaction.min.size的StoreFile是否进行压缩。增大该参数写代价会变大因为会合并更大的storefile但此时读也会seek相对较少的storefile提高速度。hbase.hstore.compaction.ratio.offpeak5.0F
非高峰期参数 与hbase.hstore.compaction.ratio类似只有hbase.offpeak.start.hour和hbase.offpeak.end.hour启用时才会生效hbase.offpeak.start.hour-1
非高峰期的开始时间表示为0到23之间的整数包括0和23hbase.offpeak.end.hour-1
非高峰期的结束时间表示为0到23之间的整数包括0和23
触发条件相关
hbase.hstore.compaction.min3
如果在任何store中StoreFile的数量超过该值将会进行compaction。这个值越大compaction发生的会越晚耗费的时间也会更多hbase.hstore.compaction.max10
一次minor compaction可以合并的最大StoreFile数量hbase.hregion.majorcompaction604800000
majorcompaction之间的时间间隔默认单位毫秒。设置为0将禁用自动majorcompaction但用户请求和基于大小的major compactions将仍然会运行。compaction 将会在给定时间窗口内的某个随机时间开始该时间为该值乘以hbase.hregion.majorcompaction.jitter默认为7天。hbase.hregion.majorcompaction.jitter0.50hbase.server.compactchecker.interval.multiplier1000
compactchecker运行的间隔时间hbase.server.thread.wakefrequency10000 ms
compactchecker的sleep时间hbase.hstore.blockingStoreFiles16
任何一个store下的StoreFiles超过该值则memstore的刷新将会被阻塞直到compaction完成或者达到阻塞等待的时间(hbase.hstore.blockingWaitTimehbase.hstore.blockingWaitTime90000线程池相关
hbase.regionserver.thread.compaction.throttle26843545602* hbase.hstore.compaction.max*hbase.hregion.memstore.flush.size
compaction有两个不同的线程池分别用于 large compaction和small compaction。如果compaction大于该值将会进入large compaction pool。hbase.regionserver.thread.compaction.small
hbase.regionserver.thread.compaction.large
指定线程池的线程数 吞吐相关
hbase.hstore.compaction.throughput.lower.bound52428800
compaction的吞吐流量下限字节/秒hbase.hstore.compaction.throughput.higher.bound104857600
compaction的吞吐流量上限字节/秒文件选取策略
hbase.hstore.defaultengine.compactionpolicy.class 通过该参数设置
RatioBasedCompactionPolicy老版策略。找到一个合适的文件集合之后即停止。ExploringCompactionPolicy新版默认策略。相比起来记录下所有合适的文件集合并在这些文件集合中寻找最合适的集合。
ExploringCompactionPolicy
ExploringCompactionPolicy默认策略 1.列出store中所有的storefile算法过滤出需要进行合并的子集 2.满足一些条件的storefile会被排除在外
大于hbase.hstore.compaction.max.size参数大小的bulk-load中明确指定排除合并的 3.遍历上述列表选出符合条件的集合并执行一些健全检查如果集合中文件数量少于hbase.hstore.compaction.min或大于hbase.hstore.compaction.max则不考虑compaction回退考虑与列表中已经找到可以合并的集合中的storefile大小进行比较具有更小storefile大小的集合将会被存储起来以便在memstore阻塞且无法找到可合并的集合时使用对每个storefile执行检查文件大小大于hbase.hstore.compaction.max.size的不考虑文件大小大于或等于hbase.hstore.compaction.min.size的如果此时该文件大小乘以hbase.hstore.compaction.ratio小于其他新的storefile(比当前文件时间更新的)之和则会考虑 4.通过比较找到最合适的集合并执行合并。如果此时存在多个storefile但是没有符合条件的此时会执行回退考虑。
常见优化
1.关闭major compaction改为手动触发执行。对于较大的storefile也会类似引起IO升高斯所以可以将满足compaction条件的最大文件设置小一点具体根据业务来。 2.可以考虑略调大满足minor compaction的数量避免频繁进行。