You are on page 1of 11

APACHE SPARK

Definicin
Apache Spark es un framework de computacin distribuida open source, es un motor para el
procesamiento de grandes volmenes datos y que gracias a su llamada "interactividad" hace que
el paradigma MapReduce ya no se limite a las fases Map y Reduce y podamos realizar ms
operaciones (mappers, reducers, joins, groups by, filtros...).
Tambin proporciona APIs para Java,Scala & Python. Es preferible que se programe en Scala ya
que el cdigo se ver reducido y todo parecer ms limpio.

Actualmente, Apache Spark est siendo adoptada por Amazon, eBay y Yahoo. Muchas
organizaciones trabajan con Apache Spark en grupos con miles de nodos. Segn sitio web de
Apache Spark, el cluster ms grande conocido tiene ms de 8000 nodos.
Otras funciones clave de Spark incluyen:
En la actualidad proporciona APIs en Scala, Java y Python, con soporte para otros lenguajes
(como R).
Se integra bien con sistemas Hadoop y otras fuentes de datos (HDFS, Amazon S3, Hive,
HBase, Cassandra, etc.)
Se puede ejecutar en clsteres gestionados por Hadoop YARN o Apache Mesos, y tambin
puede funcionar independiente.

Ventajas
La principal ventaja de Apache Spark es que guarda todas las operaciones sobre los datos en
memoria. Esta es la clave del buen rendimiento que tiene Apache Spark.
La siguiente figura muestra algunas de sus principales caractersticas:

Figura 1 Caracteristicas de Apache Spark

Baja latencia computacional mediante la carga cache de los datos en memoria en un


dataset.

Algoritmos iterativos eficientes debido a que las sucesivas operaciones comparten los
datos en memoria, o accediendo de manera repetida al mismo dataset.

Principales pilares
Apache Spark mantiene la escalabilidad lineal y la tolerancia a fallos de MapReduce, pero ampla
sus bondades gracias a varias funcionalidades: DAG y RDD.
DAG (Directed Acyclic Graph)

Figura 2 DAG
DAG (Grafo Acclico Dirigido) es un grafo dirigido que no tiene ciclos, es decir, para cada nodo
del grafo no hay un camino directo que comience y finalice en dicho nodo. Un vrtice se conecta
a otro, pero nunca a s mismo.
Apache Spark soporta el flujo de datos acclico. Cada tarea de Spark crea un DAG de etapas de
trabajo para que se ejecuten en un determinado cluster. En comparacin con MapReduce, el cual
crea un DAG con dos estados predefinidos (Map y Reduce), los grafos DAG creados por Spark
pueden tener cualquier nmero de etapas. Spark con DAG es ms rpido que MapReduce por el
hecho de que no tiene que escribir en disco los resultados obtenidos en las etapas intermedias del
grafo. MapReduce, sin embargo, debe escribir en disco los resultados entre las etapas Map y
Reduce.
Gracias a una completa API, es posible programar complejos hilos de ejecucin paralelos en unas
pocas lneas de cdigo.
RDD (Resilient Distributed Dataset)
Apache Spark mejora con respecto a los dems sistemas en cuanto a la computacin en memoria.
RDD permite a los programadores realizar operaciones sobre grandes cantidades de datos en

clusters de una manera rpida y tolerante a fallos. Surge debido a que las herramientas existentes
tienen problemas que hacen que se manejen los datos ineficientemente a la hora de ejecutar
algoritmos iterativos y procesos de minera de datos. En ambos casos, mantener los datos en
memoria puede mejorar el rendimiento considerablemente.
Una vez que los datos han sido ledos como objetos RDD en Spark, pueden realizarse diversas
operaciones mediante sus APIs. Los dos tipos de operaciones que se pueden realizar son:

Transformaciones: tras aplicar una transformacin, obtenemos un nuevo y modificado


RDD basado en el original.

Acciones: una accin consiste simplemente en aplicar una operacin sobre un RDD y
obtener un valor como resultado, que depender del tipo de operacin.

Dado que las tareas de Spark pueden necesitar realizar diversas acciones o transformaciones sobre
un conjunto de datos en particular, es altamente recomendable y beneficioso en cuanto a eficiencia
el almacenar RDDs en memoria para un rpido acceso a los mismos. Mediante la funcin cache()
se almacenan los datos en memoria para que no sea necesario acceder a ellos en disco.
El almacenamiento de los datos en memoria cach hace que los algoritmos de machine learning
ejecutados que realizan varias iteraciones sobre el conjunto de datos de entrenamiento sea ms
eficiente. Adems, se pueden almacenar versiones transformadas de dichos datos.

Figura 3 Operaciones con RDD

Arquitectura de Apache Spark


