Programación paralela y distribuida: Proyecto MapReduce

Este proyecto de carácter individual plantea el desarrollo de una aplicación MapReduce en Hadoop que afronta un problema típico a la hora de analizar la información incluida en los logs de accesos de los servidores web: el recuento del número de accesos a cada página de una organización pero sólo teniendo en cuenta los realizados por parte de diferentes usuarios, es decir, que si un determinado usuario accede varias veces a la misma página, sólo se contará como un acceso (si se contarán, evidentemente, los accesos de un mismo usuario a distintas páginas).

Antes de detallar más el proyecto, hay que resaltar los siguientes requisitos y recomendaciones:

Como documentación para este proyecto, se recomienda la consulta de la guía de Introducción a la programación MapReduce en Hadoop utilizada en la asignatura (de hecho, se pueden desarrollar soluciones para este ejercicio con cierta facilidad modificando algunos de los ejemplos incluidos en esta guía).

Entrada de datos

El programa recibirá como entrada uno o más directorios, cada uno de los cuales contendrá uno o más ficheros de log de accesos a servidores web. Estos ficheros tendrán el formato Common Log Format. A la hora de realizar el recuento, se considerá como usuario el primer campo de este formato, es decir, la dirección IP de la máquina cliente que realiza la petición. En cuanto a los accesos a la página, sólo se tendrán en cuenta los correspondientes a operaciones GET, estando el nombre de la página justo a continuación de ese término.

Salida de datos

El programa dejará el resultado en el directorio de salida recibido como argumento usando un formato tal que en cada línea aparecerá el nombre de la página, un tabulador y el recuento de accesos únicos a esa página.

Argumentos adicionales del programa

Además de los directorios de entrada y el de salida, se recibe un argumento que indica una dirección IP que no será tenida en cuenta como cliente a la hora de realizar el recuento (podría usarse, por ejemplo, para eliminar la máquina del administrador en el momento de hacer el recuento).

A continuación, se muestra un ejemplo de cómo se especificarían estos argumentos:

-D excluido=138.100.9.35 input* output
Asimismo, el programa debe gestionar un contador un contador (denominado EXCLUIDOS) que reflejará cuántas entradas han sido excluidas debido al argumento especificado.

Entrega del proyecto

El plazo de entrega del trabajo es el viernes 15 de enero de 2016.

La entrega se realiza en triqui ejecutando el mandato:

    entrega.ppd mapreduce.2015
Este mandato realizará la recolección del fichero mapreduce.tgz del directorio ~/DATSI/PPD/mapreduce.2015. En ese fichero deberá incluir todo el material del proyecto (el código de las soluciones desarrolladas y una breve memoria explicando qué tipo de soluciones ha usado).