Requisitos previos: Hadoop y MapReduce
Contar el número de pares e impares y encontrar su suma en cualquier idioma es pan comido como en C, C++, Python, Java, etc. MapReduce también usa Java para escribir el programa, pero es muy fácil si conoce la sintaxis. como escribirlo Es el básico de MapReduce. Primero aprenderá cómo ejecutar este código similar al programa «Hello World» en otros lenguajes de programación. Aquí están los pasos que muestran cómo escribir un código de MapReduce para contar y sumar números pares e impares.
Ejemplo:
Entrada:
1 2 3 4 5 6 7 8 9
Producción:
Even 20 // sum of even numbers Even 4 // count of even numbers Odd 25 // sum of odd numbers Odd 5 // count of odd numbers
Pasos:
- Primero abra Eclipse -> luego seleccione Archivo -> Nuevo -> Proyecto Java -> Nómbrelo EvenOdd -> luego Finalizar .
- class=”alignnone size-full wp-image-1045790″ />
- Cree tres clases de Java en el proyecto. Nómbrelos EODriver (que tiene la función principal), EOMapper , EOReducer .
- Debe incluir dos bibliotecas de referencia para eso:
haga clic con el botón derecho en Proyecto -> luego seleccione Ruta de compilación -> Haga clic en Configurar ruta de compilación
- En la figura anterior, puede ver la opción Agregar JAR externos en el lado derecho. Haga clic en él y agregue los archivos de mención a continuación. Puede encontrar estos archivos en /usr/lib/
1. /usr/lib/hadoop-0.20-mapreduce/hadoop-core-2.6.0-mr1-cdh5.13.0.jar
2. /usr/lib/hadoop/hadoop- común-2.6.0-cdh5.13.0.jar
Código Mapper: Tienes que copiar y pegar este programa en el archivo EOMapper Java Class.
Java
// Importing libraries import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.MapReduceBase; import org.apache.hadoop.mapred.Mapper; import org.apache.hadoop.mapred.OutputCollector; import org.apache.hadoop.mapred.Reporter; public class EOMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { @Override // Map function public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter rep) throws IOException { // Splitting the line into spaces String data[] = value.toString().split(" "); for (String num : data) { int number = Integer.parseInt(num); if (number % 2 == 1) { // For Odd Numbers output.collect(new Text("ODD"), new IntWritable(number)); } else { // For Even Numbers output.collect(new Text("EVEN"), new IntWritable(number)); } } } }
Código reductor: debe copiar y pegar este programa en el archivo EOReducer Java Class.
Java
// Importing libraries import java.io.IOException; import java.util.Iterator; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.MapReduceBase; import org.apache.hadoop.mapred.OutputCollector; import org.apache.hadoop.mapred.Reducer; import org.apache.hadoop.mapred.Reporter; public class EOReducer extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { @Override // Reduce Function public void reduce(Text key, Iterator<IntWritable> value, OutputCollector<Text, IntWritable> output, Reporter rep) throws IOException { // For finding sum and count of even and odd // you don't have to take different variables int sum = 0, count = 0; if (key.equals("ODD")) { while (value.hasNext()) { IntWritable i = value.next(); // Finding sum and count of ODD Numbers sum += i.get(); count++; } } else { while (value.hasNext()) { IntWritable i = value.next(); // Finding sum and count of EVEN Numbers sum += i.get(); count++; } } // First sum then count is printed output.collect(key, new IntWritable(sum)); output.collect(key, new IntWritable(count)); } }
Código del controlador: debe copiar y pegar este programa en el archivo EODriver Java Class.
Java
// Importing libraries import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapred.FileInputFormat; import org.apache.hadoop.mapred.FileOutputFormat; import org.apache.hadoop.mapred.JobClient; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; public class EODriver extends Configured implements Tool { @Override public int run(String[] args) throws Exception { if (args.length < 2) { System.out.println("Please enter valid arguments"); return -1; } JobConf conf = new JobConf(EODriver.class); FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); conf.setMapperClass(EOMapper.class); conf.setReducerClass(EOReducer.class); conf.setMapOutputKeyClass(Text.class); conf.setMapOutputValueClass(IntWritable.class); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); JobClient.runJob(conf); return 0; } // Main Method public static void main(String args[]) throws Exception { int exitcode = ToolRunner.run(new EODriver(), args); System.out.println(exitcode); } }
- Ahora tienes que hacer un archivo jar. Haga clic con el botón derecho en Proyecto -> Haga clic en Exportar -> Seleccione el destino de exportación como Archivo Jar -> Asigne un nombre al archivo jar (EvenOdd.jar) -> Haga clic en Siguiente -> por último , haga clic en Finalizar . Ahora copie este archivo en el directorio Workspace de Cloudera
- Abra la terminal en CDH y cambie el directorio al espacio de trabajo. Puede hacer esto usando el comando «cd workspace/». Ahora, cree un archivo de texto ( EOFile.txt ) y muévalo a HDFS. Para ese terminal abierto y escriba este código (recuerde que debe estar en el mismo directorio que el archivo jar que acaba de crear).
- Ahora, ejecute este comando para copiar el archivo de entrada del archivo en el HDFS.
hadoop fs -put EOFile.txt EOFile.txt
- Ahora para ejecutar el archivo jar usando la siguiente sintaxis: «hadoop jar JarFilename DriverClassName TextFileName OutPutFolderName»
- Después de ejecutar el código, puede ver el resultado en el archivo EOOutput o escribiendo el siguiente comando en la terminal.
hadoop fs -cat EOOutput/part-00000
Publicación traducida automáticamente
Artículo escrito por Ankit_Bisht y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA