medidores luz leer lectura energia electrica contador como antiguo java hadoop mapreduce hadoop2

java - lectura - como leer un contador de luz antiguo



El contador no funciona en el código reductor (1)

Estoy trabajando en un proyecto Big hadoop y hay un KPI pequeño, donde tengo que escribir solo los 10 valores principales para reducir el rendimiento. Para completar este requisito, he usado un contador y rompí el ciclo cuando el contador es igual a 11, pero aún el reductor escribe todos los valores en HDFS.

Este es un código Java bastante simple, pero estoy atascado :(

Para las pruebas, he creado una clase independiente (aplicación Java) para hacer esto y esto está funcionando allí; Me pregunto por qué no funciona en el código reductor.

Por favor, que alguien me ayude y sugiera si me falta algo.

MAPA - REDUCIR CÓDIGO

package comparableTest; import java.io.IOException; import java.nio.ByteBuffer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.IntWritable.Comparator; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.WritableComparator; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.Mapper.Context; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class ValueSortExp2 { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(true); String arguments[] = new GenericOptionsParser(conf, args).getRemainingArgs(); Job job = new Job(conf, "Test commond"); job.setJarByClass(ValueSortExp2.class); // Setup MapReduce job.setMapperClass(MapTask2.class); job.setReducerClass(ReduceTask2.class); job.setNumReduceTasks(1); // Specify key / value job.setMapOutputKeyClass(IntWritable.class); job.setMapOutputValueClass(Text.class); job.setOutputKeyClass(IntWritable.class); job.setOutputValueClass(Text.class); job.setSortComparatorClass(IntComparator2.class); // Input FileInputFormat.addInputPath(job, new Path(arguments[0])); job.setInputFormatClass(TextInputFormat.class); // Output FileOutputFormat.setOutputPath(job, new Path(arguments[1])); job.setOutputFormatClass(TextOutputFormat.class); int code = job.waitForCompletion(true) ? 0 : 1; System.exit(code); } public static class IntComparator2 extends WritableComparator { public IntComparator2() { super(IntWritable.class); } @Override public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) { Integer v1 = ByteBuffer.wrap(b1, s1, l1).getInt(); Integer v2 = ByteBuffer.wrap(b2, s2, l2).getInt(); return v1.compareTo(v2) * (-1); } } public static class MapTask2 extends Mapper<LongWritable, Text, IntWritable, Text> { public void map(LongWritable key,Text value, Context context) throws IOException, InterruptedException { String tokens[]= value.toString().split("//t"); // int empId = Integer.parseInt(tokens[0]) ; int count = Integer.parseInt(tokens[2]) ; context.write(new IntWritable(count), new Text(value)); } } public static class ReduceTask2 extends Reducer<IntWritable, Text, IntWritable, Text> { int cnt=0; public void reduce(IntWritable key, Iterable<Text> list, Context context) throws java.io.IOException, InterruptedException { for (Text value : list ) { cnt ++; if (cnt==11) { break; } context.write(new IntWritable(cnt), value); } } } }

CÓDIGO SIMPLE DE JAVA MUESTRA BIEN

package comparableTest; import java.io.IOException; import java.util.ArrayList; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer.Context; public class TestData { //static int cnt=0; public static void main(String args[]) throws IOException, InterruptedException { ArrayList<String> list = new ArrayList<String>() {{ add("A"); add("B"); add("C"); add("D"); }}; reduce(list); } public static void reduce(Iterable<String> list) throws java.io.IOException, InterruptedException { int cnt=0; for (String value : list ) { cnt ++; if (cnt==3) { break; } System.out.println(value); } } }

Datos de muestra: el encabezado es solo más información, los datos reales provienen de la segunda línea

` ID NAME COUNT (necesita mostrar los 10 primeros desc)

1 Toy Story (1995) 2077

10 GoldenEye (1995) 888

Ayuntamiento 100 (1996) 128

1000 cuajado (1996) 20

1001 Asociado, The (L''Associe) (1982) 0

1002 siguiente paso de Ed (1996) 8

1003 Extreme Measures (1996) 121

1004 Glimmer Man, The (1996) 101

1005 D3: The Mighty Ducks (1996) 142

1006 Chamber, The (1996) 78

1007 Apple Dumpling Gang, The (1975) 232

1008 Davy Crockett, rey de la frontera salvaje (1955) 97

1009 Escape to Witch Mountain (1975) 291

101 Bottle Rocket (1996) 253

1010 Love Bug, The (1969) 242

1011 Herbie Rides Again (1974) 135

1012 Old Yeller (1957) 301

1013 Parent Trap, The (1961) 258

1014 Pollyanna (1960) 136

1015 Homeward Bound: The Incredible Journey (1993) 234

1016 Shaggy Dog, The (1959) 156

1017 Familia suiza Robinson (1960) 276

1018 ¡Ese maldito gato! (1965) 123

1019 20,000 leguas de viaje submarino (1954) 575

102 Sr. Wrong (1996) 60

1020 Cool Runnings (1993) 392

1021 Ángeles en el campo abierto (1994) 247

1022 Cenicienta (1950) 577

1023 Winnie the Pooh y el Blustery Day (1968) 221

1024 Tres Caballeros, El (1945) 126

1025 Espada en la piedra, The (1963) 293

1026 Así que querido para mi corazón (1949) 8

1027 Robin Hood: Prince of Thieves (1991) 344

1028 Mary Poppins (1964) 1011

1029 Dumbo (1941) 568

103 Inolvidable (1996) 33

1030 Pete''s Dragon (1977) 323

1031 Bedknobs and Broomsticks (1971) 319`


Si mueve int cnt=0; dentro del método de reducción (como la primera declaración de este método), obtendrá los primeros 10 valores para cada clave (supongo que esto es lo que quiere).

De lo contrario, como está ahora, su contador seguirá aumentando y omitirá el 11º valor solamente (independientemente de la clave), continuando con el 12º.

Si desea imprimir solo 10 valores (independientemente de la clave), deje la inicialización cnt donde está, y cambie su condición if (cnt > 10) ... Sin embargo, esta no es una buena práctica, por lo que puede necesita reconsiderar tu algoritmo. (suponiendo que no desea 10 valores aleatorios, ¿cómo sabe qué clave se procesará primero en un entorno distribuido, cuando tiene más de 1 reductores y un particionador hash?)