Академический Документы
Профессиональный Документы
Культура Документы
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:
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:
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.
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.
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 11 Haddop
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