繁体   English   中英

HBase扫描性能

[英]HBase Scan Performance

我正在执行范围扫描,它给了我500k记录。 如果我设置scan.setCaching(100000)它花了不到一秒钟,但如果没有设置scan.setCaching(100000)则需要将近38秒。

如果我设置scan.setBlockCache(false)scan.setCaching(100000)会发生什么? 这些行是否会被缓存?

我在第一次扫描后丢弃了操作系统缓存,但扫描记录的时间没有变化。 为什么?

那我该如何检查读取性能呢?

Scan.setCaching是用词不当。 它应该被称为Scan.setPrefetch setCaching实际上指定了每个RPC向regionserver传输的行数。 如果您使用setCaching(1)那么每次调用next()您都需要支付往返于regionserver的往返费用。 将其设置为更大的数字的缺点是您需要为客户端支付额外的内存,并且可能正在获取您不会使用的行,例如,如果在达到特定数量的行后停止扫描或在找到特定值后。

Scan.setBlockCache意味着像Chandra指出的完全不同的东西。 它基本上指示regionserver不将任何数据从此Scan中提取到HBase BlockCache,后者是MemStore的单独内存池。 请注意,MemStores用于写入,而BlockCache用于读取,而这两个内存是完全分开的。 HBase目前不使用BlockCache作为回写缓存。 您可以使用hbase-site.xmlhfile.block.cache.size配置设置来控制块缓存的大小。 同样,您可以通过hbase.regionserver.global.memstore.size设置控制MemStore的总池大小。

如果您正在进行全表扫描,并且不想刷新块缓存中的当前工作集,则可能需要使用setBlockCache(false) 否则,如果您正在扫描经常使用的数据,那么最好不要单独使用setBlockCache

Hbase有两种类型的缓存结构 - memory storeblock cache
内存存储实现为MemStore,用于读取的缓存是块缓存
从HDFS读取数据块时,它将缓存在BlockCache中。 稍后从BlockCache中提取相邻数据的后续读取。
因此,当您手动设置scan.set Block Cache(false)时, 它将停止缓存从hdfs读取的行。
scan.set-caching(100000)是与扫描程序相关的客户端优化。 所以它仍然可以不受影响

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM