Spark, mi verdad.

Marco Sanchez
KarmaPulse Developers
4 min readSep 14, 2016

“Chicos, ¿alguna vez se han sentido atrapados en un problema que no saben cómo resolver? ¿Sí? Pues yo no.” (Marco Sánchez, 2016)

La intención de este artículo es motivar un acercamiento por su parte hacia Spark, motivación que pretendo crear a partir de contarles lo que he aprendido de Spark y algunos chistes malos.

Primero entendamos un poco qué es Spark.

La página oficial lo describe así: Spark es un motor general y rápido para el procesamiento de información a gran escala. Para mí es como una cajita mágica de la cual puedes sacar soluciones fáciles para problemas complejos. Pero, ¿qué problemas?

La paralelización de datos

La paralelización de datos es una forma de paralelización de computación a través de múltiples procesadores. Ésta se enfoca en distribuir la información a través de distintos nodos de computación paralela. En mis palabras, tenemos múltiples procesos que hacen algo con la información y ésta es distribuida a través de ellos.

Algo así:

Paralelización de datos

Entonces, digamos que utilizamos varios servidores para procesar esta información, al hacer esto, nos enfrentaremos directamente a varios problemas de la programación distribuida como fallas en la red, latencia, ancho de banda y disponibilidad.

Como vemos, la paralelización de datos es algo increíble, pero también nos obliga a cuidar otros detalles. Es como una tarjeta de crédito: es divertido usarla y comprar un piano de 8,000 pesos, aunque después lo tienes que pagar, pero lo vale.

Spark nos ayuda mucho con esto. En primer lugar, está preparado para correr en un cluster de servidores, de hecho nos da tres alternativas para esto: correr con ayuda de Hadoop, Mesos o en su versión standalone. Ojo, nos ayuda mucho pero tenemos que tener cuidado con algunos problemas de la programación distribuida. Es como anotar un gol en los primeros momentos de un partido; te da mucha ventaja pero aún tienes que acabar el partido. Por cierto, ¿sabían que el Cruz Azul perdió una final en cinco minutos?

Segundo, Spark nos permite indicar qué procesamientos vamos a realizar con nuestra información mediante algo que ellos llaman RDD. En pocas palabras, un RDD o Conjunto de Datos Distribuido y Resiliente es una estructura de datos que usamos para distribuir la información, modificarla y obtener alguna salida de ella.

La belleza de esto es que, como programador, sólo te preocupas de indicar la lógica que quieres procesar con la información y el resultado que requieres. Después, para realizar esta tarea sólo será necesario correr esto en un cluster y Spark se encargará de aprovechar los recursos. Aún necesitará un poco de nuestra ayuda pero, como un título después de 15 años de subcampeón, lo vale.

Como ven, Spark nos hace muy fácil algo muy complejo. Pero eso no es todo, vamos con otro problema.

Procesamiento en tiempo real

En este problema nosotros necesitamos atender grandes cantidades de información y procesarla lo más rápido posible, para esto, Spark nos tiene una solución: Spark Streaming. Spark Streaming nos permite recibir la información de algun flujo (dígase un socket TCP enviando miles de mensajes por segundo) y procesarla. Para lograr esto, Spark Streaming realiza cortes cada cierto tiempo y en cada corte genera un conjunto de RDDs que van a ser procesados por nosotros. Es como tener una llave abierta, guardar el agua en una cubeta, convertir el agua en agua de piña y después servirla, todo esto tan rápido como sea posible y sin dejar caer una sola gota de la llave.

¿Ven? Exactamente igual que hacer agua de piña

Análisis de información

El análisis de información puede ser tan complicado como queramos, aquí Spark brilla ya que nos permite analizar y jugar con la información con distintas herramientas.

Para empezar, mediante Spark SQL podemos explorar nuestra información mediante un lenguaje de queries. Esto nos permite solicitarle a Spark un dato en especial de nuestro conjunto de información como si fuera una tabla clásica de SQL. Podemos buscar cosas como, por ejemplo, cuáles son los 10 lugares más concurridos para tomar alcohol los viernes a medio día. ¿No me crees? Compruébalo tú mismo.

Además, Spark Machine Learning nos da un conjunto de facilidades para utilizar algoritmos de machine learning no supervisado como una máquina de clustering para segmentar nuestra información y así poder encontrar algun patrón dentro de dichos segmentos. También funciona para algoritmos supervisados como, por ejemplo, un clasificador que nos permita saber si tu novia te va a cortar según sus actitudes recientes.

Por último, Spark Graph nos permite encontrar conexiones dentro de nuestra información. Por ejemplo, podriamos preguntar a Spark quién es la persona más visitada de la colonia, cuántas personas han tenido contacto con ella, o cuántos grados de separación hay entre tú y Cristian Castro.

El mejor

Es correcto

Esto es un poco de lo que Spark ofrece, espero los haya motivado a leer más sobre él y, sobre todo, a jugar con él. Me despido, no sin antes desearles junto con @thevansters, una feliz Navidad.

Yo soy @marcandtony.

--

--