2012-02-15 4 views
2

アドホッククエリのためにHBaseテーブルのスキャンを行う必要があります。現在、私は単一のノードを使用しています。 HBaseを1台以上のマシンで分散モードで実行すると高速化できるかどうか疑問に思っていました。 m1.large EC2マシンで300万行のスキャンを実行するには現在、約5分かかります。 スキャンを速くする方法に関するアイデアは大歓迎です。現在、多くの助けとなっているscan.setCachingが有効になっています。2台以上のマシンでHBaseを実行している場合、Hbaseでスキャンを高速に実行していますか?

+0

mapreduceプログラムを使用すると、スキャンを高速化し、マッパークラスのみを使用できます。 – userRaj

答えて

4

いいえ、ノードを追加するとスキャンが高速化されません。 HBaseスキャンは、いくつかの理由で連続しています。

あなたが作るときに返されるものこのような呼び出しHTable.getScanner(scan)Resultオブジェクトのイテレータです - next()項目を呼び出す時、HBaseのは、実際にあなたのスキャンのパラメータを使用して次の行の別のGet-のようなクエリを実行しています。すべてのScanオブジェクトは、行キーのリストを生成し、それを移動するためのイテレータを提供します(実際には、行キーが存在する領域をキャッシュして把握していますが、無視できます) 。

HBaseのScanの実際のメカニズムを超えて、regionsの問題が物理的にディスクにデータを格納するためのアーキテクチャとなります。リージョンファイル内の最も幅広い構成要素は列ファミリです。これは、同じ列/ファミリのデータの一部をフェッチする際のオーバーヘッドを少なくすることができるため、意味があります。通常、列ファミリは1つの領域(または列ファミリのサイズが拡大するにつれて領域の集合)内に存在するため、複数の領域からの読取りを保証するのに十分な行を走査しない限り、 (ある時点の後、map/reduce操作を使用してデータセットの情報を収集し、データセットを計算することが有用になります)。

関連する問題