Hadoop 2.6.0: idea Intellij combinada con Maven para ejecutar el programa MapReduce localmente (sin el entorno Hadoop y HDFS)

Medio ambiente

  1. JDK 1.8
  2. Intellij Idea 2018.1
  3. Hadoop 2.6.0 (Hadoop no está instalado localmente)
  4. maven 3.5.4

 Crear proyecto de conteo de palabras

  1.  Cree un nuevo proyecto maven java en idea (configure maven jdk ligeramente)

 

Configurar dependencias de pom 

 

  1.  archivo pom.xml
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>2.6.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
                <version>2.6.0</version>
            </dependency>
    
            <dependency>
                <groupId>commons-cli</groupId>
                <artifactId>commons-cli</artifactId>
                <version>1.2</version>
            </dependency>
    
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
    
        </dependencies>

     

  2. Crear clase de asignador

    package com.lens.task;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Mapper;
    
    import java.io.IOException;
    import java.util.StringTokenizer;
    
    /**
     * @author lens
     * @create 2020-02-25 10:24
     */
    public class VoteCountMapper extends Mapper<Object, Text, Text, IntWritable> {
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();
    
        @Override
        protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
            StringTokenizer words = new StringTokenizer(value.toString());
            while (words.hasMoreTokens()) {
                word.set(words.nextToken());
                context.write(word, one);
            }
        }
    }
    

     

  3. Crear clase reductora

    package com.lens.task;
    
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Reducer;
    
    import java.io.IOException;
    
    /**
     * @author lens
     * @create 2020-02-25 10:24
     */
    public class VoteCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();
    
    
        public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            int count = 0;
    
            for (IntWritable value : values) {
                count += value.get();
            }
            result.set(count);
            context.write(key, result);
    
        }
    }
    

     

  4. Crear clase de controlador voteCount

    package com.lens.task;
    
    import org.apache.hadoop.conf.Configuration;
    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.mapreduce.Job;
    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.Tool;
    import org.apache.hadoop.util.ToolRunner;
    
    
    /**
     * @author lens
     * @create 2020-02-25 10:22
     */
    public class VoteCount extends Configured implements Tool {
        public static void main(String[] args) throws Exception {
            int res = ToolRunner.run(new Configuration(),new VoteCount(),args);
            System.exit(res);
        }
    
    
        public int run(String[] args) throws Exception {
            if (args.length !=2){
                System.out.println("Incorrect input, expected: [input] [output]");
                System.exit(-1);
            }
    
            Configuration conf = this.getConf();
            Job job = new Job(conf, "word count");
            job.setJarByClass(VoteCount.class);
    
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(Text.class);
    
            job.setMapperClass(VoteCountMapper.class);
            job.setReducerClass(VoteCountReducer.class);
    
            job.setInputFormatClass(TextInputFormat.class);
            job.setOutputValueClass(TextOutputFormat.class);
    
            job.setMapOutputKeyClass(Text.class);
            job.setOutputValueClass(IntWritable.class);
    
            FileInputFormat.setInputPaths(job, new Path(args[0]));
            FileOutputFormat.setOutputPath(job, new Path(args[1]));
    
            job.submit();
            return job.waitForCompletion(true) ? 0 : 1;
        }
    }
    

    Nota: Aquí el formato de archivo debe importar el paquete en lib

 5. Crear entrada de directorio de entrada de archivo de recuento de palabras. Se cuentan los caracteres del archivo y se genera el resultado del recuento.

Primero, debe configurar la ruta de entrada. Aquí src, cree una nueva carpeta debajo del proyecto (el directorio en el mismo nivel) inputy agregue uno o más archivos de texto input(cargados) como ejemplo.

需要注意:File-> Project Structure, Seleccione Moduleselementos en el cuadro de diálogo emergente , aquí la inputcarpeta está marcada comoExcluded .

 

 Configurar parámetros operativos

Aquí debe configurar la ruta de entrada entrada salida salida requerida por la clase Main y VoteCount cuando el programa se está ejecutando.

Seleccione- Run> en la barra de menú de Intellij Edit Configurationsy haga clic en el cuadro de diálogo que aparece para  +crear una nueva Applicationconfiguración. Configure Main classcomo recuento de votos (puede hacer clic en la ...selección de la derecha ), Program argumentses decir input/ output/, la ruta de entrada es la inputcarpeta creada y la salida esoutput(可以不配)

 

Corriendo

Una vez completada la configuración, haga clic en la barra de menú- Run> Run 'VoteCount'para comenzar a ejecutar el programa MapReduce. Una vez completado el programa, aparecerá una carpeta en la esquina superior izquierda output, ¡y part-r-00000el resultado es la operación!

Archivo de entrada

Resultado de la operación

Publicado 4 artículos originales · Me gusta1 · Visitas 196

Supongo que te gusta

Origin blog.csdn.net/weixin_40983094/article/details/104496282
Recomendado
Clasificación