面试题答案
一键面试1. 合并阈值相关参数调整
- hbase.hregion.majorcompaction:
- 调整方式:适当增大该参数值,例如从默认的 7 天(604800000 毫秒)增大到 14 天(1209600000 毫秒)。
- 依据:此参数控制 Major Compaction 的周期,Major Compaction 会合并所有的 StoreFile 并删除过期数据。延长周期可减少 Region 合并频率,从而减少因频繁合并对业务读写操作的干扰。但过大的值可能导致数据文件过大,影响查询性能,所以需根据实际情况权衡。
- hbase.hstore.compactionThreshold:
- 调整方式:增大该参数,比如从默认的 3 调整为 5。
- 依据:该参数定义了一个 Store 中触发 Minor Compaction 的 StoreFile 数量阈值。当 Store 中的 StoreFile 数量达到此阈值时,会触发 Minor Compaction。增大该值,意味着需要更多的 StoreFile 才会触发 Minor Compaction,减少了 Minor Compaction 的频率,降低了合并操作对业务读写的影响。不过,如果值设置过大,可能导致 StoreFile 过多,影响读性能。
- hbase.hstore.blockingStoreFiles:
- 调整方式:适当增大该值,默认是 7。可以根据集群情况增大到 10 或 12 等。
- 依据:当一个 Store 中的 StoreFile 数量达到此值时,写操作将被阻塞,直到有合并操作完成。增大此值,可允许更多的 StoreFile 存在而不阻塞写操作,避免因频繁合并触发的写阻塞,减少对业务写操作的干扰。但如果设置过大,会增加读操作时需要检索的 StoreFile 数量,影响读性能。
2. 相关线程数量参数调整
- hbase.regionserver.thread.compaction.throttle:
- 调整方式:减小该参数值,默认是 10。可以尝试调整为 5 等较小的值。
- 依据:此参数控制每个 RegionServer 上 Compaction 线程池的线程数。减少线程数,会降低合并操作的并行度,从而减少合并操作对系统资源(如 CPU、网络带宽等)的占用,使更多资源可用于业务读写操作。但线程数过少可能导致合并操作时间过长,影响数据的及时整理。
- hbase.regionserver.thread.compaction.large.throttle:
- 调整方式:同样减小该参数值,默认是 1。可根据情况调整为 0(但要谨慎,0 可能会导致一些特殊的大合并操作无法及时处理)。
- 依据:该参数专门控制大型 Compaction 操作(例如 Major Compaction)的线程数。减小线程数能进一步降低大合并操作对系统资源的消耗,减少对业务读写的干扰。但类似地,线程数过少可能延长大型合并操作时间。