2012-09-25 19 views
6

Quiero acces el valor myCounter.my en reductor:cómo acceder al valor del contador de Mapper en un Reducer?

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) 
    { 

    } 
} 

Accessing a mapper's counter from a reducer(for old API is given) cómo hacer que funcione para nueva API?

O

Quiero saber el número total de la producción asignador? Hay alguna forma mejor ? (No soy capaz de acceder a la receta en Reductor:

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

Gracias

+0

¿qué versión de hadoop estás usando? – faizan

+0

Hadoop 0.20.0 API –

+0

@faizan: Hadoop 0.20.0 API –

Respuesta

-2

Puede acceder de la siguiente manera:

Map.myCounter.my // static fields you can access by it's class name. 
+0

En el marco de hadoop Map-Reduce no funciona así. Mi pregunta es específica para Map_reduce Framework. –

0

puede acceder a su valor de contador del reductor utilizando el mismo código

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

also see

+0

Its Not working .counter.getValue dará cero puesto que el contexto (org.apache.hadoop.mapreduce.Reducer.Context ) en Reducer es diferente a context (org.apache.hadoop) .mapreduce.Reducer.Context ) de Mapper. –

+0

por lo que sé, el contexto le da acceso al mismo contador global. – faizan

+0

por lo que no afecta si está accediendo al contexto desde la configuración o el mapa o reduce el método [enlace] (http://diveintodata.org/2011/03/15/an-example-of-hadoop-mapreduce-counter/) – faizan

1

Debe hacer que funcione para la nueva API accediendo a los contadores a través del objeto de trabajo.

Configuration conf = context.getConfiguration(); 
Cluster cluster = new Cluster(conf); 
Job currentJob = cluster.getJob(context.getJobID()); 
long val=currentJob.getCounters().findCounter(myCounter.my).getValue(); 
+0

Me funcionó. Gracias – Ajaykumar

Cuestiones relacionadas