面试题答案
一键面试区别
- 合并范围:
- Minor Compaction:只合并部分较小的HFile,通常是选取一些较新且较小的HFile进行合并,不会对所有HFile进行操作。
- Major Compaction:会合并一个Region下的所有HFile,将它们合并成一个大的HFile。
- 数据处理:
- Minor Compaction:不删除已标记为删除的数据(墓碑数据),只是简单地将多个HFile合并为一个。
- Major Compaction:会清理已标记为删除的数据(墓碑数据),同时还会处理版本数据,只保留指定版本的数据。
- 性能影响:
- Minor Compaction:对系统性能影响相对较小,因为它只涉及部分HFile的合并,I/O操作量相对少。
- Major Compaction:对系统性能影响较大,由于要合并所有HFile,I/O操作量大,可能会导致HBase在这个过程中响应变慢。
触发场景
- Minor Compaction触发场景:
- 达到文件数量阈值:当一个Store中的HFile数量达到一定阈值时(该阈值可以通过配置参数
hbase.hstore.compactionThreshold
设置,默认值为3),会触发Minor Compaction。 - 时间间隔触发:可以配置按一定时间间隔触发Minor Compaction,通过参数
hbase.hstore.compaction.minInterval
(默认值1分钟)和hbase.hstore.compaction.maxInterval
(默认值24小时)来控制。
- 达到文件数量阈值:当一个Store中的HFile数量达到一定阈值时(该阈值可以通过配置参数
- Major Compaction触发场景:
- 手动触发:管理员可以通过HBase shell命令
major_compact
手动对指定的表或Region进行Major Compaction。例如,major_compact 'tableName'
可以对指定表进行Major Compaction。 - 自动触发:可以通过配置参数
hbase.hregion.majorcompaction
来设置自动触发Major Compaction的时间间隔,默认值是7天(单位为毫秒)。当一个Region的上次Major Compaction时间距离当前时间超过这个间隔时,就会自动触发Major Compaction 。另外,如果表的MAJOR_COMPACTION
属性设置为0
,则表示禁用自动Major Compaction 。
- 手动触发:管理员可以通过HBase shell命令