0% encontró este documento útil (0 votos)
499 vistas11 páginas

B2.322 20161 Pec2

Este documento describe una tarea práctica (PEC) sobre el procesamiento de grandes cantidades de datos (Big Data) usando el paradigma MapReduce y el framework Apache Spark. La PEC consiste en dos partes: primero, responder preguntas sobre un conjunto de datos usando pseudocódigo MapReduce; segundo, analizar los mismos datos con Apache Spark SQL o Python. El objetivo es familiarizarse con MapReduce, preparación de datos y Apache Spark.

Cargado por

Walter
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
499 vistas11 páginas

B2.322 20161 Pec2

Este documento describe una tarea práctica (PEC) sobre el procesamiento de grandes cantidades de datos (Big Data) usando el paradigma MapReduce y el framework Apache Spark. La PEC consiste en dos partes: primero, responder preguntas sobre un conjunto de datos usando pseudocódigo MapReduce; segundo, analizar los mismos datos con Apache Spark SQL o Python. El objetivo es familiarizarse con MapReduce, preparación de datos y Apache Spark.

Cargado por

Walter
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

B2.322 - Fundamentos y usos de Big Data B1.

781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y


Big Data Estudios de Informatica, Multimedia y Telecomunicacion

PEC2

Presentacion

En esta actividad os enfrentareis al reto de enfocar los problemas utilizando el paradigma MapReduce y
lo pondreis en practica con una de las tecnologas de BigData mas utilizada, Apache Spark.

Competencias

En esta PEC se trabajan las siguientes competencias:

Capacidad para analizar un problema desde el punto de vista de MapReduce.


Capacidad para analizar un problema en el nivel de abstraccion adecuada en cada situacion y aplicar
las habilidades y conocimientos adquiridos para resolverlos.

Objetivos

Los objetivos concretos de esta PEC son:

Conocer y profundizar el paradigma MapReduce.


Familiarizarse con el proceso de preparacion de datos para el analisis.

Familiarizarse con el framework de Apache Spark.


Familiarizarse con Apache Spark SQL y su sintaxis.

1
B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

Descripcion de la PEC a realizar

En esta actividad se pondra en practica el paradigma de MapReduce y trabajareis con una de las tecno-
logas mas utilizadas en Big Data:

Apache Spark

Esta PEC tiene dos partes. Una primera parte teorica sobre MapReduce y sus limitaciones. Y despues,
una segunda parte practica con Apache Spark.

Para la parte practica debeis escoger entre utilizar Apache Spark SQL o Apache Spark Python, uno de
los dos. Para Apache Spark SQL se utilizara un SQL similar al estandar, mientras que para Apache
Spark Python se utilizara el lenguaje de programacion Python. Recomendamos encarecidamente a
los estudiantes que NO sepan programar que se decanten por Apache Spark SQL. A los
estudiantes que sepan programar les recomendamos que se decanten por Apache Spark
Python para tener una toma de contacto con uno de los frameworks mas utilizados de Big Data.
B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

PRIMERA PARTE: El paradigma MapReduce y sus limitaciones

En esta primera parte debeis pensar como solucionar una pregunta concreta sobre unos datos utilizando
MapReduce. Para ello se plantean diferentes preguntas sobre un dataset. Para cada una de las preguntas
debeis escribir el pseudocodigo que da la solucion. Finalmente se cerrara esta primera parte con una(s)
pregunta(s) sobre las posibilidades de MapReduce. Con esto empezareis a ver la dificultad de atacar un
problema con el paradigma MapReduce pero a la vez del potencial que tiene el hacerlo de esta manera
para conseguir resolverlo utilizando el paralelismo.

El dataset sobre el cual se plantean las preguntas corresponde a los datos de los viajes de la compana Uber
de Nueva York entre Enero y Junio de 2015. Este dataset sera tambien el que utilizareis posteriormente
en la parte practica.

El dataset esta organizado de la siguiente manera:

