1

現在、Solr を NoSQL データベースとして使用しています。私はさまざまな種類の文書を索引付けしており、それらの間に関係がある場合もあります。

新しいユースケースでは、Solr がサポートしていない結合に相当するものを実行する必要があります。

map-reduce ジョブを hadoop に送信し、hadoop が Solr からデータを取得して結合を実行できる方法があるかどうか疑問に思っていました。

を探しています:

  1. 話し合い
  2. これを行う既存のオープンソース プロジェクト
  3. サンプルコード
  4. または、これは簡単に、または一般的なケースではできないという批評です。

前もって感謝します。

注: 関連または類似のトピックに関するいくつかの質問をここで見ました: herehere、およびhere ですが、探しているものが得られませんでした。

4

1 に答える 1

1

2 つの基本的なオプションがあります。

1) SOLR REST API を使用して、同時に多数のリクエストを発行することにより、レコードを手動で結合します。

この戦略では、SOLR レコード ID またはクエリ用語を使用してマッパーを定義し、SOLR クラスターに対してすべてのマッパーを実行する必要があります。タイムアウト付きの同期リクエストを送信し、適度にパフォーマンスの高い solr クラスターがある場合、必要に応じてレデューサーにレコードを書き込むことができます。

2) マッパーで SOLR コア インデックスを直接読み取り、reduce side join を実行します。

これは少し難しいかもしれません。各コアはインデックス化され、階層フォルダー構造に書き込まれるため、マッパーの setup() メソッドに、特定のコアからメタデータを読み取るロジックが必要になります。もちろん、すべてのコアを HDFS に入れる必要があるかもしれません。ただし、既存の SOLR Java インデックス リーダー API を使用して SOLR 入力を解析すると、これらをレデューサーに適切に出力して標準のサイド結合を減らすのは簡単です。

3) 1 つの小さなデータ セット (< 1G) が別の大きなデータ セットに結合されている場合は、REST クエリを発行してそれを読み込んで、大きな醜い静的に利用可能なオブジェクトとしてメモリにキャッシュするか、そのデータをファイルとしての分散キャッシュ。マッパーの setup() 部分でクエリを発行し、インスタンスごとにローカルにキャッシュすることもできます。

いずれにせよ、SOLR でのデータの結合は特に簡単ではありません。どのソリューションにも欠点があります。適切な解決策は、SOLR インデックスを再作成して十分に非正規化し、標準の map/reduce、HIVE、または PIG などのツールを使用して結合を行うことです。

于 2012-09-24T20:29:11.447 に答える