BIG DATA — Construcción de un Clúster Multinodo en Apache Spark&Hadoop consumido por Pyspark, Flask y visualizado en AngularJS

Freddy Abad L.
12 min readJun 9, 2021
Big Data normalmente se asocia únicamente al tamaño de la data, pero es muchas que eso, incluye el volumen, velocidad, variedad, valor y veracidad de los datos y los sistemas que se crean para gestionarlos. [Fuente Imagen: edsrobotics.com]

Este artículo detalla la construcción de un software orientado a la Big Data (http://bit.ly/3rIndZj). Este fue construido por: Freddy Abad, Moisés Arévalo, Jonnathan Campoberde, Miguel Macías.

El repositorio del proyecto se encuentra en: http://bit.ly/3kB7TuB

Previa la lectura de este artículo, puedes revisar el fundamento teórico en este link en este link.

La implementación de este clúster inicio tratando y analizando los datos de los aeropuertos de EEUU. Estos fueron cargados en un clúster multinodo mediante Apache Spark y su interfaz Pyspark. La configuración de Apache Spark se consolidó sobre Apache Hadoop, permitiendo la distribución de carga de consulta mediante su HDFS o gestor de archivos y una comunicación a través de una VPN. Esta arquitectura permite tener 3 capas de transparencia para un sistema orientado a Big Data. La interfaz Pyspark está implementada en un servidor backend de Flask, una tecnología actual, que reduce los tiempos de desarrollo de APIs. Este backend se comunica con una aplicación web en el Frontend con un enfoque SPA sobre el framework web AngularJS de Javascript. La arquitectura propuesta en este informe está definida de tal manera que pueda ser replicable y escalable.

Objetivos

● Implementar un sistema web que consuma los datos desde un clúster multinodo soportado en Apache Spark sobre Apache Hadoop, distribuyendo la carga entre múltiples nodos del clúster a través de una arquitectura lambda.

● Configurar un cluster multinodo sobre Apache Hadoop y realizar consultas sobre Apache Spark.

● Configurar una arquitectura lambda para la correcta consulta distribuida de un dataset.

● Implementar una aplicación web que realice diversas consultas a resolver y que permitan inferir conocimiento sobre el dataset seleccionado.

Conceptos Importantes

Toda el marco teórico que te ayudará a entender este artículo lo detallo en este link.

Metodología

Las herramientas a utilizar en este proyecto son:

● Angular JS v5.2.4

● Pyspark v3.0.2

● Apache Spark v3.0.2

● Apache Hadoop v3.2

● Flask v1.1.2

● Python v3.8

● Kali Linux 20.20

● Ubuntu 20.04

Configuración de VPN

El proceso inicia en base a la instalación necesaria de la red privada VPN como red “local” para el proyecto en Big Data. Esta red debe ser dedicada por la necesidad de compartir datos entre nodos en una red o “tubería” que permita reducir la latencia. La configuración de la VPN se realizó en Hamachi la cual permite un máximo de 5 participantes. El proceso de configuración de este se basó en [14]

Instalación de Apache Hadoop

El proceso de instalación de Apache Hadoop se realizó en dos fases:

  1. Descarga e instalación de Apache Hadoop en Kali Linux 20.20 como nodo master
  2. Descarga e instalación de Apache Hadoop en Ubuntu 20.04 como nodos slave. Para optimizar el proceso, esta máquina se configuró en una sola vm para así distribuirlo en las demás 2 vms.

Este proceso de instalación se basó en [15].

Configuración de Clúster Multinodo en Apache Hadoop

Este proceso de instalación se basó en [15]. El resultado del proceso de configuración del cluster es el que se visualiza en la figura 1. En esta figura se realiza la verificación desde el nodo master y nodo slave los servicios hadoop que deben correr.

Figura 1. Verificación de Hadoop desde el nodo master para revisar los nodos configurados, conectados y sus servicios implementados. Fuente: Autoría propia.

La diferencia entre las configuraciones de nodos master y slave radica en los pasos intermedios que el master debe implementar para que pueda tomar el rol de nodo central. Es por esto, por ejemplo, que en el servicio de Nodemanager de los slaves orquestan cada operación dirigida por el Resource Manager del máster. Estos pertenecen a la capa de servicios de una arquitectura lambda.

Apache Hadoop brinda la ventaja de tener un servicio web en el cual se puede monitorizar mediante una GUI el cluster. Estos son la figura 2 del nodo master y la figura 3 de los nodos slaves.

Figura 2: Verificación de Hadoop desde un nodo esclavo para revisar el total de capacidad del cluster. Fuente: Autoría propia.
Figura 3: Verificación de la carga y distribución de un archivo del caso de estudio desde un nodo esclavo. Fuente: Autoría propia.

Configuración de Clúster Apache Spark

La configuración del cluster de Apache Spark sobre Hadoop, para la posterior consulta se realizó en base a [16]. Como se definió en la parte inicial del informe, Apache Spark permite consultar mucho más veloces, ya que mantiene los datos entre los cluster, haciendo la analogía con una memoria ram de una PC normal. Estas ventajas en tiempo de consulta son contrastadas con las configuraciones adicionales que deben establecerse para no perder los datos si uno de los nodos se desconecta o existe un problema en la red.

Los nodos slave deben correr los servicios (Ver figura 4):

  1. Datanode
  2. Jps
  3. Worker
  4. Nodemanager

El nodo master debe correr los servicios (Ver figura 5):

  1. Jps
  2. Resource Manager
  3. Worker
  4. NameNode
  5. SecondaryNameNode
  6. Master
Figura 4: Verificación desde consola de Spark corriendo desde un nodo master. Fuente: Autoría propia.
Figura 5: Verificación desde consola de Spark corriendo desde un nodo esclavo. Fuente: Autoría propia.

Así como Apache Hadoop, Apache Spark presenta un explorador web que facilita la monitorización de los servicios, en el caso del nodo master ver figura 6 y en el de los nodos slaves ver figura 7.

Figura 6: Spark Web corriendo en un navegador desde el nodo master. Fuente: Autoría propia.
Figura 7: Spark Web corriendo en un navegador desde un nodo esclavo. Fuente: Autoría propia.

Arquitectura Aplicación Web

La aplicación web se construyó en base a un backend y frontend, como se detallo con anterioridad. El backend se realizó en Flask levantando un servidor que ejecuta consultas en SPARKSQL. Estas consultas se envían al front end a través de una rest api.

Desarrollo de SPA

El desarrollo del FrontEnd se realizó en Angular JS. Este frontend se rige por una arquitectura web de modelo, componente y servicio. (Ver figura 8)

Figura 8: Arquitectura del FrontEnd del presente proyecto. Fuente: Autoría propia.

A breves rasgos la arquitectura propuesta, divide todo el core del frontend en 3 capas. Estas 3 capas diferencian:

● Capa Componente: La entrada y salida de datos desde la interfaz web

● Capa Modelo: Modela todos los tipos de datos que serán entregados o leídos por los servicios.

● Caja Servicio: Funciona como un “puerto” en donde envía y recibe datos desde y hacia el backend, hace uso de la capa de modelo para modelar los envíos y respuestas y evitar errores en tiempo de procesamiento.

Las consultas que se ejecutan en el FrontEnd se encuentran detalladas en la Tabla I. Estas consultas fueron fijadas desde la fase de exploración de datos, y permiten revisar los rendimiento de vuelos, retrasos, aeropuertos y aerolíneas.

Tabla 1: Consultas implementadas en el SPA

ID — Pregunta

1 — Número de retraso de llegada por ruta

2 — Número de retraso de salida por ruta

3 — Total Retrasos por salida de ruta en especifico

4 — Número de retrasos por salida por aerolínea

5 — Número de retrasos por llegada por aerolínea

6 — Aerolínea con más retrasos de salida y llegada

7 — Aerolinea con menos retrasos de salida y llegada

8 — Número de retraso de salida por aerolínea y condición climática por ruta

9 — Número de retraso de LLEGADA por aerolínea y condición climática por ruta

10 — Histórico de vuelos no cancelados

11 — Histórico de vuelos cancelados

12 — Categorías por las que se cancelan

13 — Vuelos no cancelados según aeropuertos de salida

14 — Vuelos no cancelados según aeropuertos de llegada

15 — Histórico años por origen vuelo

16 — Histórico años por destino vuelo

Desarrollo de Backend

El backend del presente proyecto es lo que más se trabajó en este proyecto. Es por esto que se dividió en varias fases, para que cada fase sea transparente respecto a los demás. Esta arquitectura permite replicar y mantener fácilmente. La figura 9 detalla la arquitectura seguida:

● Capa de Hadoop: Contiene el HDFS como gestor de archivos, en este caso, los registros almacenados como texto en el cluster.

● Capa de Spark: Lee los archivos existentes en el cluster de Hadoop, la lectura se realiza mediante Pyspark

● Capa Lógica: Mantiene la separación del servidor del backend, entre los nodos del cluster, para así por ejemplo consumir los servicios levantados en Flask. Esta capa lógica envía los datos al FrontEnd

Una de las ventajas que se presenta al usar Spark, es el tener datos en memoria. Este trabajo presenta la particularidad de que si las consultas no reciben parámetros, es decir, se busca tener vistas recurrentes se mantiene en cache el resultado de la consulta, así en próximas consultas se devuelven los resultados en menos tiempo.

Figura 9: Arquitectura del BackEnd del presente proyecto. Fuente: Autoría propia.

Finalmente para abordar el objetivo de la arquitectura lambda, se implementó las dos capas de Batch y Serving. La implementación de estas depende del objetivo principal del proyecto, el cual era consumir datos que no variaron en el tiempo, es decir, no requieren de una capa de Speed que sobre compense la inserción de grandes cantidades de datos así como la frecuente consulta en tiempo real. La arquitectura lambda fue implementada a través de Apache Hadoop como la capa Batch y Apache Spark como capa Server y capa Speed. La capa batch permite tener los datos en archivos físicos, respaldados, mientras que la capa Server en el caso de este proyecto permite ejecutar las querys requeridas.

Figura 10: Arquitectura Lambda implementada en el presente proyecto. Fuente: Autoría propia.

Resultados

Servidor de Consultas

Consultas realizadas a los datos en hdfs empleando pyspark. Los archivos“allyears2k.csv”, “airport.csv”, “carriers.csv”, se encuentran previamente cargados en el sistema de ficheros de hadoop llamado hdfs, esto nos permite tener nuestros archivos de manera distribuida. La lectura de los archivos solo empleando hadoop es demorada, por lo que para tener un menor tiempo de retorno de los datos para responder las preguntas planteadas anteriormente, se usa spark. Spark tiene la ventaja que los datos obtenidos desde hadoop son cargados a memoria y su tiempo de acceso es menor si lo comparamos con hadoop.

Realización de las consultas empleando spark sql. La ventaja de usar spark sql es que se puede trabajar con los datos traídos desde hadoop como si fueran tablas de las bases de datos relacionales, empleando el mismo lenguaje de consulta SQL y al estar en memoria el tiempo de respuesta es menor.

Cluster de spark empleando 3 nodos para el procesamiento. Una de las ventajas de usar un cluster para emplear los trabajos y las consultas es que el procesamiento de datos se realizan entre todos los nodos, teniendo un proceso distribuido de los datos. La creación de este proceso distribuido, necesita de la creación de una sesión dentro del cluster y registrar nuestra aplicación, en este caso el nombre escogido es “Sparkend”. En la siguiente figura 11 se muestra el comando para crear la aplicación en el cluster de spark y en la figura 12 se muestra el registro de la aplicación en el cluster de spark.

Figura 11: Comando para crear la aplicación Sparkend a ejecutándose en el cluster. Fuente: Autoría propia.
Figura 12: Aplicación Sparkend ejecutándose en el cluster. Fuente: Autoría propia.

Visualización de las Consultas

Las gráficas resultantes respecto a las querys ejecutadas al cluster y visualizadas desde el explorador web se pueden revisar en la Gráfica 13, 14, 15. Estas gráficas responden a las consultas establecidas en la Tabla I. Donde responden respectivamente las consultas 10, 11, 12, 13 de la Tabla mencionada.

Figura 13: Consultas “Históricos de vuelos” vistas desde la aplicación web. Fuente: Autoría propia.
Figura 14: Consultas “Conteo de retrasos” vistas desde la aplicación web. Fuente: Autoría propia.
Figura 15: Consultas “Conteo por vuelos y aeropuerto” vistas desde la aplicación web. Fuente: Autoría propia.

Conclusiones

Este proyecto seguido de manera metodológica puede considerarse como una gran posibilidad de aprendizaje. Los desafíos que presentó cada etapa de este proyecto, incrementó la capacidad laboral de los autores de este en campos que se encuentran en gran auge. A continuación, se detalla el cumplimiento de cada objetivo propuesto:

Implementar un sistema web que consuma los datos desde un cluster multinodo soportado en Apache Spark sobre Apache Hadoop, distribuyendo la carga entre múltiples nodos del cluster a través de una arquitectura lambda.

La propuesta detallada en la Sección III de Metodología, muestra cómo se ejecutó el proyecto para inicialmente establecer la VPN interna del cluster, y así establecer el cluster multinodo en Apache Hadoop. Este cluster multimodo se complementa con Apache Spark para poder gestionar las consultas en tiempos adecuados. Estas configuraciones posteriormente permitieron consumirse desde una API REST levantada sobre un servidor Flask con Pyspark y un servidor Angular. Las consultas respondidas se obtuvieron debido a la previa exploración de los datos.

Configurar un cluster multinodo sobre Apache Hadoop y realizar consultas sobre Apache Spark.

La configuración del cluster fue la etapa mas conflictiva de este proyecto, sin embargo, se pudo realizar a cabalidad. Los datos se distribuyeron con HDFS, posteriormente se mantiene memoria temporal mediante Apache Spark y se leen finalmente a partir de Pyspark.

Configurar una arquitectura lambda para la correcta consulta distribuida de un dataset.

La arquitectura lambda fue implementada a través de Apache Hadoop como la capa Batch y Apache Spark como capa Server y capa Speed. La capa batch permite tener los datos en archivos físicos, respaldados, mientras que la capa Server en el caso de este proyecto permite ejecutar las querys requeridas.

Implementar una aplicación web que realice diversas consultas a resolver y que permitan inferir conocimiento sobre el dataset seleccionado.

El factor de acceso a la información de manera sencilla se cumplió a través de una aplicación web construida a través de una SPA. Esta consumía los servicios brindados por un servidor en Flask que consultaba los datos mediante las querys a Apache Spark que accedía a Apache Hadoop.

Recomendaciones

Es recomendable tener una VPN dedicada, es decir VPN con costo, esto debido a la latencia existente en una VPN gratuita. O en su defecto, implementar en una red local. Así mismo, es recomendable implementar el cluster en computadores con buenas prestaciones. Este proyecto se realizó con computadores con procesadores Core i7 3,5,8 generación con RAM de 8 GB y 16 GB. Las máquinas virtuales requieren mucho espacio en disco y RAM por el sistema operativo que requiere, además de los recursos necesarios para Apache Hadoop y Spark.

No olvides difundir el conocimiento que adquieres. 👋

Ing. Freddy Abad — CUENCADEV

REFERENCIAS

[1] V. R. Borkar, M. J. Carey, and C. Li, “Big data platforms: What’s next?,” XRDS Crossroads, ACM Mag. Students, vol. 19, no. 1, pp. 44–49, Sep. 2012, doi: 10.1145/2331042.2331057.

[2] M. Zhou, M. Cao, T. Park, and J. H. Pyeon, “Clarifying big data: The concept and its applications,” in ACM International Conference Proceeding Series, Oct. 2015, vol. 20–23-October-2015, pp. 10–13, doi: 10.1145/2837060.2837068.

[3] B. S. J. B. Botelho, “What is Big Data and Why is it Important?,” 2009. https://searchdatamanagement.techtarget.com/definition/big-data (accessed Mar. 01, 2021).

[4] H. Pence, “What is Big Data and Why is it Important?”, Journal of Educational Technology Systems, vol. 43, no. 2, pp. 159–171, 2014. Available: 10.2190/et.43.2.d [Accessed 1 March 2021].

[5] J. Dean and S. Ghemawat, “MapReduce”, Communications of the ACM, vol. 51, no. 1, pp. 107–113, 2008. Available: 10.1145/1327452.1327492.

[6] N. Marz and J. Warren, Big Data. Frechen: MITP, 2016.

[7] NordVPN, “¿Qué es una VPN? .” https://nordvpn.com/es/download/ (accessed Mar. 01, 2021).

[8] “Hamachi — Wikipedia, la enciclopedia libre.” https://es.wikipedia.org/wiki/Hamachi (accessed Mar. 01, 2021).

[9] “¿Qué es un cluster?” http://www.revista.unam.mx/vol.4/num2/art3/cluster.htm#arriba (accessed Mar. 01, 2021).

[10] P. Fin De Carrera, M. Palacios Díaz-Zorita, and N. Fernández García, “Evaluación de la herramienta de código libre Apache Hadoop ,” 2011.

[11] M. G. Mario Macías, Introducción a Apache Spark . 2016.

[12] ITBLOGSOGETI, “Single-Page Applications (SPA).” https://itblogsogeti.com/2014/06/10/single-page-applications-roberto-bermejo-sogeti/ (accessed Mar. 01, 2021).

[13] “Backend para la Arquitectura de Aplicaciones Frontend — IBM Developer.” https://developer.ibm.com/es/depmodels/microservices/patterns/create-backend-for-frontend-application-architecture/ (accessed Mar. 01, 2021).

[14] Rahul, “How to Set Up LogMeIn (Hamachi) VPN on Ubuntu 16.04, CentOS 7.” https://tecadmin.net/set-up-logmein-on-linux/ (accessed Mar. 01, 2021).

[15] João Torres, “How To Set Up a Hadoop 3.2.1 Multi-Node Cluster on Ubuntu 18.04 (2 Nodes) .” https://medium.com/@jootorres_11979/how-to-set-up-a-hadoop-3-2-1-multi-node-cluster-on-ubuntu-18-04-2-nodes-567ca44a3b12 (accessed Mar. 01, 2021).

[16] João Torres, “How to Install and Set Up an Apache Spark Cluster on Hadoop 18.04.” https://medium.com/@jootorres_11979/how-to-install-and-set-up-an-apache-spark-cluster-on-hadoop-18-04-b4d70650ed42 (accessed Mar. 01, 2021).

--

--

Freddy Abad L.

Software World. Entusiasta del Mundo Tech. IA, Web & Mobile Dev, Cybersecurity. Website: www.cuencadev.com