面试题答案
一键面试hbase.hregion.memstore.flush.size
- 调整方式:适当增大该参数值,默认是128MB。
- 原理:此参数定义了MemStore达到多大时会触发flush操作,将数据写入HFile。增大该值可减少flush次数,从而降低因频繁flush导致的GC压力。因为频繁的flush操作会产生大量小文件,增加HDFS的元数据管理负担,也会引发更多的GC活动。
- 影响:优点是减少了flush次数,提升写性能。但缺点是如果设置过大,单个MemStore占用内存过多,可能导致内存不足,引发OOM(Out Of Memory)错误,还可能使得数据在内存中停留时间过长,在发生故障时丢失数据的风险增加。
hbase.regionserver.global.memstore.upperLimit
- 调整方式:适当降低该参数值,默认是0.4。
- 原理:该参数表示RegionServer上所有MemStore占用堆内存的上限比例。降低此值意味着给MemStore分配更少的堆内存,当MemStore占用内存接近上限时,会强制进行flush操作,避免MemStore占用过多内存导致GC压力过大。
- 影响:优点是可有效避免因MemStore占用内存过大引发的GC问题。缺点是由于分配内存减少,可能导致频繁flush,从而降低写性能,因为每次flush都涉及磁盘I/O操作,较为耗时。
hbase.regionserver.global.memstore.lowerLimit
- 调整方式:配合
hbase.regionserver.global.memstore.upperLimit
一起调整,一般适当降低,但降幅小于upperLimit
,默认是0.38。 - 原理:该参数表示RegionServer上所有MemStore占用堆内存的下限比例。当MemStore内存占用低于此值时,RegionServer可以更积极地调度资源,允许更多的MemStore写入。通过调整此值和
upperLimit
之间的差值,可以控制MemStore内存占用的波动范围,减少因内存使用不均衡导致的GC压力。 - 影响:优点是有助于稳定MemStore内存占用,减少GC压力。缺点是如果设置不当,可能导致写性能不稳定,如设置过低可能使MemStore写入机会受限,影响整体写性能。
hbase.hregion.memstore.block.multiplier
- 调整方式:可适当增大此参数值,默认是4。
- 原理:此参数用于控制MemStore在接近
hbase.hregion.memstore.flush.size
时,阻止新写入的倍数。增大该值意味着在MemStore接近flush大小时,会给写入操作更多的空间,减少因频繁触发写入阻塞导致的性能问题,同时也能减少不必要的flush,进而降低GC压力。 - 影响:优点是提升写入性能,减少GC压力。但如果设置过大,可能导致MemStore在触发flush前占用过多内存,增加OOM风险。
hbase.regionserver.optionalcacheflushinterval
- 调整方式:适当增大此参数值,默认是1000 * 60 * 60 * 1(1小时)。
- 原理:该参数定义了RegionServer自动flush MemStore的最长时间间隔。增大该值意味着延长自动flush的时间间隔,减少不必要的定时flush操作,降低GC压力。因为定时flush可能在MemStore数据量较小时也会执行,增加了不必要的磁盘I/O和GC负担。
- 影响:优点是减少了不必要的定时flush,提升写性能。缺点是如果设置过长,数据在内存中停留时间过久,一旦发生故障,丢失的数据量会更多。