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 などのツールを使用して結合を行うことです。