Big Data Pipeline Workshop del Dataday 2017
En este workshop se mostrarán algunos aspectos claves durante el diseño/implementación de un Data Pipeline con un proyecto sencillo.
Para el workshop es necesario lo siguiente:
- Sistema Operativo OSX o Linux
- docker-engine
- docker-compose cli
- aws cli
- make (command line developer tools en OSX o gnu make en Linux).
Teniendo instalados los requerimientos, crear las imagenes base de docker. Para ello ejecutar desde el root del proyecto:
$ make build
Posteriormente, descargar los datos de prueba desde S3:
$ make data
Para ejecutar los pipelines es necesario iniciar el cluster de hadoop localmente (en docker) y copiar los datos de prueba a hdfs:
$ make start
Copiar los datos de prueba a hdfs local:
$ make copy
Nota: Si sale el siguiente error:
Copying sample data to hdfs...
mkdir: Cannot create directory /app/data. Name node is in safe mode.
make: *** [.copied] Error 1
Es porque el cluster no había terminado de arrancar cuando se intentó copiar datos a hdfs. En dicho caso volver a ejecutar make copy anterior.
Supongamos que el equipo de Data Science está investigando la forma de automatizar el etiquetado de documentos para evitar los errores humanos causados, principalmente, por el sesgo de editores. Para lo cual requieren la generación de los siguientes datasets a partir de una muestra de páginas web:
- PageRank de páginas
- Contenido en texto plano normalizado
- Conteo de palabras
La generación de estos datasets se puede dividir en los siguientes pipelines, ya que solo 3) es dependiente de la salida de 2), mientras que 1) es independiente:
Después de haber preparado los datos de prueba y tener el cluster local corriendo, ejecutar lo siguinte:
$ make pagerank
$ make textnorm
$ make wordcount
Para generar los datasets requeridos por el equipo de DS, copiar desde hdfs a una ruta local. Para ello se puede usar el contenedor client de la siguiente forma:
$ make client
Lo anterior debió abrir una sesión dentro de un hadoop-client para poder ejecutar comandos hacia el cluster local:
root@9c9167bdd8f9:/app# hadoop fs -get /app/pagerank output/
root@9c9167bdd8f9:/app# hadoop fs -get /app/textnorm output/
root@9c9167bdd8f9:/app# hadoop fs -get /app/wordcount output/
Nota: el string 9c9167bdd8f9 es el id del contenedor. Para salir de la sesión presionar ctrl+d
Los resultados de los pipelines se deben encontrar en la carpeta output/
Para detener el cluster local y limpiar los recursos usados ejecutar:
$ make clean