3

マッパーのみを持つ map-reduce ジョブの実行中に、失敗したドキュメントの数をカウントするカウンターがあります。すべてのマッパーが完了した後、失敗したドキュメントの合計数が固定値を超えた場合にジョブを失敗させたい分数。(最初はドキュメントの総数がわからないため、最終的に必要です)。これだけのために reduce を実装せずにこれを達成するにはどうすればよいですか?

タスクレベルのクリーンアップ方法があることを知っています。しかし、すべてのタスクが完了した後にこれを実行するために使用できるジョブレベルのクリーンアップ方法はありますか?

4

1 に答える 1

0

これは非常に簡単に行うことができます。それが最新の mapreduce API の利点です。

マッパーの実行は、Mapper クラスの run メソッドをオーバーライドすることで制御できます。リデューサーも同様です。あなたが期待している最終的な結果はわかりません。しかし、私はあなたのために小さな例を用意しました。私は持っている

私のマッパークラスでは、run メソッドをオーバーライドしてサンプルを提供しています。コードでキー値が 200 を超えると、実行が中断されます。

public class ReversingMapper extends Mapper<LongWritable, Text, ReverseIntWritable, Text> 
{
    public final LongWritable border = new LongWritable(100);
    @Override
      public void run(Context context) throws IOException, InterruptedException {
        setup(context);

          while (context.nextKeyValue()) {

             /*   extra code to standard run method started here                 */

            //if(context.getCounter(<ENUM>) > 200 ){}  -- you can place your counter check here.
            if(context.getCurrentKey().get() > 200 )
            {
                throw new InterruptedException();
            }else
            {
            /*   extra code to standard run method ended here                 */
                map(context.getCurrentKey(), context.getCurrentValue(), context);
            }
          }

      }

また、ドライバーでも適切に処理する必要があります。

} catch (InterruptedException e) {
            e.printStackTrace();
            System.exit(0);
        }

ロガーを使用して、ここで必要な適切なメッセージをログに記録することもできます..

これで問題が解決することを願っています。さらにサポートが必要な場合はお知らせください。

于 2014-12-02T13:32:02.560 に答える