¿Cómo ejecutar el programa de conteo de caracteres en MapReduce Hadoop?

Requisitos previos: Hadoop y MapReduce

Configuración requerida para completar la siguiente tarea.

  1. Instalación Java
  2. instalación de hadoop 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *