Vimos en algún post anterior que pasaba con Map-Reduce y como funciona. También hay un pequeño comentario al final diciendo que ya es «poco común encontrar personas que escriban tareas de Map Reduce a mano (en Java)» ya que existen servicios como Hive. Sin embargo, hay otros servicios, que también son distribuidos, pero no están basado en este algoritmo y que son utilizados para procesar datos en Big Data. El principal, es Apache Spark.
Spark comenzó como un proyecto de la Universidad de Berkeley hace ya varios años (2009 aproximadamente). Mas específicamente, escribieron un paper no sobre «Spark» sino mas bien sobre el core de Spark que son los Resilient Distributed Datasets (RDDs). Su objetivo era:
…to provide an abstraction that supports applications with working sets (i.e., applications that reuse an intermediate result in multiple parallel operations) while preserving the attractive properties of MapReduce and related models: automatic fault tolerance, locality-aware scheduling, and scalability. RDDs should be as easy to program against as data flow models, but capable of efficiently expressing computations with working sets.
Traduciendo, su intención era lograr que resultados parciales del procesamiento de los datos, pudiera ser reutilizado. Ergo, esto datasets se van almacenando en memoria y son reutilizados por el proceso sin tener que ir al Disco Rigido para almacenar resultados parciales como en Map Reduce.
Cuando se ejecuta una transformación que modifica un dataset, se crea uno nuevo. Se entiende por transformación, a métodos específicos de los RDD como GroupBy, map o filter. Por otro lado, los RDDs no se materializan en memoria hasta que se ejecuta una acción como por ejemplo collect, count o take. En este aspecto, podemos decir que Spark limita un poco nuestra capacidad de procesamiento a la memoria RAM que tengamos disponible, sin embargo, es extremadamente mas rápido que Map Reduce y ademas existen mecanismos o buenas practicas para evitar desbordar la memoria.
Spark fue principalmente pensado para realizar tareas de Analytics y es hoy el líder del procesamiento de datos en Big Data, tanto en proyectos full Hadoop on Premise, como en la nube de la mano de soluciones como Databricks.
La arquitectura de este sistema de procesamiento, es similar al esquema que utiliza HDFS en general. Se tiene un master, y se tienen nodos que hacen el trabajo pesado. Estos nodos deben, al menos, tener mucha memoria RAM disponible (o acorde para procesar el volumen de datos que se quiere procesar).
Sin embargo, no es todo color de rosa. Spark, es un poco mas sensible respecto a la tolerancia a fallos. Si un nodo de Spark cae durante el procesamiento, la tarea completa falla. Y este es justamente un punto donde Hive con Map-Reduce sigue siendo un poco mejor.
La siguiente vez, hablare un poco mas de la arquitectura y como se utiliza esta tecnología.