8

レデューサーのmyCounter.my値にアクセスしたい:

public static class Map extends Mapper<LongWritable, Text, ImmutableBytesWritable, ImmutableBytesWritable>
{
    public static enum myCounter{my};

    @Override
    public void map(LongWritable key, Text value, Context context) 
    {
        context.getCounter(myCounter.my).increment(1);
        context.write( new ImmutableBytesWritable ( ),new ImmutableBytesWritable() );
    }
}


public static class Reduce extends Reducer<ImmutableBytesWritable, ImmutableBytesWritable, Text, Text>
{
    @Override
    public void reduce(ImmutableBytesWritable key,Iterable<ImmutableBytesWritable> result,Context context)
    {

    }
}

レデューサーからマッパーのカウンターにアクセスする(古いAPIの場合) 新しいAPIで機能させる方法は?

または

マッパー出力の総数を知りたいですか?もっと良い方法はありますか?(Reducerのカウンターにアクセスできません:

Group Name->org.apache.hadoop.mapred.Task$Counter Counter Name->MAP_OUTPUT_RECORDS)。

ありがとう

4

3 に答える 3

2

ジョブ オブジェクトを介してカウンターにアクセスすることで、新しい API で機能させることができます。

Configuration conf = context.getConfiguration();
Cluster cluster = new Cluster(conf);
Job currentJob = cluster.getJob(context.getJobID());
long val=currentJob.getCounters().findCounter(myCounter.my).getValue();
于 2017-03-18T22:04:15.827 に答える
0

同じコードを使用して、リデューサーでカウンター値にアクセスできます

Counter counter = context.getCounter( myCounter.my );
        counter.getValue();

も参照

于 2012-09-25T08:38:00.343 に答える
-2

次のようにアクセスできます。

Map.myCounter.my // static fields you can access by it's class name.
于 2012-09-25T06:18:53.273 に答える