2012-02-03 4 views
8

HBaseについてはほとんど分かりません。基本的な質問を申し訳ありません。HBaseのグループ

私が10の行、10の整数、1つのdatetime、および1つの文字列のテーブルを持っているとします。

  1. HBaseはこのテーブルにクエリを行い、キー(複合キーでも)に基づいて結果をグループ化できますか?
  2. もしそうなら、地図/縮小ジョブを実行する必要がありますか?
  3. どのようにクエリに入力しますか?
  4. HBaseは一般的にテーブルのようなリアルタイムのクエリを実行できますか?

答えて

12

HBaseのデータ集約は、「リアルタイム解析」ニーズと交差します。このタイプの機能性のためにHBaseは構築されていませんが、そのために多くのニーズがあります。したがって、これを行う方法の数は開発されるでしょう。
1):HiveにHBaseテーブルを外部テーブルとして登録し、集計します。効率的ではないデータは、HBase API経由でアクセスされます。 Configuring Hive with Hbaseこれはどのようにそれを行うことができるかについての議論です。 HBaseデータでグループ化する最も強力な方法です。これは、MR業務を実行することを暗示しますが、HBaseではなくHHiveによって実行されます。
2)HDFSのHFilesに座っているHBaseデータを扱っているあなた自身のMRジョブを書くことができます。それは最も効率的な方法ですが、単純ではなく、処理したデータはやや古いです。データはHBase API経由で転送されないため、最も効率的です。代わりにHDFSから順次アクセスします。
3)HBaseの次のバージョンには、特定の領域内の集約が可能なコプロセッサが含まれています。あなたは、それらをRDBMS単語の一種のストアドプロシージャとみなすことができます。
4)メモリ内で、1つのノードで並列化される領域間MRジョブも、将来のHBaseリリースで計画されています。これは、コプロセッサーより幾分高度な分析処理を可能にします。

+0

あなたの答えをありがとう。オプション2を使うと、Map/Redcudeの起動からshufffleとsortへのM/Rの実行に伴うすべてのコストがかかります。どのようにリアルタイムのようにすることができますか? – iCode

+0

また、私が今日これを行う必要がある場合、その答えはまだそれを行う実際的な方法がないということですか? 1は遅いので、3と4は未来、2は不安ですか? – iCode

+0

はい、私の答えは、今日はそれをリアルタイムで行う方法がないことを意味します。次のリリース(コプロセッサリリースと呼ばれる)が利用可能になると、地域レベルでリアルタイムの集計が行われます。 –

5

FAST RANDOM READS = PREPREPAREDデータがHBaseにあります!それが何のためのHBase 使用...

大量のデータを格納する場所。
2.超高速読み込みができる場所。
SQLはあなたに何か良いことをやらない場所です(javaを使用してください)。

集計結果を返す前に、HBaseのデータを読み込み、Javaデータ構造内のすべての種類の集計を実行できますが、計算結果をmapreduceに残すことをお勧めします。あなたの質問から、計算のためのソースデータをHBaseに入れたいと思うようです。この場合、実行するルートには、MapreduceジョブのソースデータとしてHBaseがあります。それを計算し、集計されたデータを返します。しかし、もう一度、Hbaseからマップリデュースの仕事をするために読んでみるのはなぜですか?あなたは超高速ランダムがそれからの読み取りを行うことができるようにするだけHB​​aseのテーブルにデータが「事前準備」THEN負荷をHDFS /ハイブのテーブルに座って、データを残し、それらにをMapReduceジョブを実行します。

1

HBaseで事前集計されたデータを取得したら、Crux http://github.com/sonalgoyal/cruxを使用して、HBaseデータをさらにドリル、スライス、サイコロを作成することができます。 Cruxは、複合フィルタとシンプルキーをサポートしており、高度なフィルタとグループ化が可能です。