El nucleo de Apache Spark se complementa con un conjunto de libreras de alto nivel, que se
puede utilizar sin problemas en la misma aplicacin. Estas libreras actualmente incluyen a
SparkSQL, Spark Streaming, MLlib (para machine learning), y GraphX.

Figura 4 Arquitectura Apache Spark


Spark Core es el motor base para el procesamiento paralelo y distribuido de grandes volmenes
de datos. Es responsable de:
Gestin de la memoria y la recuperacin de fallos
Programacin, distribucin y supervisin de las tareas en un clster
Interactuar con los sistemas de almacenamiento

SparkSQL
Es un componente que da soporte para consulta a datos, ya sea a travs de SQL o mediante el
lenguaje de consulta de Hive. Adems proporciona soporte a diversas fuentes de datos, que hace
posible hacer consultas SQL, lo que se traduce en una herramienta muy poderosa.
Spark Streaming
Soporta el procesamiento en tiempo real de data steaming, tales como archivos de registro de
servidores web (por ejemplo Apache Flume y HDFS/S3), medios sociales como Twitter, y
varias herramientas de mensajera. Spark streaming recibe los flujos de datos de entrada y
divide los datos en lotes, posteriormente, se procesan por el Spark Engine y se generan el flujo
de resultados.

Figura 5 Componentes de un cluster


MLlib
Es una librera de machine learning que ofrece diversos algoritmos diseados para escalar en un
clster para clasificacin, regresin, clustering, filtrado colaborativo.
GraphX
GraphX es una librera para la manipulacin de grficos y la realizacin de operaciones con
grficos en paralelo. Proporciona una herramienta uniforme para anlisis exploratorio y clculos
iterativos de grficos.

Componentes de un Clster Spark


1. Las aplicaciones de Spark se ejecutan en sets de procesos independientes en el cluster y que a
su vez son coordinados por el objecto SparkContext del programa principal (llamado driver
program).
2. El SparkContext puede conectarse a muchos tipos de clster managers (tanto Spark
StandAlone como los administrador por Apache Mesos/YARN), el cual asigna recursos a travs
de las aplicaciones. Una vez conectado, Spark toma los executors en los nodos del cluster, los
cuales son "worker processess" que ejecutan operaciones y almacenan los datos de la aplicacin.
3. Despus se enva el cdigo de tu aplicacin (definido por el archivo JAR o Python que hemos
enviado al SparkContext) a los executors.
4. Por ltimo, el SparkContext enva las tareas a los executors para ejecutarlas.

Figura 6 Componentes de un cluster


Hay algunas cosas tiles que debemos tener en cuenta:

1. Cada aplicacin obtiene su propio proceso executor, el cual est levantado durante toda la
ejecucin y que adems ejecutar tareas en mltiples threads. De esta manera las aplicaciones se
encuentran aisladas unas de las otras, tanto del lado del scheduler (cada driver maneja sus propias
tareas) como del lado del executor (las tareas de las diferentes aplicaciones se ejecutan en
diferentes JVMs). Sin embargo, esto tambin significa que los datos no pueden ser compartidos
entre diferentes aplicaciones de Spark (instancias del SparkContext) sin que estas tengan que
escribir en sistemas de almacenamiento externo.
2. Spark es indiferente al tipo de administrador de cluster que hayamos elegido. Puede soportar
tanto MESOS como YARN.
3. Dado que el driver administra y prioriza las tareas del cluster, este debera ser ejecutado cerca
de los workers (nodos), preferiblemente en la misma red local (por temas de latencia).

Modelo de programacin
Un programa tpico se organiza de la siguiente manera:
1. A partir de una variable de entorno llamada context se crea un objeto RDD leyendo datos de
fichero, bases de datos o cualquier otra fuente de informacin.
2. Una vez creado el RDD inicial se realizan transformaciones para crear ms objetos RDD a
partir del primero. Dichas transformaciones se expresan en trminos de programacin funcional
y no eliminan el RDD original, sino que crean uno nuevo.
3. Tras realizar las acciones y transformaciones necesarias sobre los datos, los objetos RDD deben
converger para crear el RDD final. Este RDD puede ser almacenado.
Un pequeo ejemplo de cdigo en Python que cuenta el nmero de palabras que contiene un
archivo sera el siguiente:

Figura 7 Ejemplo de una instruccin


Cuando el programa comienza su ejecucin crea un grafo similar al de la figura siguiente en el
que los nodos son objetos RDD y las uniones entre ellos son operaciones de transformacin. El
grafo de la ejecucin es un DAG y, cada grafo es una unidad atmica de ejecucin. En la figura
siguiente, las lneas rojas representan transformacin y las verdes operacin.

Figura 8 Ejecucin de un programa


Tipos de transformaciones
Es muy posible que los datos con los que se necesite tratar estn en diferentes objetos RDD, por
lo que Spark define dos tipos de operaciones de transformacin: narrow transformation y wide
transformation.

