1

multipleOutputs を使用した場合と使用しない場合で mapreduce を実行すると、コンソール ログに矛盾が見られます。

テキスト ファイルに出力するマッパーのみのジョブがあります。

MultipleOutputs が構成されていない場合、

私のマッパーのコードスニペット:

context.write(null,new Text(value));

コンソール出力の抜粋

Map-Reduce Framework
       Map input records=2
       Map output records=2

MultipleOutputs を使用すると、

私のマッパーのコードスニペット:

multipleOutputs.write(null,new Text(value),FileOutputFormat.getOutputPath(context).toString() +  Path.SEPARATOR + "v");

コンソール出力の抜粋

Map-Reduce Framework
       Map input records=2
       Map output records=0

空のパーツ ファイルを回避するためのドライバー コード

LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);

出力レコードの数に注意してください。ただし、2 番目のケースでは 0 として表示されますが、ファイルには正しい出力が表示されます。生成されるファイル名は vm-00000 です。

何か不足していますか?

4

1 に答える 1

1

マップ出力レコードは、マッパーが ( を使用してcontext.write()) 出力するキーと値のペアの数をカウントします。これはマッパーからレデューサーにレコードを渡す唯一の方法であり、それがこのカウンターが存在する理由です。

他の方法で書き込まれたレコードの数をカウントしたい場合、または実際に他の方法でカウントしたい場合は、独自のカスタム カウンターを定義する必要があります。

于 2015-12-29T10:24:17.600 に答える