HBase表读缓存(BlockCache)和写缓存(MemStore)相关属性配置
- 读缓存(BlockCache)配置
- 相关属性:在
hbase - site.xml
中配置。
hbase.bucketcache.ioengine
:指定BucketCache使用的I/O引擎,如 offheap
(堆外内存)或 file
(文件)。例如:
<property>
<name>hbase.bucketcache.ioengine</name>
<value>offheap</value>
</property>
- `hbase.bucketcache.size`:设置BucketCache的大小,如 `1073741824`(1GB)。
<property>
<name>hbase.bucketcache.size</name>
<value>1073741824</value>
</property>
- Region - level配置:在创建表时,可以通过
HColumnDescriptor
设置 BLOCKCACHE
属性。例如在Java代码中:
HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toBytes("cf"));
hcd.setBlockCacheEnabled(true); // 启用读缓存
- 写缓存(MemStore)配置
- 相关属性:同样在
hbase - site.xml
中配置。
hbase.hregion.memstore.flush.size
:定义单个Region的MemStore在达到多大时触发flush操作,默认值是 128MB
,如要修改为 256MB
:
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>268435456</value>
</property>
- `hbase.regionserver.global.memstore.size`:设置所有RegionServer上MemStore占用堆内存的总比例,默认是 `0.4`(40%)。例如设置为 `0.5`:
<property>
<name>hbase.regionserver.global.memstore.size</name>
<value>0.5</value>
</property>
- Region - level配置:在创建表时,通过
HColumnDescriptor
设置 MEMORY_BLOCKSIZE
属性来影响MemStore块大小。例如:
HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toBytes("cf"));
hcd.setMemoryBlockSize(65536); // 设置为64KB
调整属性对读写性能的影响
- 读缓存(BlockCache)
- 增加BlockCache大小:
- 读性能提升:更多的数据可以被缓存,后续读取相同数据时,直接从缓存获取,减少磁盘I/O,读性能显著提高。尤其是在热点数据读取场景下效果明显。
- 写性能可能下降:因为增加BlockCache大小可能会占用更多内存,导致留给MemStore的内存相对减少,可能使MemStore更快达到flush阈值,从而增加flush频率,影响写性能。
- 减少BlockCache大小:
- 读性能下降:缓存的数据量减少,更多的读操作需要从磁盘读取数据,增加磁盘I/O负担,读性能降低。
- 写性能可能提升:为MemStore腾出更多内存空间,MemStore达到flush阈值的时间变长,减少flush频率,写性能可能得到提升。
- 写缓存(MemStore)
- 增加MemStore flush大小:
- 写性能提升:MemStore可以积累更多的数据再进行flush,减少了频繁flush操作带来的开销,写性能得到提升。
- 读性能可能下降:由于MemStore积累的数据增多,在进行读操作时,如果需要读取的数据在MemStore中,可能需要扫描更多的数据,增加读延迟。同时,大的MemStore flush可能导致更长时间的阻塞读操作。
- 减少MemStore flush大小:
- 写性能下降:频繁的flush操作增加了磁盘I/O负担,写操作需要等待flush完成才能继续,导致写性能下降。
- 读性能可能提升:MemStore中数据量相对较少,读操作扫描的数据量减少,读延迟可能降低。