米国で 2,400 万件のビジネスを処理しています。現在、HDFS と Hadoop で Pig を使用しています。デバッグのためにアドホック クエリを高速化したいと考えています。たとえば、現在、5 つのサーバー クラスタから 2,400 万のビジネスを grep するのに数分かかります。
Hbaseは、私が見つけた唯一のシステムで、その仕事をすることができるようです。ハイブはそれをしないようです。
HDFS にタブ区切りのフラット テキスト ファイルとして現在保存されているスキーマを次に示します。
place_id name value
1 Title Bamboo Garden
1 Title Bamboo Garden Restaurant
1 Phone 425-555-555
1 Phone 425-444-444
1 Address 123 Bellevue Way
2 Title Burger King
2 Phone 425-333-3333
追加のデータとフィールドを柔軟に組み立てるために、この名前と値のペアを選択します。たとえば、2 つのデータセットを結合したい場合、それらを簡単に "cat" することができます。また、新しいフィールドを追加するのは非常に簡単です。このスキーマはかなり前に設計されたものであり、変更される可能性はほとんどありません。
Hbase は重複キーをサポートしていないため、Hbase でこれをモデル化するのは非常に困難です。上記の例でわかるように、各ビジネスには複数の電話番号、役職、コメントなどを含めることができます。
だから私の質問
- Hadoop でこのようなアドホック クエリを高速化するためのアイデアは何ですか?
- 文字列の配列を HBase に格納するためのベスト プラクティスは何ですか?
- HBase で重複キーを使用してこのキーと値のペアをモデル化する方法は?
コメントの質問を読んだ後に編集: 最も一般的なアドホック クエリは、特定の ID を持つビジネスのすべての情報を返すことです。郵便番号とタイトルを指定してビジネスを返すなど、アドホック クエリのサポートがあると便利な機能が他にもあります。
アドホック クエリをサポートするために RDBMS を使用するというコメントの提案は良いものです。しかし、ストリーミング クエリとアドホック クエリの両方をサポートする 1 つのシステムが必要でした。アドホック クエリは、主にデバッグに必要です。データにバグが見つかった場合でも、それが Hadoop データのバグかどうかを確認する必要があるため、RDBMS をクエリするだけでは十分ではありません。
最も一般的なストリーミング処理クエリは、2 つの大きなデータ セットを結合し、2 つのデータ セット間でビジネスを照合することです。アドホック クエリよりもはるかに多くのストリーミング処理クエリ サポート要件があるため、Hadoop を選択します。私たちのアドホック クエリは、主にデバッグ用です。