マッパークラス
Mapperは入力の<key, value>ペアを中間の<key, value>ペアにマップする。 中間ペアは入力ペアと同じ型である必要はない。 与えられた入力ペアは、ゼロまたは多数の出力ペアに対応することができる。
<K1,V1>*→ マッパー →<K2,V2>*
Netezzaのmap/reduceは、与えられた入力テーブルに対して、データスライスごとに1つのmapタスクを実行する。 その結果、マップタスクの数は、入力テーブルが分散されているデータスライスの数によって決定される。 マッパーのパフォーマンスを最適化するには、データがデータスライスに均等に分散されていることを確認する。
public void run(Context context) throws IOException,
InterruptedException {
setup(context);
while (context.nextKeyValue()) {
map(context.getCurrentKey(), context.getCurrentValue(), context);
}
cleanup(context);
}
map()メソッドは、デフォルトでは入力を出力として返す。 (高度な使用例のための run() を含め、これらのメソッドのどれでもオーバーライドできる)
マッパーのコンテキスト・オブジェクト
マッパーはコンテキスト・オブジェクトにアクセスすることができ、これによりマッパーは他の環境と相互作用することができる。 マッパーや他のメソッドの引数として渡されるコンテキストオブジェクトは、ジョブの設定データへのアクセスを提供し、マッパーがContext.write(key, value)メソッドを使って出力ペアを生成することを可能にします。
Context.getConfiguration() メソッドは、 map/reduce プログラムを実行するための設定データを含む設定オブジェクトを返します。 ジョブに任意の(キーと値の)ペアのコンフィギュレーションデータを設定し(例えばJob.getConfiguration().set("myKey", "myVal")メソッド)、マッパーでこのデータをContext.getConfiguration().get("myKey")メソッドで取得することができます。 (これは通常、マッパーのsetup()メソッドで行われる)
cleanup()メソッドは主にオーバーライドされる(デフォルトではクリーンアップは行われない)。 すべての入力が処理された後にクリーンアップを実行する必要がある場合は、デフォルトをオーバーライドして、指定されたユースケースに合うように設定することができる。