1

米国で 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 でこれをモデル化するのは非常に困難です。上記の例でわかるように、各ビジネスには複数の電話番号、役職、コメントなどを含めることができます。

だから私の質問

  1. Hadoop でこのようなアドホック クエリを高速化するためのアイデアは何ですか?
  2. 文字列の配列を HBase に格納するためのベスト プラクティスは何ですか?
  3. HBase で重複キーを使用してこのキーと値のペアをモデル化する方法は?

コメントの質問を読んだ後に編集: 最も一般的なアドホック クエリは、特定の ID を持つビジネスのすべての情報を返すことです。郵便番号とタイトルを指定してビジネスを返すなど、アドホック クエリのサポートがあると便利な機能が他にもあります。

アドホック クエリをサポートするために RDBMS を使用するというコメントの提案は良いものです。しかし、ストリーミング クエリとアドホック クエリの両方をサポートする 1 つのシステムが必要でした。アドホック クエリは、主にデバッグに必要です。データにバグが見つかった場合でも、それが Hadoop データのバグかどうかを確認する必要があるため、RDBMS をクエリするだけでは十分ではありません。

最も一般的なストリーミング処理クエリは、2 つの大きなデータ セットを結合し、2 つのデータ セット間でビジネスを照合することです。アドホック クエリよりもはるかに多くのストリーミング処理クエリ サポート要件があるため、Hadoop を選択します。私たちのアドホック クエリは、主にデバッグ用です。

4

3 に答える 3

2

Hadoop でこのようなアドホック クエリを高速化するためのアイデアは何ですか?

試してはいけないと思います。Hadoop はバッチ分析用であり、レコードのフェッチ用ではありません。


文字列の配列を HBase に格納するためのベスト プラクティスは何ですか?

これを行うにはいくつかの方法があります。更新があまりない場合は、文字列配列をシリアル化された方法で 1 つの文字列に格納します。425-555-5555^425-444-444「電話」と呼ばれるセルの中のようなもの。Pig と Hive では、いくつかの単純な文字列分割ユーティリティを使用して、これを配列に戻すことができます。

数値を頻繁に追加すると"phone1""phone[2]"、 などのセルが作成される可能性があります。これにより、Pig と Hive での処理がかなり難しくなります。


HBase で重複キーを使用してこのキーと値のペアをモデル化する方法は?

基本的に、SQL スキーマに実装したのは、二重にネストされたマップであり、まさに HBase です。したがって、データのモデリングは非常に簡単なはずです。

ここでキーを複製する必要があります。それは単数のように見えるので、ビジネスのタイトルをキーにしてください。ただし、「バーガーキング」は複数の場所に存在する可能性があるため、ユニークにする方法を見つけたい. 私が提案することの 1 つは、ビジネスの名前をキーの一部にすることですが、それをユニークにする何かを追加します。

例: "Bambo Garden^1""Burger King^2"または"Bamboo Garden^123 Bellvue Way".

これらのキーの下には、電話番号、住所などがあります。

スキーマを指定する必要がないため、以前と同じように列を追加できます。古いコードはすべて引き続き機能し、新しい列が出現しても無視されます。

于 2012-10-02T01:59:24.623 に答える
2

Pig/Hive は主にバッチ処理に使用され、リアルタイムのアドホック クエリには使用されません。

インタラクティブなアドホック クエリ用のGoogle Dremelの実装であるApache Drillがキックされました。Apache Drill から確かな何かが実現するまでには、しばらく時間がかかるかもしれません。それまでは、大規模なデータセット (最大数十億行) をインタラクティブに分析するために使用されるGoogle BigQueryクラウド サービスを使用できます。

Apache Drill の目標の 1 つは、HBase や HDFS などのデータ ソースと組み合わせて使用​​することです。したがって、HDFS のデータを使用して Apache Drill をクエリ エンジンとして使用できるはずです。

于 2012-10-03T12:33:45.187 に答える
0

ロバートがコメントで述べたように、おそらく通常の RDBMS が最善の策です。

アドホック クエリと配列を格納する方法については、どのようなクエリを実行しようとしていますか (これは、HBase でモデル化する方法に大きく影響します)。

3番目の質問について。これを格納する最も簡単な方法 (上で述べたように最善ではないかもしれません) は、「名前」を修飾子 (「列」) にすることです。複数の値 (電話番号など) がある場合は、複数の修飾子を使用できます (列ファミリーが f であると仮定すると、f:phone1,f:phone2.. となります)。プレフィックスによって列を取得できます (すべての列電話から始まります)

アーノン

于 2012-10-02T04:47:53.487 に答える