Requisitos previos: Hadoop y MapReduce
Configuración requerida para completar la siguiente tarea.
Nuestra tarea es contar la frecuencia de cada carácter presente en nuestro archivo de entrada. Estamos usando Java para implementar este escenario en particular. Sin embargo, el programa MapReduce también se puede escribir en Python o C++. Ejecute los pasos a continuación para completar la tarea de encontrar la aparición de cada carácter.
Ejemplo:
Aporte
GeeksforGeeks
Producción
F 1 G 2 e 4 k 2 o 1 r 1 s 2
Paso 1: Primero abra Eclipse -> luego seleccione Archivo -> Nuevo -> Proyecto Java -> Nómbrelo CharCount -> luego seleccione usar un entorno de ejecución -> elija JavaSE-1.8 luego siguiente -> Finalizar .
Paso 2: Cree tres clases de Java en el proyecto. Nómbrelos CharCountDriver (que tiene la función principal), CharCountMapper , CharCountReducer.
Código de mapeador: debe copiar y pegar este programa en el archivo CharCountMapper Java Class.
Java
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 CharCountMapper extends MapReduceBase implements Mapper<LongWritable,Text,Text,IntWritable>{ public void map(LongWritable key, Text value,OutputCollector<Text,IntWritable> output, Reporter reporter) throws IOException{ String line = value.toString(); String tokenizer[] = line.split(""); for(String SingleChar : tokenizer) { Text charKey = new Text(SingleChar); IntWritable One = new IntWritable(1); output.collect(charKey, One); } } }
Código reductor: debe copiar y pegar este programa a continuación en el archivo CharCountReducer Java Class.
Java
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 CharCountReducer extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0; while (values.hasNext()) { sum += values.next().get(); } output.collect(key, new IntWritable(sum)); } }
Código del controlador: debe copiar y pegar este programa a continuación en el archivo CharCountDriver Java Class.
Java
import java.io.IOException; 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.mapred.TextInputFormat; import org.apache.hadoop.mapred.TextOutputFormat; public class CharCountDriver { public static void main(String[] args) throws IOException { JobConf conf = new JobConf(CharCountDriver.class); conf.setJobName("CharCount"); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); conf.setMapperClass(CharCountMapper.class); conf.setCombinerClass(CharCountReducer.class); conf.setReducerClass(CharCountReducer.class); conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); } }
Paso 3: Ahora necesitamos agregar un jar externo para los paquetes que hemos importado. Descargue el paquete jar Hadoop Common y Hadoop MapReduce Core según su versión de Hadoop. Puede verificar la versión de Hadoop con el siguiente comando:
hadoop version
Paso 4: ahora agregamos estos frascos externos a nuestro proyecto CharCount . Haga clic derecho en CharCount -> luego seleccione Build Path -> Haga clic en Configure Build Path y seleccione Add External jars …. y agregue frascos desde su ubicación de descarga, luego haga clic en -> Aplicar y cerrar .
Paso 5: Ahora exporte el proyecto como un archivo jar. Haga clic con el botón derecho en CharCount , elija Exportar … y vaya a Java -> Archivo JAR, haga clic en -> Siguiente y elija su destino de exportación, luego haga clic en -> Siguiente . Elija Clase principal como CharCount haciendo clic en -> Examinar y luego haga clic en -> Finalizar -> Aceptar .
Ahora el archivo Jar se crea y guarda con éxito en el directorio / Documentos con el nombre charectercount.jar en mi caso.
Paso 6: Cree un archivo de texto simple y agréguele algunos datos.
nano test.txt
También puede agregar texto al archivo manualmente o usando algún otro editor como Vim o gedit.
Para ver el contenido del archivo, use el comando cat disponible en Linux.
cat test.txt
Paso 7: Inicie nuestros Hadoop Daemons
start-dfs.sh
start-yarn.sh
Paso 8: Mueva su archivo test.txt a Hadoop HDFS.
Sintaxis:
hdfs dfs -put /file_path /destination
En el siguiente comando / muestra el directorio raíz de nuestro HDFS.
hdfs dfs -put /home/dikshant/Documents/test.txt /
Verifique que el archivo esté presente en el directorio raíz de HDFS o no.
hdfs dfs -ls /
Paso 9: Ahora ejecute su archivo Jar con el siguiente comando y produzca el resultado en el archivo CharCountResult .
Sintaxis:
hadoop jar /jar_file_location /dataset_location_in_HDFS /output-file_name
Dominio:
hadoop jar /home/dikshant/Documents/charectercount.jar /test.txt /CharCountResult
Paso 10: Ahora muévase a localhost:50070/ , en utilidades, seleccione Examinar el sistema de archivos y descargue part-r-00000 en el directorio /CharCountResult para ver el resultado. También podemos verificar el resultado, es decir, ese archivo part-r-00000 con el comando cat como se muestra a continuación.
hdfs dfs -cat /CharCountResult/part-00000
Publicación traducida automáticamente
Artículo escrito por dikshantmalidev y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA