禁用hbase块缓存

jc3wubiy  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(769)

我正在使用通过cloudera部署的apachehbase(版本1.0.0)和phoenix(版本4.6)。由于使用GROUPBY查询进行聚合的速度很慢,因此我想尝试禁用特定hbase表的块缓存。我试过几种方法,但都没有成功。我正在通过hbase shell-description'my\u table'命令验证是否启用/禁用了块缓存。
将cloudera控制台中的“hfile.block.cache.size”属性设置为0 alter 'myTable', CONFIGURATION => {NAME => 'myColumnFamily', BLOCKCACHE => 'false'} 即使在上述两个步骤之后,我在describe命令输出中也会得到blockcache=>'true'

COLUMN FAMILIES DESCRIPTION
{NAME => '0', DATA_BLOCK_ENCODING => 'FAST_DIFF', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '1', MIN_VERSIONS => '0', TTL => 'FOREVER',
KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}

会出什么问题?有什么建议吗?
谢谢您。

bvpmtnay

bvpmtnay1#

最小值 phoenix.query.maxGlobalMemoryPercentage 以及 phoenix.query.maxGlobalMemorySize 在执行分组聚合时,控制中间结果的最大内存。修改此限制(默认值为15%)可以提高聚合性能。

pxy2qtax

pxy2qtax2#

我现在更明白这个问题了。phoenix在hbase中实现协处理器,以便在hbase服务器上并行执行查询。
如果查询计划只包含一个表扫描,则可能不需要缓存( maxGlobalMemory 缓存)。但Phoenix目前不支持 ROLLUP . 为了一个 GROUP BY ,phoenix将中间Map(由协处理器返回)存储在内存中或溢出到磁盘(行为由 phoenix.query.maxGlobalMemory )在产生最终结果之前。最好把它记在记忆里。hbase块缓存设置在协处理器在每个hbase节点上执行时生效(因为您只希望读取此表一次,所以有必要为这些列族禁用块缓存,以减少垃圾收集开销和有用块的逐出)。
因此,这两种设置是互补的。您可能希望在调整时禁用hbase块缓存 maxGlobalMemory 隐藏物。
关于未生效的设置,http://hbase.apache.org/book.html#config.files
目前,这里的更改需要重新启动集群,hbase才能注意到更改。

相关问题