10

Hbase でテーブルを結合する必要があります。

HIVE と HBase を統合しましたが、うまく機能しています。HIVE を使用してクエリを実行できます。

しかし、HIVE を使用せずに HBase でテーブルを結合する方法を教えてください。mapreduce を使用すればこれを達成できると思います。

ご意見をお聞かせください。

アプローチを考えています。あれは、

テーブル A x B x C を結合する必要がある場合。TableMapReduceUtil を使用して A を反復処理し、TableMapper 内で B と C からデータを取得します。次に、TableReducer を使用して別のテーブル Y に書き戻します。

このアプローチは良いものでしょうか。

4

1 に答える 1

13

それは確かにアプローチですが、スキャンされた行ごとに 2 つのランダム読み取りを行うと、速度が急落します。行を大幅にフィルタリングしている場合、または A に小さなデータセットがある場合は、問題にならない可能性があります。

ソートマージ結合

ただし、HBase 0.96 で利用できるようになる最善の方法は、MultipleTableInput メソッドです。これは、テーブル A をスキャンし、テーブル B を一致させる一意のキーを使用して出力を書き込むことを意味します。

たとえば、テーブル A は (b_id, a_info) を発行し、テーブル B は (b_id, b_info) を発行し、リデューサーでマージします。

これはソートマージ結合の例です。

入れ子ループ結合

行キーで結合している場合、または結合属性がテーブル B に沿って並べ替えられている場合、探しているものが見つかるまでテーブル B から順次読み取るスキャナーのインスタンスを各タスクに含めることができます。

たとえば、テーブル A の行キー = "companyId" およびテーブル B の行キー = "companyId_employeeId" です。次に、テーブル A の各会社について、ネストループ アルゴリズムを使用してすべての従業員を取得できます。

擬似コード:

for(company in TableA):
    for(employee in TableB):
        if employee.company_id == company.id:
            emit(company.id, employee)

これはネストループ結合の例です。

より詳細な結合アルゴリズムは次のとおりです。

于 2012-08-02T21:03:33.050 に答える