Frameworks de procesamiento distribuido II

BI Geek / Big Data  / Frameworks de procesamiento distribuido II
bigdata

Frameworks de procesamiento distribuido II

En el post anterior vimos la historia que hay detrás del procesamiento distribuido y del nuevo paradigma de programación MapReduce. En este nuevo artículo, vamos a ver un ejemplo de MapReduce y describiremos los frameworks de procesamiento Hadoop, Apache Spark y Apache Flink.

 

Ejemplo MapReduce

Como se explicó anteriormente, MapReduce es un modelo de programación que nos permite realizar cómputo distribuido.

En el siguiente ejemplo se puede observar cómo se computa un algoritmo que permite contar palabras.

 

mapreduce
Este algoritmo mapreduce cuenta con las siguientes tres fases:

  1. Map: Con esta función map, se separa cada fila en palabras y se meapea un “1” a cada “palabra”, generando la tupla “palabra, 1”.  Al agregar más tarde por “palabra”, nos permitirá contar cuántas palabras hay en el documento.
  2. Suffle & Sort: Suffling es el proceso de la transferencia de datos de los mappers a los reducers. Sorting permite ahorrar tiempo a los reducers a la hora de realizar los cálculos. Esta fase suele estar implementada en los frameworks.
  3. Reduce: Se agrega por la clave de nuestra tupla (palabra), realizando una operación de agregación con el resto de datos, en este caso, un sumatorio.

El objetivo de este algoritmo es utilizar la técnica “divide y vencerás” para dividir el procesamiento y reducir así el tiempo que éste conlleva.

 

Hadoop

Hadoop es un framework que está ideado para trabajar con petabytes de información sobre un clúster de ordenadores con hardware económico (comodity computing).

Hadoop se compone principalmente de:

  • HDFS: Hadoop Distributed File System. Es un Sistema de almacenamiento estructurado en bloques con rebalanceo y distribuido.
  • MapReduce: Hadoop utiliza el modelo de MapReduce para la paralelización de los algoritmos, leyendo y escribiendo sobre HDFS.
  • Hadoop Common: Es el conjunto de librerías y utilidades soportadas por hadoop.

Dentro de la composición de hadoop se puede distinguir:

  • Core Hadoop: Compuesto por el sistema HDFS y el sistema MapReduce
  • Monitorización y ejecución: Hadoop provee herramientas de monitorización y ejecución como Zookeeper (software que permite la coordinación de procesos distribuidos) y Oziee (herramienta para la creación de flujos de trabajo).hadoop
  • Almacenamiento de información: Hbase es una base de datos NOSQL que permite almacenamiento distribuido.
  • Packages: Hadoop proporciona varios componentes como Pig, que permite realizar scripts para trabajar en map reduce; Hive, abstracción SQL para trabajar con HDFS mediante MapReduce; y Mahout, módulo de Machine Learning que permite trabajar sobre MapReduce.
  • Integración de la información: Hadoop  proporciona un conjunto de integradores de información como ODBC, REST,…

 

Apache Spark

Spark es un framework de procesamiento distribuido open source desarrollado por la universidad de California, Berkeley.

spark_hadoopLa diferencia entre Hadoop y Spark radica en donde se almacenan los datos. Mientras que Hadoop utiliza el disco duro para el almacenamiento, Spark hace uso de la memoria RAM, incrementando la velocidad hasta x100.

Spark provee un modelo de programación MapReduce al igual que hadoop y provee además un sistema de almacenamiento en memoria denominado RDD.

Además, en apache Spark podemos encontrar un amplio conjunto de librerías:

  • Spark SQL: Spark SQL permite abstraernos del modelo de programación MapRspark
    educe y transformar los RDD en DataFrame que pueden ser manejados mediante sentencias SQL.
  • Spark Streaming: Es una librería en Spark que nos permite manejar información en “streaming”.
  • MLlib: Es la librería de machine learning en spark. Al igual que Mahout, esta librería nos proporciona un conjunto de algoritmos machine learning que se pueden ejecutar en distribuido.
  • GraphX: Haciendo uso de la teoría de grafos, esta librería nos permite recorrer y hacer cálculos con grafos.

 

Apache Flink

Al igual que Hadoop y Apache Spark, Apache Flink es un framework de procesamiento distribuido pero, a diferencia de éstos, su core está basado en el procesamiento distribuido en Streaming.

Apache Flink cuenta con el Flink Core que está compuesto por:

  • DataSet API: Entorno de ejecución en el que las ejecuciones se realizan sobre datos más estáticos, como ficheros o bases de datos.
  • DataStream API: Los datos se obtienen de fuentes dinámicas como Sockets, colas de mensajería, u otras fuentes streaming.

flinkAl igual que Apache Spark y Hadoop, Flink cuenta con un conjunto de módulos que enriquecen su ecosistema, entre los que podemos destacar:

  • FlinkML: Librería de Machine Learning de Flink.
  • Gelly: Librería para el uso de grafos sobre Flink.
  • Table API: Permite utilizar sentencias SQL.
  • CEP (Complex event processing): Permite detectar patrones en los datos streaming para realizar las acciones necesarias con los datos que son realmente relevantes para nosotros.

Conclusiones

En este post hemos visto las herramientas más demandadas por el mercado, con sus ventajas e inconvenientes. Usar una u otra dependerá de las necesidades del cliente.

Es importante destacar que en un corto periodo de apenas 5 años, han aparecido multitud de herramientas open source que están evolucionando de manera muy rápida y de forma muy continua.

En próximos posts, se entrará más en detalle en cada uno de estos frameworks, facilitando ejemplos y casos de uso.

 

Consultor Business Intelligence y Big Data.