1. Dispatching base num: Codigo de la base de la compana TLC de la que salio el taxi.
2. Pickup date : Fecha y hora de la recogida.
3. Affiliated base num : Codigo de la base de la compana TLC afiliada al taxi.
4. LocationID : Identificador de la localizacion de la recogida.
5. Zone : Zona de la recogida.
6. Borough : Municipio/Barrio de la recogida.

Un ejemplo de los datos es el siguiente:

B02617,2015-05-17 09:47:00,B02617,141,Manhattan,Lenox Hill West


B02617,2015-05-17 09:47:00,B02617,65,Brooklyn,Downtown Brooklyn/MetroTech
B02617,2015-05-17 09:47:00,B02617,100,Manhattan,Garment District
B02617,2015-05-17 09:47:00,B02774,80,Brooklyn,East Williamsburg
B02617,2015-05-17 09:47:00,B02617,90,Manhattan,Flatiron
B02617,2015-05-17 09:47:00,B02617,228,Brooklyn,Sunset Park West
B02617,2015-05-17 09:47:00,B02617,7,Queens,Astoria
B02617,2015-05-17 09:47:00,B02764,74,Manhattan,East Harlem North
B02617,2015-05-17 09:47:00,B02617,249,Manhattan,West Village
B02617,2015-05-17 09:47:00,B02764,22,Brooklyn,Bensonhurst West
B02617,2015-05-17 09:48:00,B02617,263,Manhattan,Yorkville West
B02617,2015-05-17 09:48:00,B02617,61,Brooklyn,Crown Heights North
B02617,2015-05-17 09:49:00,B02617,229,Manhattan,Sutton Place/Turtle Bay North
B02617,2015-05-17 09:49:00,B02617,164,Manhattan,Midtown South
B02617,2015-05-17 09:49:00,B02617,237,Manhattan,Upper East Side South
B02617,2015-05-17 09:49:00,B02617,142,Manhattan,Lincoln Square East
B02617,2015-05-17 09:49:00,B02617,188,Brooklyn,Prospect-Lefferts Gardens
B02617,2015-05-17 09:49:00,B02617,237,Manhattan,Upper East Side South
B02617,2015-05-17 09:49:00,B02617,224,Manhattan,Stuy Town/Peter Cooper Village
B02617,2015-05-17 09:49:00,B02617,238,Manhattan,Upper West Side North
B02617,2015-05-17 09:49:00,B02682,242,Bronx,Van Nest/Morris Park

Las preguntas que se plantean a continuacion preguntan sobre el da con mas recogidas, etc. La salida
(output) del pseudocodigo que deis como respuesta no tiene porque contener directamente la respuesta,
pero si que debe facilitar el poder contestarla utilizando alguna tecnica simple como maximo o ordenacion.
En el ejemplo que se muestra a continuacion entendereis a que nos referimos.

Esta seccion esta cubierta por la pagina de la wiki, Ejemplo MapReduce.


B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

A continuacion se muestra un ejemplo de pregunta y la respuesta que se espera con el dataset presentado.

Cual es el Dispatching base num mas activa?

Nota: Las lneas que empiezan por // son explicativas, comentarios, y no afectan a la ejecucion.

Map(String key, String value):


// key: nombre del documento
// value: contenido del documento

valuesplit := value.separar por coma()


// valuesplit es una lista con cada elemento
// valuesplit[0] corresponde a Dispatching base num
// valuesplit[1] corresponde a Pikcup date
// ...
EmitIntermediate(valuesplit[0], 1);

Reduce(String key, Iterator values):


// key: Corresponde al primer parametro de EmitIntermediate
// values: una lista de ocurrencias

int result = 0;
for each v in values:
result += 1;

// Vamos a emitir una tupla donde el primer valor sera el Dispatching base num
// El segundo valor sera la cantidad de veces que ha aparecido
Emit( (key, AsString(result) ) );

Un ejemplo del resultado de esta ejecucion sera:


(B02512, 18645)
(B02598, 2384)
(B02617, 9344)
(B02682, 32574)
(B02764, 87565)
(B02765, 98547)
(B02835, 89736)
(B02836, 10485)

