Scan.setCachingは誤称です。のような名前にする必要がありますScan.setPrefetch。setCaching実際には、RPC ごとにリージョンサーバーに送信される行数を指定します。使用するsetCaching(1)と、呼び出すたびnext()にリージョン サーバーへの往復のコストが発生します。より大きな数に設定することのマイナス面は、クライアントで余分なメモリを支払うことであり、たとえば、特定の行数に達した後にスキャンを停止した場合や、使用しない行をフェッチする可能性があることです。特定の値を見つけた後。
Scan.setBlockCacheチャンドラが指摘したように、まったく異なるものを意味します。これは基本的に、このスキャンから MemStore とは別のメモリ プールである HBase BlockCache にデータをプルしないようにリージョン サーバーに指示します。MemStores は書き込みに使用され、BlockCache は読み取りに使用され、これら 2 つのメモリは完全に分離されていることに注意してください。HBase は現在、BlockCache をライトバック キャッシュとして使用していません。hfile.block.cache.sizeの構成設定を使用して、ブロック キャッシュのサイズを制御できますhbase-site.xml。同様に、設定を介して MemStore の合計プール サイズを制御できhbase.regionserver.global.memstore.sizeます。
setBlockCache(false)テーブル全体のスキャンを実行していて、現在のワーキング セットをブロック キャッシュにフラッシュしたくない場合に使用します。そうではなく、頻繁に使用されるデータをスキャンしている場合は、そのままにしておいた方がよいでしょうsetBlockCache。