Narrow transformation (Transformacin reducida): se utiliza cuando los datos que se


necesitan tratar estn en la misma particin del RDD y no es necesario realizar una mezcla
de dichos datos para obtenerlos todos. Algunos ejemplos son las funciones filter(),
sample(), map() o flatMap().

Wide transformation (Transformacin extensa): se utiliza cuando la lgica de la


aplicacin necesita datos que se encuentran en diferentes particiones de un RDD y es
necesario mezclar dichas particiones para agrupar los datos necesarios en un RDD
determinado. Ejemplos de wide transformation son: groupByKey() o reduceByKey().

Una representacin grfica de ambos tipos de transformaciones es la que se puede apreciar en la


figura siguiente:

Figura 9 Tipos de transformacin


Ejemplo
Dados dos objetos RDD (RDD1 y RDD2), con variables a y b, se va a realizar una operacin
de JOIN entre ambos conjuntos de datos para los casos en los que a sea mayor que 5 y b sea
menor que 10:
SELECT a, b FROM RDD1 JOIN RDD2 WHERE a>5 AND b<10
Esta operacin puede realizarse de dos maneras, tal y como se aprecia en la imagen de abajo. La
primera opcin consiste en una implementacin muy simple en la que primero se realiza el JOIN
entre los objetos RDD y luego se filtran los datos. Sin embargo, en la segunda opcin, primero se
realiza el filtrado por separado en ambos RDD y luego se hace el JOIN.

Figura 10 Ejemplo de join


La segunda opcin es ms eficiente debido a que el filtrado y posterior unin de los datos se hace
por separado. Podra decirse que la mezcla o barajado de datos es la operacin que ms coste
tiene, por lo que Apache Spark proporciona un mecanismo que genera un plan de ejecucin a
partir de un DAG que minimiza la cantidad de datos que son mezclados. El plan de ejecucin es
el siguiente:
1. Primero se analiza el DAG para determinar el orden de las transformaciones.
2. Con el fin de minimizar el mezclado de datos, primero se realizan las transformaciones narrow
en cada RDD.
3. Finalmente se realiza la transformacin wide a partir de los RDD sobre los que se han realizado
las transformaciones narrow.
Comparativa entre Modelo Map-Reduce (Hadoop) y Apache Spark
Spark ofrece una plataforma de procesamiento de datos ms general y ms rpida que Hadoop.
Spark permite ejecutar programas hasta 100 veces ms rpido (en memoria), y 10 veces ms
rpido (en disco), que Hadoop.

Figura 11 Haddop

Figura 4 Apache Spark

Casos de uso
Se listan casos de uso en los que se requiere trabajar con un volumen de datos grande:
En la industria de las finanzas o la seguridad, apache Spark podra aplicarse a un sistema de
deteccin de fraude e intrusin, o de autenticacin basada en riesgos. Se podra lograr buenos
resultados con la recoleccin de grandes cantidades de registros archivados, combinndolo con
fuentes de datos externas, como la informacin sobre robo de datos y cuentas comprometidas y
la informacin de la conexin como geolocalizacin IP y tiempos.

10

En el campo de la Medicina y Biologa: Para anlisis de ADN, Genoma Humano, y los resultados
se pueden analizar y relacionar con las distintas enfermedades.
En la industria del juego, el procesamiento y descubrimiento de patrones en tiempo real de
eventos, para fines tales como: Publicidad dirigida, ajuste automtico del nivel de complejidad,
entre otros.
En la industria del comercio electrnico, la informacin de las transacciones en tiempo real se
podra pasar a un algoritmo de streaming clustering como k-means. Los resultados podran incluso
combinarse con otras fuentes de datos no estructurados, como sugerencias de los clientes, y
utilizarlas para una mejora continua, adaptar las recomendaciones con las nuevas tendencias.

Conclusiones
Apache Spark es una herramienta til y eficiente para tareas de procesamiento masivo de datos.
Est en constante desarrollo y se actualiza frecuentemente. Adems, su documentacin es muy
completa y la comunidad cada vez se hace ms grande.
Bibliografa
1. Prez,

Mara.

Apache

Spark:

qu

es

como

funciona.

Disponible

en:

https://geekytheory.com/apache-spark-que-es-y-como-funciona/
2. Pulido, Fracncisco. (2014). Componentes de un cluster en Apache Spark. Disponible en:
http://www.franciscojavierpulido.com/2014/05/spark-iii-como-crear-y-configurarun.html
3. Arjones,

Gustavo.

(2014).

Introduccion

Apache

Spark.

Disponible

en:

http://es.slideshare.net/arjones/introduccion-a-apache-spark
4. Radek Ostrowski. Introduction to Apache Spark with Examples and Use Cases
https://www.toptal.com/spark/introduction-to-apache-spark

11