hbase扫描性能

csbfibhn  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(567)

我正在执行一个范围扫描,给我500k的记录。如果我设置 scan.setCaching(100000) 不到一秒钟,但如果 scan.setCaching(100000) 它花了将近38秒。
如果我设置 scan.setBlockCache(false) 以及 scan.setCaching(100000) 会发生什么?是否缓存行?
我在第一次扫描后删除操作系统缓存,但扫描记录的时间没有变化。为什么?
那我怎么检查读取性能呢?

y53ybaqx

y53ybaqx1#

Scan.setCaching 用词不当。它应该叫做 Scan.setPrefetch . setCaching 实际指定每个rpc将向regionserver传输多少行。如果你使用 setCaching(1) 每次你打电话 next() 您需要支付往返regionserver的费用。将其设置为更大的数字的缺点是,您需要为客户机中的额外内存付费,并且可能会获取不使用的行,例如,如果在达到特定行数或找到特定值后停止扫描。 Scan.setBlockCache 就像钱德拉说的完全不同。它基本上指示regionserver不要将此扫描中的任何数据拉入hbase blockcache,后者是memstore中的一个单独的内存池。请注意,memstores用于写入,blockcache用于读取,这两块内存是完全分开的。hbase当前不将块缓存用作回写缓存。可以使用 hfile.block.cache.size 中的配置设置 hbase-site.xml . 类似地,您可以通过 hbase.regionserver.global.memstore.size 设置。
你可能想用 setBlockCache(false) 如果正在执行全表扫描,并且不希望刷新块缓存中的当前工作集。否则,如果您正在扫描频繁使用的数据,则最好将 setBlockCache 一个人。

os8fio9y

os8fio9y2#

hbase有两种类型的缓存结构- memory store 以及 block cache .

内存存储实现为memstore,用于读取的缓存是block cache

当从hdfs读取数据块时,它被缓存在blockcache中。相邻数据的后续读取仅由块缓存提供服务。
因此,当您手动设置scan.set block cache(false)时,它将停止缓存从hdfs读取的行。scan.set缓存(100000)是与扫描仪相关的客户端优化。所以它仍然可以正常工作

相关问题