我一直在阅读我应该在Hbase中禁用大块扫描的阻塞缓存.我认为这是因为你在大扫描中获得了更好的性能,因为你没有使用GC并节省了加载块缓存所花费的时间,但我读了人们获得相同性能的基准测试.
我认为,如果我不使用blockcache,我应该获得时间,因为GC不必经常执行.我从Cloudera那里找到了一个关于这个问题的问题,我真的不喜欢测试问题的任何可能的回答,我想这应该是事实.那么,如果你禁用了blockcache,你会获得更好的大型(全表)扫描性能吗?是什么原因?
HBase的具有二级缓存结构
那种MEMSTORE
BlockCache
用于写道.HBase的使用的memstore它们写入磁盘作为一个新的存储文件前缓冲值.
用于读取.每个HBase的区域服务器具有块高速缓存能够有效地保持最近访问的数据用于随后的读出的连续的信息.
由于HBase读取整个数据块以实现高效的I/O使用,因此它会将这些块保留在块缓存中,以便后续读取不需要任何磁盘操作.
如果您扫描块缓存大表启用,数据缓存在内存中.由于整个表将不适合高速缓存,GC将频繁执行这可降低性能.
如果你不打算看了一遍又一遍相同的数据,这是没有用的缓存它的.在这种情况下,启用块缓存只会降低性能
每个读取高速缓存中的数据检查,还有一些包括磁盘I/O和数据缓存(这将不能再次使用)
当数据块缓存满,清理有许多工作要做.
这将提高内存的使用,从而降低CPU的性能.
块缓存提高时,相同的数据被频繁读取的性能.它在大型表扫描中没有帮助.