2017-04-14 11 views
4

HBase Javaクライアント/ Thrift/RESTインターフェイスでいくつかのパフォーマンステストを実行しています。 私は500Kの行を持つ "航空会社"と呼ばれるテーブルを持っています。 私は4つの異なるJavaプログラムを通してテーブルからすべての500K行をフェッチしています。 (JAVAクライアント、Thrift、Thrift2、RESTを使用)なぜHBase JavaクライアントがREST/Thriftに比べて遅いのですか

以下は、さまざまなフェッチサイズのパフォーマンス番号です。 これらすべてのバッチサイズは、私はそれを見ることができた100000


[Table which shows the performance numbers. All times are in ms][1] 

Perf Numbers


に設定されているため、我々は、RESTの場合にフェッチサイズを大きくすると、パフォーマンスの改善があり、倹約、そして倹約2。

Java APIでは、フェッチサイズに関係なく、一貫したパフォーマンスが見られます。 フェッチサイズがJAVAクライアントに影響しないのはなぜですか?


誰かが、この中で私を助けることができる - {プロセス行 }ここで

は私のJavaプログラムの


Table table = conn.getTable(TableName.valueOf("Airline")); 
Scan scan = new Scan(); 
ResultScanner scanner = table.getScanner(scan); 

for (Result[] result = scanner.next(fetchSize); result.length != 0; result = scanner.next(fetchSize)) 

の抜粋です。私は、JAVAクライアントを介したデータフェッチに間違ったメソッド/クラスを使用していますか?

+0

あなたの質問には、違いが生じる理由を推測するための情報が少なすぎます。あなたが使用しているHBaseのバージョンは何ですか?デフォルトの設定を使用していますか、またはカスタム設定がありますか?スキャナのキャッシングを設定していますか? –

答えて

1

スキャナは、適時に必要な数の行をフェッチするように設定されていません。つまり、実際にスキャンを実行するものではなく、スキャンオブジェクトではなく、ResultScannerをチューニングしています。

scan.setCaching 
scan.setCacheBlocks 

https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html

あなたがループする前にこれらの機能を呼び出します...

ソース 豚のHBaseStorage:

私はあなたが欲しい機能は以下の一部あると考えています#initScan機能

+0

ご返信ありがとうございます。 scan.setMaxResultSize()はデフォルトで2MBになっていますが、10MBに変更してもパフォーマンスは良好でした。 100%の改善が見られました。しかし、scan.setBatch()の値が異なると、パフォーマンスに違いは見られません。 –

+0

伝統的には、あなた自身の質問に答えて、それがあなたのために働いたのであなたの答えを受け入れることです。もしあなたがそれをして気にしないなら、「答えられていない質問」キューからこの質問をクリアしてください。あるいは、私の答えに 'setMaxResultSize'を追加して、それを受け入れることができます。どんなことであれ、あなたのために最も効果的です。お知らせ下さい... – WattsInABox

関連する問題