Esto es lo que se espera para cada una de las siguientes preguntas. Como podeis observar no hemos dado
el resultado de cual es el Dispatching base num con mas viajes, ni el pseudocodigo para obtenerlo. Esa
parte no es necesaria para esta primera parte teorica.
B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

INSTRUCCIONES

Para realizar la primera parte debeis entender como funciona el paradigma MapReduce. Cual es la entrada
de la fase Map y que debe salir de ella. Debeis saber que despues se realiza una parte shuffling y sorting.
Y finalmente cual es la entrada de cada Reduce, que operacion se lleva a cabo y que salida tiene.

Para averiguar todo esto debeis leer la documentacion del modulo 2 que os hemos provisto y despues
seguir con la wiki, hacer clic aqu. Una vez esteis seguros de que entendeis MapReduce estudiar el ejemplo
anterior hasta comprender que se hace en el Map y porque, y que se hace en el Reduce y porque.

Una vez tengais el ejemplo muy claro debeis tomar el ejemplo como si fuera una plantilla para contestar
a las preguntas que teneis a continuacion. De hecho podeis copiar y pegar ese ejemplo y adaptarlo para
llevar a cabo el objetivo de cada ejercicio.

Dado que el pseudocodigo es nuevo para la mayora de vosotros debeis saber que este textono se
ejecuta. As pues, unicamente escribir este codigo en un editor de texto (word o cualquier otro de vuestra
preferencia).

Como obtener la hora y minutos de un campo de fecha: Supongamos que valuesplit[1] contiene
la fecha, podemos hacer lo siguiente: hhmm := valuesplit[1].hora y minutos().

Como obtener la hora de un campo de fecha: Supongamos que valuesplit[1] contiene la fecha,
podemos hacer lo siguiente: hhmm := valuesplit[1].hora().

Como obtener el da de la semana de un campo fecha: Supongamos que valuesplit[1] contiene la


fecha, podemos hacer lo siguiente: ds := valuesplit[1].dayofweek().

Como recorro varios elementos de un array como el de valuesde la fase Reduce: Tal y
como se muestra en el ejemplo del enunciado, for each element in values: operacion sobre el
elemento. Por ejemplo si queremos sumarlos y guardar el resultado en la variable result, for each
element in values: result += 1.

Como creo las tuplas del resultado de la fase de Map: Para crear las tuplas del Map utiliza
EmitIntermediate(A, B) donde A es la clave y B el valor.

Como produzco los resultados de la fase de Reduce: Cuando necesites enviar valores al resultado
del Reduce utiliza el Emit(A) donde A es un numero, una palabra, una tupla, etc. lo que quieras como
resultado de la fase Reduce.

Como puedo filtrar: Cuando necesites filtrar en la fase de Map utiliza if CONDICION then: Emi-
tIntermediate... donde CONDICION es la condicion que quieres que se cumpla para emitir los valores.
Por ejemplo, si quieres filtrar por los das que son miercoles: if valuesplit[1].weekday() = 3 then:
EmitIntermediate(...), ponemos = 3 porque el 3 corresponde al miercoles.
B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

Ejercicio 1 (1p). Cual es la hora y minuto con mas recogidas?

Ejercicio 2 (1p). Cual es el Borought con mas recogidas durante los siete primeros das del mes?

Ejercicio 3 (1p). Cual es el da de la semana con mas recogidas?

Ejercicio 4 (1p). Que hora del da es la mas activa para la zona de Brooklyn?

Ejercicio 5 (1p). Formula una pregunta sobre el dataset mostrado que no se podra contestar utilizando
MapReduce pero s con otra metodologa/paradigma.
B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

SEGUNDA PARTE: Apache Spark SQL y Apache Spark Python

En esta parte debeis escoger UNICAMENTE una practica entre:

Apache Spark SQL


Apache Spark Python

