Spark (II) – Características principales

Hoy veremos las características principales que hacen a Spark tan atractivo.

Resilient Distributed Dataset

En Spark a diferencia de Hadoop, no utilizaremos una colección de datos distribuidos sino que usaremos los RDDs (Resisilient Distribuited Datasets). Normalmente no suelo dar la chapa sobre en que consiste esto a bajo nivel, pero ya que estamos en el blog lo dejo aquí por escrito:
Son colecciones lógicas, inmutables y particionadas de registros a lo largo del cluster que pueden ser reconstruidas si alguna partición se pierde (no necesitan ser materializadas pero si reconstruidas para mantener el almacenamiento estable). Se crean mediante la transformación de datos utilizando para ello transformaciones (filtros, joins, Group by…). Por otra parte permite cachear los datos mediante transformaciones como Reduce, Collect, count, save…
Los RDD son tolerantes a fallos, para ello mantiene una cosa llamada el “lineage” del RDD. Este “lineage” permite que los RDDs se reconstruyan en caso de que una porción de datos se pierda.
Por tanto, los beneficios de utilizar RDD´s son varios:
· La consistencia se vuelve más sencilla gracias a la inmutabilidad.
· Tolerancia a fallos con bajo coste (gracias al “lineage” mantenemos checkpoints de los datos).

· A pesar de ser un modelo restringido a una serie de casos de uso por defecto, gracias a RDDs se puede utilizar Spark para un cantidad de aplicaciones muy variadas.

Operaciones en RDDs

Análisis Interactivo de Datos

 Una de las características más útiles es el Shell interactivo que permite a un usuario utilizar las capacidades de Spark inmediatamente (no se necesita un IDE o compilar el código). La Shell es una herramienta que se utiliza para la exploración de datos interactivamente, que nos permitirá probar porciones de la aplicación que estemos desarrollando.
Spark puede leer y escribir datos desde y hasta HDFS. Lo bueno es que nos permite jugar con APIs en Java, Scala y Python para aplicaciones “stand-alone”.

Batch Processing más Rápido

 Los primeros despliegues de Spark se enfocaron en aumentar el rendimiento de las aplicaciones MapReduce existentes. Recodemos que MapReduce en la actualidad es un framework genérico de ejecución paralela de aplicaciones y no es exclusivo ni una implementación propietaria del core de Hadoop. Por lo tanto Spark proporciona también MapReduce que puede llegar a ser más eficiente gracias al uso de la memoria (mientras utilizará “lineage” para recuperar los fallos en caso de que fuese necesario).

Algoritmos Iterativos

Spark permite a los usuarios y a las aplicaciones especificar el cacheo de un dataset mediante la operación cache(). Esto significa que nuestra aplicación puede acceder a la memoria RAM en vez de al disco, lo cual aumenta de manera espectacular el rendimiento en algoritmos iterativos ya que pueden acceder acceder al mismo dataset repetidamente. Ese caso de uso cubre un gran número de aplicaciones, como pueden ser las aplicaciones orientadas a machine learning o los algoritmos gráficos que son iterativos por naturaleza.
Puedes ver más sobre esto en la web oficial de Spark.

Procesamiento de Streams en Tiempo Real

Dado que las operaciones realizadas los sistemas de análisis de datos poseen una latencia baja, es natural extender el motor hacia streams de datos en tiempo real. Spark tiene un API que nos permite trabajar con estos streams de datos y que además tienen una ventaja diferencial: podemos mezclar streams en tiempo real con programas Batch.
Anuncios

Spark (I) – Introducción

spark-logo

Voy a hacer una serie de posts en la que explicaré tanto la instalación como el funcionamiento de los programas desarrollados para Spark.

En este primer post introductorio quiero hablar de dónde viene, en que estado está y hacia donde va. La mayoría de esta información la he sacado de la web oficial de Spark, pero intento darle un toque de sencillez en algunos puntos para hacerlo más entendible a los humanos.

 

Introducción

Hadoop revolucionó el procesamiento BigData permitiendo a los usuarios almacenar y procesar cantidades masivas de datos a un precio muy bajo. El algoritmo|técnica MapReduce es ideal para implementar aplicaciones de Batch Processing muy complejas que a menudo tratan de dar solución a sistemas de log, la ejecución de ETL, la computación de los índices web y potenciar los sistemas de recomendación personal. Sin embargo, su dependencia del almacenamiento persistente en disco para proporcionar tolerancia a fallos provoca una alta latencia entre servidores, cosa que viene muy mal para algunos cálculos iterativos así como algoritmos de aprendizaje que utilicen MapReduce.

El proyecto de Spark se centró desde el comienzo en aportar una solución factible a estos defectos de Hadoop, mejorando el comportamiento de las aplicaciones que hacen uso de MapReduce y aumentando el rendimiento considerablemente.

Pero…¿Qué es Spark?

Spark es un motor para el procesamiento de grandes volúmenes 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 más operaciones (mappers, reducers, joins, groups by, filtros…).
También proporciona API´s para Java,Scala & Python. Es preferible que se programe en Scala ya que el código se verá reducido y todo parecerá más limpio.

La principal ventaja de Spark es que guarda todas las operaciones sobre los datos en memoria. Esta es la clave del buen rendimiento que tiene Spark.

La siguiente figura muestra algunas de sus principales características:

· Baja latencia computacional mediante el cacheo 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.

Un programa escrito en Spark como veremos en los siguientes posts permite ver un algoritmo paralelo de una forma tipo imperativa.

Y hasta aquí el post de hoy.

Os espero en el siguiente!!!

Fuentes:
http://spark.apache.org/downloads.html
http://databricks.com/blog