0

次の入力ファイルを持つ MapReduce タスクがあります

File1    value1
File1    value2
File2    value3
File2    value4

Mapper はファイル名にアクセスし、その中の特定の値を検索します。

質問: これらのファイルのディスク アクセスを最適化する最適化手法が必要です。同じファイル ID を同じマッパーに割り当てる必要があります。そのため、一度に 1 つのタスクだけがファイルにアクセスできるようにすることができます。

例: 必須

Mapper 1: File1 (value1), File1 (value2)
Mapper 2: File2 (value3), File2 (value4)

不要:

Mapper 1: File1 (value1), File2 (value3)
Mapper 2: File1 (value2), File2 (value4)

何か助けはありますか?

4

4 に答える 4

0

私はこれを推測します

 File1    value1
 File1    value2
 File2    value3
 File2    value4

既存のファイルに書き込まれます

あなたが望むものを確実にする方法は、この入力ファイルを最初の列でソートすることです(そしてそれをソートして保存することです)

于 2012-07-22T21:56:19.880 に答える
0

ご希望の効果を得るためにレデューサーを使用することをお勧めします。

キーのすべての値を同じタスクに取得することは、まさに「削減」の定義です。

さらに削減が必要な場合は、最初のジョブの出力に対して別のジョブを実行します。

于 2012-07-23T03:30:44.183 に答える
0

写真に 2 つのファイルがある場合、hadoop 入力形式としてデフォルトの TextInputFormat を使用して、少なくとも 2 つのマップが確実に作成されます。

TextInputFormat を拡張するカスタム InputFormat を作成し、isSplittable()メソッドをオーバーライドしてfalseを返すだけです。このシナリオでは、1 つのマッパーによって 1 つのファイルが完全に処理され、別のマッパーによって次のファイルが完全に処理されます。

于 2012-07-23T13:47:44.970 に答える
0

入力データを分割せずに特定のデータをマップ タスクに送信することはできないと思います。必要に応じて入力データを分割し、TextFileInputFormar.isSplittable()を使用します。

于 2012-07-23T00:52:44.627 に答える