Para llevar a cabo los ejercicios utilizaremos la plataforma cloud DataBricks. DataBricks provee de clusters
para ejecutar trabajos de Apache Spark. Los clusters estan en Amazon Web Services (AWS). Normalmente
enlazariamos nuestra cuenta de AWS a nuestro usuario de DataBricks y podramos empezar a trabajar.
Para esa practica utilizaremos la Community Edition de DataBricks la cual es totalmente gratuita y nos
aporta un cluster de 6GB, suficiente para realizar la practica.

Vamos a utilizar uno de los frameworks mas populares de Big Data de hoy en da. Con estos ejercicios os
enfrentareis a las peculiaridades de esta tecnologa y aprendereis como funciona para conseguir resolver
grandes problemas de manera distribuida.

Preparacion del set-up

Primero de todo, utilizando el navegador, os debeis dirigir a https://databricks.com/try-databricks y


debajo de COMMUNITY EDITION hacer clic en el boton START TODAY. Sobretodo no confundiros
con el FULL-PLATFORM TRIAL. Rellenar el formulario que aparecera. Una vez finalizado el registro
entrar a vuestra cuenta de DataBricks Community Edition.

Una vez dentro ya podemos empezar a utilizar la plataforma. Podeis familiarizaros con el menu de la
izquierda. Para daros una idea general, ofrece las siguientes funcionalidades:

Databricks: Es la pagina de bienvenida, teneis acceso directo a las demas secciones y tambien a la
documentacion.
Home: Despliega una seccion lateral que accede a la carpeta de vuestro usuario. Aqu podeis poner
nuevos ficheros.
Workspace: Despliega una seccion lateral con acceso a: Documentacion, Notas de la ultima version,
Tutoriales, etc.
Recent: Muestra los elementos a los que se ha accedido recientemente.

Tables: Despliega una seccion lateral desde la que podeis crear nuevas tablas y consultar las exis-
tentes.
Clusters: Desde este menu podeis manejar vuestros clusters y crear nuevos.
Jobs: Esta seccion no esta disponible para la version Community. Se utiliza para ejecutar notebooks
bajo demanda o programar la ejecucion para una hora determinada.
Search: Abre el menu de busqueda.

De todas estas opciones utilizaremos sobretodo la de Home y Tables. Podeis explorar las diferentes menus
para familiarizaros con ellos.

Instrucciones para obtener los enunciados

Debeis descargar del aula el notebook que hayais elegido. Los enunciados de esta parte los importareis
desde databricks. Debeis escoger uno de los dos como hemos mencionado anteriormente. Para importarlo
B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

debeis hacer clic en el menu lateral workspace, seleccionar la flecha al lado del nombre Workspace, y
hacer clic en Importar. Seleccionar File en el menu que se despliega y seleccionar el notebook descargado.
Si teneis dudas aqu hay instrucciones sobre como hacerlo y una imagen animada que muestra el proceso
https://docs.databricks.com/user-guide/notebooks/index.html#importing-notebooks.

Una vez lo hayais importado, hacer clic en el nuevo elemento que aparecera dentro del workspace para
abrir el notebook. Seguir las instrucciones que apareceran en el.

En la siguiente pagina hay una gua para la parte de Apache Spark SQL.
B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

Gua Apache Spark SQL

A continuacion os pongo un ejemplo con unos archivos de empleados y departamentos.

El archivo employees2015.csv tiene los siguientes campos:

EmployeeID: Es de tipo numerico e identifica el empleado


Name: Es de tipo cadena de caracteres (string) e indica el nombre del empleado
Salary: Es de tipo numerico e identifica el salario del empleado

DepartmentID: Es de tipo numerico e identifica el ID del departamento para el que trabaja el


empleado

El archivo departments2015.csv tiene los siguientes campos:

DepartmentID: Es de tipo numerico e identifica el departamento


Name: Es de tipo cadena de caracteres (string) e indica el nombre del departamento

Suponer que hemos cargado estos archivos en DataBricks siguiendo el procedimiento explicado en el
Notebook.

Para comprobar que las tablas se han creado correctamente vamos a listar 5 filas de cada tabla.
select * from employees limit 5;, si muestra 5 filas de datos como los del archivo significa que hemos
creado la tabla employees correctamente.
select * from departments limit 5;, si muestra 5 filas de datos como los del archivo significa que
hemos creado la tabla departments correctamente.

