問題
複数の HBase テーブル (A、B、C) があります。A が処理が必要なレコードのキューであると仮定します。平均 2,500 万件のレコードを含めることができます。A にはユーザー ID があります。B には、各ユーザーが実行した Web サイト ヒットがあります。B には数十億の行が含まれる可能性があります。Cには、ユーザーに関するいくつかの二次情報があります。
MapReduce ジョブを使用して、キュー内のレコードに対して予測分析 (何千もの決定木) を実行します。質問の範囲には、実際の分析モデリングは含まれません。
質問
- MR ジョブは、テーブル B と C に対してアドホック クエリを実行しています。たとえば、マップ タスク 1 はクエリを実行してユーザー 1 のヒットを取得し、マップ タスク 2 はクエリを実行してユーザー 2 のヒットを取得します。これらのヒットが同じリージョン サーバーで終了した場合、パフォーマンスを妨げますか (競合状態など)? 各マッパーが 1 つのリージョン サーバーにまたがるキーを持つように入力セットを分割する ChainMapper (ChainReducer) のようなパターンはありますか?
- 私の最初の考えは、必要なすべての入力 (b と c からの結果) を含むキューを用意することでした。この入力は圧縮されます (モデリングに必要なもののみ)。このアプローチにより、アドホック クエリの実行が回避されます (同時に複数のマップ タスクによってリージョン サーバー間で)。
その他の提案は大歓迎です。
Cloudera CDH 3 (hadoop、hbase) を使用しています。