/big-pipeline-dataday

Big Data Pipeline workshop code of SG dataday 2017

Primary LanguageShell

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.

Requerimientos

Para el workshop es necesario lo siguiente:

Set Up inicial

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

Iniciar el cluster local

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.

Proyecto

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:

  1. PageRank de páginas
  2. Contenido en texto plano normalizado
  3. Conteo de palabras

Pipelines

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:

pagerank pipeline

textnorm & wordcount

Ejecutar pipeline: PageRank

Después de haber preparado los datos de prueba y tener el cluster local corriendo, ejecutar lo siguinte:

$ make pagerank

Ejecutar pipeline: Text Normalization

$ make textnorm

Ejecutar pipeline: Wordcount

$ make wordcount

Generar Datasets

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/

Clean Up

Para detener el cluster local y limpiar los recursos usados ejecutar:

$ make clean

ToDo (mejoras)

  • Agregar task para eliminar stopwords.
  • Agregar orquestación de pipelines (oozie, azkaban o luigi).
  • Agregar la persistencia (serving layer) al final de los pipelines (por ejemplo hive).
  • Capa de deployment automatizado en la nube (terraform o juju).

Dependencias