Lo proximo que haremos sera crear una tabla con la union de estas dos para despues llevar a cabo nuestro
analisis sobre ella.

CREATE TABLE company (EmployeeID INT, EmployeeName STRING, Salary INT, De-
partmentID INT, DepartmentName STRING)
AS select e.EmployeeID, e.Name as EmployeeName, e.Salary, d.DepartmentID, d.Name as
DepartmentName
from Emloyees e INNER JOIN Departments d
ON e.DepartmentID = d.DepartmentID;

Comentarios sobre como hemos creado la tabla anterior:

Los campos numericos son de tipo INT, los campos de cadenas de caracteres son de tipo STRING
Despues del AS anadimos la consulta SQL con informacion que cargaremos en la tabla.
Hemos realizado la union de ambas tablas utilizando una INNER JOIN. Esto quiere decir que
para cada empleado debe existir su departamento o no aparecera en el resultado.
Donde pone ON especificamos la condicion de la union. En este caso juntamos los empleados y los
departamentos por el campo DepartmentID. En vuestra practica utilizareis el campo locationID.

Para comprobar que la tabla se ha cargado correctamente podemos lanzar la siguiente consulta:
select * from company limit 5;, si muestra 5 filas de datos como los del archivo significa que hemos
creado la tabla company correctamente.
B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

En vuestro caso podeis comprobar cada una de las tablas con los siguientes comandos una vez las hayais
creado:

select * from uber simple limit 5;

select * from locations limit 5;


select * from uber limit 5;

Vamos a realizar un analisis sencillo como por ejemplo cuantos empleados tenemos para cada departa-
mento:

select DepartmentName, count(*) as EmployeeCount from uber group by DepartmentNa-


me;

Mostrar los 3 departamentos con mas empleados:

select DepartmentName, count(*) as EmployeeCount from uber group by DepartmentName


order by count(*) limit 3;

Mostrar los empleados del departamento RRHH:

select EmployeeName from departments where DepartmentName = RRHH;

Para ayudaros con las funciones de tiempo os dejo algunas pistas:

El tipo para las fechas es TIMESTAMP.


Extraer el da de la semana de una fecha: select date format(campoFecha, EEEE) from tabla;,
remplazar campoFecha por vuestra columna de formato TIMESTAMP.
Extraer la hora del da de una fecha: select hour(campoFecha) from tabla;
Extraer el da del mes de una fecha: select day(campoFecha) from tabla;
B2.322 - Fundamentos y usos de Big Data B1.781 - Gestion de Big Data PEC2 2016-1 Programa de Business Intelligence y
Big Data Estudios de Informatica, Multimedia y Telecomunicacion

Recursos

Recursos Basicos
Modulo didactico 2. Fundamentos de Big Data (parte 2).pdf

Modulo didactico 2.2.0. Hadoop


Modulo didactico 2.2.1 Apache Spark
Modulo didactico 2.3 MapReduce

Recursos Complementarios
Wiki. Tecnologas de Big Data
Hadoop Common
Comandos HDFS

Hive DDL
Hive DML
Spark Programming Guide

Criterios de valoracion
La PEC se tiene que resolver de forma individual.
Es necesario mostrar todos los comandos y sentencias para cada pregunta.
Se valorara tanto el resultado final como el procedimiento.

Formato y fecha de entrega

La entrega consiste en un documento PDF para los ejercicios de la primera parte. El nombre del
fichero tiene que ser: PEC2-Apellido1Apellido2Nombre-MapReduce.pdf. Y un segundo archivo,el
notebook, con las respuestas de todos los ejercicios de la segunda parte. El nombre del fichero tiene que
ser: PEC2-Apellido1Apellido2Nombre-ApacheSparkSQL.DBC, si habeis escogido Apache Spark
SQL, o PEC2-Apellido1Apellido2Nombre-ApacheSparkPython.DBC, si habeis escogido Apache
Spark Python.

No se aceptaran entregas fuera de plazo.

También podría gustarte