El Ecosistema Spark: Big Data para Gente de Marketing (8)
Portada » Big Data » El Ecosistema Spark: Big Data para Gente de Marketing (8)

El Ecosistema Spark: Big Data para Gente de Marketing (8)

Apache Spark Core

El Spark Core está compuesto de dos APIs, una estructurada y otra desestructurada. La principal diferencia entre la dos es que una está optimizada para trabajar con datos estructurados a través de un interfaz mientras que la otra está pensada para manejar objetos java.

Las aplicaciones en spark están formadas por un proceso conductor (driver) y un conjunto de procesos de ejecución en diferentes nodos del cluster. El proceso conductor (driver) es responsable de recoger las indicaciones del programa del cliente, mantener información sobre la gestión de la aplicación y analizar, distribuir y programar el trabajo a través de los nodos trabajadores (workers), los que van a desempeñar realmente las tareas.

El proceso conductor es esencial para el funcionamiento de Spark, mantiene toda la información relevante del proceso a lo largo de la duración de la aplicación (o el trabajo si prefieres). Los ejecutores son los encargados de ejecutar el código que le ha sido asignado por el conductor (driver) y mantener un feedback continuo del estado del proceso al driver para que tenga el pulso del estado de la aplicación en todo momento. De esta manera el conductor podrá reaccionar ante una caída de un nodo y reconducir la tarea a través de otro trabajador (worker).

La última parte importante del ecosistema es el gestor del cluster (cluster manager). El gestor del cluster controla físicamente las máquinas y asigna recursos a las aplicaciones de Spark, cuando hablo de recursos me refiero a capacidad de la CPU y a espacio en la memoria que se va a usar para ejecutar la tarea asignada al nodo trabajador. Es posible que haya múltiples aplicaciones corriendo a la vez en un mismo cluster, por lo que la gestión de los recursos de cada nodo es una parte muy importante del proceso.

 

Spark Streaming

Spark Streaming se introdujo a principios de 2013 con el objetivo de proporcionar una alternativa escalable para un modelo de programación que permitiera integrar el procesado en lotes (Batch) con la capacidad de procesar los datos de manera interactiva dentro de un mismo entorno (framework).

MLlib

El la librería de software del ecosistema Spark para la aplicación de algoritmos de Machine Learning en procesos de aprendizaje supervisado, no supervisado, semi-supervisado o aprendizaje por refuerzo (reinforcement learning – RL) y/o la utilización de algoritmos estadísticos como los relacionados con los análisis de correlaciones, problemas de regresión y clasificación, clusterización, analisis de componentes principales (PCA) o los filtros colaborativos usados en los sistemas de recomendación.

Spark MLib facilita la ejecución de proyectos de Machine Learning al traer la capacidad de aplicar múltiples algoritmos integrado en un entorno donde se puede procesar datos de manera escalable a través de los nodos del cluster combinado con la capacidad de leer y escribir en múltiples sistemas como hemos visto.

Spark trae dos tipos de librerías de Machine Learning, por un lado spark.mlib, desarrollada sobre los RDDs, y por otro lado spark.ml que trabaja con los DataFrames.

Hay cuatro conceptos clave en el uso de Machine Learning en Spark, a saber:

  1. Estimator es un algoritmo que funciona sobre los DataFrames de Spark y que contiene las caracteristicas ()features) y las etiquetas (labels). Se entrena en base a los datos para generar un modelo, que usaremos para realizar predicciones sobre lo que ocurrirá en el futuro.
  2. Transformer Convierte el DataFrame de Spark que contiene las features y lo transforma en otro DataFrame que contendrá las predcciones. El modelo creado por el Estimator es un Transformer.
  3. Parameter los parámetros que serán utilizados por los Estimator y los Transformers. Muy frecuentemente es específico al algoritmo que estemos usando.
  4. Pipeline: La cadena de estimators y Transformers trabando de la mano en un flujo del Machine Learning.

Para aclarar algunos de estos conceptos usaré un ejemplo. Supongamos que vamos a hacer un análisis de los datos de una base de datos de vinos tintos. En la base de datos tenemos datos como: el dióxido de sulfuro, la densidad, el PH, alcohol, el azucar residual… todos ellos serían caracteristicas del vino (features). Supongamos que vamos a realizar una modelización de la calidad de los vinos, digamos que el output del modelo va a clasificar los vinos en Muy Malo, Malo, Normal, Bueno y Muy Bueno, estas categorías serían las etiquetas (labels).

GraphX

Un módulo que empezo en el mismo laboratorio de la Univesidad de Berkeley que el propio Spark y que también fue donado a la fundación de Software Abierto Apache. GraphX permite el procesado para el análisis de grafos, una disciplina de la matemática para el estudio de las relaciones entre pares de objetos en un diagrama de relaciones representado de manera gráfica.

Spark R

Proporciona a la comunidad de científicos de datos y estadistas una manera sencilla de usar las funcionalidades de R sobre la potencia de un sistema distribuido con capacidad de trabajar con datos en streaming como Spark.

Spark Streaming

