El programa MapReduce cuenta la cantidad de UV

UV (Unique Visitor) es un visitante independiente que cuenta el número de usuarios que visitan un sitio en un día (basado en cookies); un cliente de computadora que accede al sitio web es un visitante. Se puede entender como la cantidad de computadoras que acceden a un sitio web. El sitio web juzga la identidad de la computadora visitante a través de las cookies de la computadora visitante. Si cambia la IP pero no borra las cookies y luego visita el mismo sitio web, el número de UV en las estadísticas del sitio web no cambia. Si el usuario no guarda el acceso a las cookies, borra las cookies o cambia el acceso al dispositivo, el recuento aumentará en 1. El mismo cliente múltiples visitas entre 00: 00-24: 00 solo contará como 1 visitante.

Un archivo de clase webLogUVMapper de escritura

paquete com.huadian.webloguvs;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

WebLogUVMapper de clase pública extiende Mapper <LongWritable, Text, Text, Text> {

    texto privado outputKey = new Text ();
    texto privado outputValue = new Text ();
    @Anular
    el mapa vacío protegido (clave LongWritable, valor de texto, contexto de contexto) genera IOException, InterruptedException {
       // Divide cada línea de contenido,
        Línea de cadena = value.toString ();
        Cadena [] elementos = line.split ("\ t");

        / **
         * (1) Uno tiene 36 campos. Si la longitud de la matriz es inferior a 36 después de la división, estos datos son datos sucios y se pueden descartar
         * (2) Si la URL está vacía, el registro descarta el subíndice 1, "", nulo, "nulo"
         * Ciudad subíndice 23
         * Salida (Id. De ciudad, 1)
         * /
        if (items.length> = 36) {
            if (StringUtils.isBlank (elementos [5])) {
                regreso;
            }
            outputKey.set (elementos [24]);
            outputValue.set (ítems [5]);
            context.write (outputKey, outputValue);

        } más {
            regreso;
        }
    }
}

Dos archivos de clase de escritura WebLogUVMapReduce

paquete com.huadian.webloguvs;

importar org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
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.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;


WebLogUVMapReduce de clase pública extiende la herramienta de implementos configurados {
    @Anular
    public int run (String [] args) lanza Exception {

        // 2, crea un trabajo
        Trabajo trabajo = Job.getInstance (this.getConf (), "WebLogUVMapReduce");
        // Establecer la clase principal de operación de trabajo
        job.setJarByClass (WebLogUVMapReduce.class);

        // Establecer trabajo
        // una entrada 、
        Ruta inputPath = nueva Ruta (args [0]);
        FileInputFormat.setInputPaths (trabajo, inputPath);

        // b 、 mapa
        job.setMapperClass (WebLogUVMapper.class);
        job.setMapOutputKeyClass (Text.class);
        job.setMapOutputValueClass (Text.class);

        job.setNumReduceTasks (2);

        // c 、 reducir
        job.setReducerClass (WebLogUVReducer.class);
        job.setOutputKeyClass (Text.class);
        job.setOutputValueClass (Text.class);

        // d 、 salida
        Ruta outputPath = nueva ruta (args [1]);

        // Si el directorio de salida existe, elimínelo primero
        FileSystem hdfs = FileSystem.get (this.getConf ());
        if (hdfs.exists (outputPath)) {
            hdfs.delete (outputPath, true);
        }
        FileOutputFormat.setOutputPath (job, outputPath);

        // El cuarto paso, envía el trabajo
        boolean isSuccess = job.waitForCompletion (true);

        return isSuccess? 0: 1;
    }


    public static void main (String [] args) {
        Configuración de la configuración = nueva Configuración ();
        /// public static int run (configuración conf, herramienta herramienta, cadena [] args)
        tratar {
           int status = ToolRunner.run (configuración, nuevo WebLogUVMapReduce (), args);
           System.exit (estado);
        } catch (Excepción e) {
            e.printStackTrace ();
        }
    }
}

Tres archivos de clase de escritura WebLogUVReducer

paquete com.huadian.webloguvs;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
importe java.util.Set;


WebLogUVReducer de clase pública extiende Reducer <Texto, Texto, Texto, Texto> {
    texto privado outputValue = new Text ();
    @Anular
    reducción nula protegida (clave de texto, valores <texto> Iterable, contexto de contexto) produce InterruptedException, IOException {
       // clave : 城市 ; valor : <guid1, guid1, guid2, guid3>
        Establecer <Texto> conjunto = nuevo HashSet <Texto> ();
        para (Valor de texto: valores) {
            set.add(value);
        }
        /*Iterator<Text> iterator = set.iterator();
        Text text = null;
        while (iterator.hasNext()){
            text = iterator.next();
        }*/
        outputValue.set(String.valueOf(set.size()));
        context.write( key,outputValue );
    }
}

 

发布了105 篇原创文章 · 获赞 536 · 访问量 7万+

Supongo que te gusta

Origin blog.csdn.net/qq_41934990/article/details/81610607
Recomendado
Clasificación