0

私はいくつかのHadoopアプリケーションを実装しています。コーディングの部分はほぼ完了です。しかし、「Lin&ChrisDryer」のマッパーデザインパターンブックを読んだ後、コーダーを改善したい。このアプローチの効率的な実装に関しては、マップ関数の状態を一定期間保持してから結果を出力する必要があります。これは、マッパークラスのメンバー変数としてデータ構造を取得し、クリーンアップメソッドで出力することで簡単に実装できます。上記の実装は、「org.apache.hadoop.mapreduce.mapper」インターフェースで実行可能です。

しかし、実際にはシステムに新しいHadoop APIをセットアップできなかったため、「mapdreduce」パッケージがないhadoop0.18を使用し、代わりに「mapred」マッパーインターフェイスを使用して、 「mapredcue.mapper」のようなクリーンアップ方法。マッパーデザインパターンでこれを古いインターフェイスに実装できますか?「close」メソッドがありますが、このメソッドは、キーと値のペアを出力できるように、引数や機能を提供しません。

4

1 に答える 1

1

古いAPIを使用してセットアップとクリーンアップを引き続き実行できます。

マッパーは、Configurableインターフェースを実装する(またはConfiguredを拡張する)必要があります。この場合、マッパークラスがMapRunnerで(ReflectionUtils.newInstanceメソッドを介して)作成されると、setConf(Configuration)メソッドが呼び出されてジョブ構成が渡されます。ここでの新しいAPIと古いAPIの違い-古いAPIのOutputCollectorにアクセスできません(新しいAPIとしてコンテキストが渡されます)

最後に、すべてのレコードがmapメソッドに渡されると、MapRunnerはマッパーのcloseメソッドを呼び出します(新しいAPIのcleanupメソッドと同様)。繰り返しになりますが、OutputCollectorにアクセスできないため、必要に応じて、mapメソッドでそれへの参照を作成する必要があります。

于 2012-11-30T11:44:41.200 に答える