2016-03-25 5 views
0

私はclouderaを使って展開したapache hbase(バージョン1.0.0)とphoenix(バージョン4.6)を使用しています。クエリによるグループの集計は遅いので、特定のhbaseテーブルのブロックキャッシュを無効にする方法を試してみたいと思います。私はいくつかのアプローチを試みましたが、成功することはできませんでした。ブロックキャッシュがhbaseシェルで有効/無効になっているかどうかを確認しています - 'my_table'コマンドを記述してください。でも、上記の二つのステップの後に0 HBaseブロックキャッシュを無効にする

  • alter 'myTable', CONFIGURATION => {NAME => 'myColumnFamily', BLOCKCACHE => 'false'}
  • にClouderaのコンソールから

    1. がセット 'hfile.block.cache.size' プロパティ、私は記述でBLOCKCACHE => 'true' を取得しますコマンド出力

      COLUMN FAMILIES DESCRIPTION 
      {NAME => '0', DATA_BLOCK_ENCODING => 'FAST_DIFF', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', COMPRESSION => 'NONE', VERSIONS => '1', MIN_VERSIONS => '0', TTL => 'FOREVER', 
      KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'} 
      

      何が問題になる可能性がありますか?助言がありますか?

      ありがとうございます。

    答えて

    0

    最小値は、phoenix.query.maxGlobalMemoryPercentagephoenix.query.maxGlobalMemorySizeです。グループバイグラム集計を実行するときの中間結果の最大メモリを制御します。この制限(デフォルトは15%)を変更すると、集計のパフォーマンスが向上する可能性があります。

    +0

    理論的には、ブロックキャッシュを集約に対して有効にし、クエリでグループ化することは理にかなっていますか?それが完全なテーブルスキャンにつながると仮定すると、ブロックキャッシュが有効になっているとパフォーマンスが低下すると思います。 - SELECT SUM(UNIT_SOLD)、SUM(TOTAL_SALES)FROM TRANSACTIONS GROUP BY COUNTRYのようなロールアップクエリを考えてみましょう。どう思いますか? –

    0

    私は今問題をより明確に理解しています。フェニックスはHBaseでコプロセッサを実装して、HBaseサーバ上で並列にクエリを実行します。

    クエリプランが1回のテーブルスキャンのみで構成される場合、キャッシュする必要はありません(maxGlobalMemoryキャッシュ)。しかし、フェニックスは現在ROLLUPをサポートしていません。 GROUP BYの場合、Phoenixは最終結果を生成する前に、中間マップ(コプロセッサによって返された)をメモリに保存するか、ディスクに流します(動作はphoenix.query.maxGlobalMemoryで定義されます)。それを記憶に入れておく方が良いです。 HBaseブロックのキャッシュ設定は、コプロセッサが各HBaseノードで実行されるときに有効になります(このテーブルを一度読み込むだけで、これらの列ファミリのブロックキャッシュを無効にしてガベージコレクションのオーバーヘッドを削減し、

    したがって、2つの設定は相補的です。 maxGlobalMemoryキャッシュをチューニングするときにHBaseブロックキャッシュを無効にすることができます。設定については

    は現在、http://hbase.apache.org/book.html#config.files

    を効果を取っていない、ここでの変更は変更に気づきHBaseのためのクラスタの再起動が必要になります。

    +0

    キャッシュをブロックするのを無効にする方法が見つかりました。フェニックスでalter tableのクエリを実行することで、私はそうすることができました。私はmaxGlobalMemoryの設定を試しましたが、クエリのタイミングに違いはありませんでした。 Btw、あなたはROLLUPについて言及していますが、ROLLUP句とこのクエリをサポートする方法とはどういう違いがありますか? "SELECT SUM(UNIT_CNT_SOLD)、SUM(TOTAL_SALES)FROM TRANSACTIONS GROUP BY T_COUNTRY; 。このクエリは、国別売上高をロールアップしていますか? –

    +0

    ROLLUPに関するあなたの以前の言葉に誤解がありました。 ROLLUP文と同じクエリ/実行計画を生成するクエリがあるかもしれませんが、PhoenixはクエリでキーワードROLLUPをサポートしていません。これは私が言及したものです。しかし、私は同意する、ブロックキャッシュを無効にするのが適切だと思われる。この場合パフォーマンスが向上しましたか? – kliew

    関連する問題