La aparición del mundo de los sensores de todo tipo, desde la ubicación de nuestro coche a través del GPS del navegador a medida que avanzamos por la carretera, a los latidos de nuestro corazón en nuestra pulsera de actividad mientras nos movemos por el mundo ha abierto las puertas a un nuevo mundo de datos al alcance de los analistas. La cantidad de datos que este tipo de sensores es capaz de generar por segundo es una de la claves del Volumen y de la Velocidad del mundo del Big Data.

Hasta la llegada de Spark el mundo de los datos se dividía entre las soluciones especializadas en procesos en lote (batch), como el propio Hadoop, y las soluciones de streaming, con Storm y su API Trident como sus máximos exponentes en la comunidad de código abierto (open source).

Algunas de estas soluciones abordan el proceso de datos en streaming evento a evento mientras que Spark divide la corriente de datos en trozos, lo que denominamos micro-lotes o micro-batches. La estructura de micro-lotes es lo que le permite a Spark mantener la compatibilidad con Spark Core y otros módulos del su ecosistema.

La ventaja que aún mantiene Spark está en su capacidad para integrar procesado de datos en lotes (batch) con el streaming. Esta característica es especialmente importante en entornos donde se necesita combinar el análisis de datos en streaming con datos de otras fuentes.

Una de las ventajas que ya hemos visto de Spark también se aplica a Streaming. Spartk Streaming soporta la ingesta de datos de un amplio espectro de soluciones como Apache Kafka, Apache Flume, Amazon Kinesis, Twitter o sensores u otros tipos de dispositivos conectados a través de sockets TCP. Así mismo, los datos se pueden enviar a soluciones de almacenamiento diferentes como HDFS Hadoop y Amazon Web Services A3.

Streaming va a estar continuamente con una oreja puesta en escuchar los nuevos datos a medida que entran de la fuente y va actuar de manera muy similar a como funciona el resto de Spark, al finalizar el intervalo definido para el micro-batch Spark produce una abstracción de datos muy similar al RDD llamada Discretized Stream o DStream. Cada uno de estos RDDs es una foto de todos los datos que se han ingestado durante ese intervalo de tiempo, en el gráfico en cada uno de los intervalos de tiempo 1, 2 , 3 y 4.

Las capacidades de procesado del Spark Core se aplican a cada uno de los bloques DStream de la misma forma que se haría con cualquier otro RDD en Spark, para el Spark Core es totalmente transparente que está realizando un análisis en streaming.

Las diferentes actividades en un cluster de Spark se orquestran mediante un programa controlador (driver) mediante el uso de SparkContext, cuando se trata de aplicaciones basadas en streaming entonces se usa el StreamingContext. Esto permite aprovechar las capacidades de gestión del cluster de una herramienta externa como el propio YARN de Hadoop o de Mesos para distribuir los recursos a los nodos donde se ejecutará el trabajo con los datos (Worker nodes).

Spark SQL

SQL (Structured Query Language) ha sido el estándar de facto en la comunidad de analistas de negocio para trabajar con los datos. Los nuevos modelos de programación del mundo del Big Data como MapReduce son extremadamente potentes pero a la vez altamente complejos. Como hemos visto en los post anteriores la manera más sencilla de ampliar el alcance de estos nuevos modelos a este tipo de perfiles ha sido a través de crear un interfaz extremadamente similar a SQL. Este es el motivo que llevo a que la comunidad de código abierto (Open Source) iniciase proyectos como Hive o Impala.

De la misma forma en Spark los RDDs son herramientas muy potentes para alguien que sepa programar en Java o en Escala, sin embargo, para los analistas de negocio resulta una abstracción de demasiado bajo nivel para que sea fácil trabajar directamente con ellos. Los analistas de negocio necesitan de una opción que les permita concentrarse en el problema de negocio a resolver y no en las intrincadas lógicas de la maquinaria de Spark.

Pero como su propio nombre indica SQL fue pensado para trabajar con datos estructurados en tablas por filas y columnas y con un esquema que definía las relaciones entre las diferentes tablas. Spark SQL utiliza los DataFrames y los DataSets, abstracciones que permiten trabajar con datos estructurados por columnas con sus correspondientes nombres y que mantienen un esquema relacional,, como vimos anteriormente. Ademas Spark SQL proporciona un buen entorno para optimizar las queries llamado Catalyst Optimizer

A la hora de trabajar con datos estructurados y semi-estructurados Spark SQL nos da varias opciones:

  1. Trabajar con la abstracción de datos estructurados que proporcionan los DataFrames in Python, Java y Scala.
  2. Los datos pueden leerse y escribirse usando una gama de formatos estructurados por ejemplo JSON, Tablas de Hive y Parquet.
  3. Podemos realizar consultas (queries) en SQL tanto desde dentro de Spark como desde fuera usando algún tipo de conector de bases de datos estándar como JDBC (Java DataBase Connectivity) y ODBC (Open Database Connectivity).
CompartirFacebookX
Únete a la discusión

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Instagram

Instagram has returned empty data. Please authorize your Instagram account in the plugin settings .

Please note

This is a widgetized sidebar area and you can place any widget here, as you would with the classic WordPress sidebar.

Johannes

A multi-concept personal blog and magazine WordPress theme