Big Data con Sparkling Water

Big data from scratch

Posted by Alex Ferrer on 1 year ago

Sparkling water

Este último semestre he cursado una asignatura SIO (Sistemas de Información en Organizaciones) donde nos hablaron sobre el tema del Big Data y hicimos unas prácticas que me han parecido lo suficientemente interesantes como para crear un articulo en mi blog. En la primera práctica, que ya escribiré un articulo más adelante, montamos un clúster de Hadoop, en el que nos dejaron libertad para implementarlo usando distintas distribuciones usando Hortonworks, Cloudera o directamente con Apache Hadoop. Aunque en éste artículo me voy a centrar en explicar la segunda parte de la práctica donde teníamos que implementar un sistema para procesar datos usando Spark.
Spark es una de las plataformas más utilizadas actualmente para el procesamiento de Big Data, ya que es muy rápido y eficiente. En nuestra práctica, decidimos usar Sparkling Water, otra plataforma que combina lo mejor de Spark juntamente con las herramientas de H2O para realizar estudios y predicciones sobre los datos. Ahora haré un breve resumen sobre la configuración básica para empezar con Sparkling Water.

Configuración inicial Sparkling water

Suponiendo que ya tenemos una màquina Linux, Mac OS o màquina virtual en Windows con Java 1.8 instalado y Scala.

El primer paso es descargarnos la última versión de Spark, por ejemplo la 1.6 actualmente y descomprimirlo en un directorio que queramos:

http://www.apache.org/dyn/closer.lua/spark/spark-1.6.1/spark-1.6.1-bin-hadoop2.6.tgz

Una vez tenemos Apache Spark, del mismo modo vamos a descarganos Sparkling Water para la versión de Spark 1.6 que hemos descargado anteriormente:

http://www.h2o.ai/download/sparkling-water/spark16

Ahora que ya tenemos Spark i Sparkling Water, ya tenemos lo necesario para empezar. Antes que nada para facilitar la inicialización del clúster, podemos crearnos un script en bash para inicializar las variables de entorno SPARK_HOME, MASTER y establecer la configuración inicial de arranque:

export SPARK_HOME=/home/alex/SIO/spark
export MASTER="local-cluster[1,4,10240]"
/home/alex/SIO/sparkling-water-1.6.3/bin/sparkling-shell --conf "spark.executor.memory=10g"

Este script que podemos llamar “run-sparkling.sh” iniciará un clúster de 1 máquina con 4 cores y 10240mb de memoria RAM y arrancará la Sparkling Shell (intérprete de Scala).

Al ejecutar éste script en la terminal de Unix, nos va a abrir el intéprete de Scala donde inicializaremos H2O usando los siguientes imports y inicializaciones en Scala.


// Initialize H2O services on top of Spark cluster
import org.apache.spark.h2o._
val h2oContext = H2OContext.getOrCreate(sc)
import h2oContext._
import h2oContext.implicits._
import org.apache.spark.examples.h2o._
import java.io.File
import sqlContext.implicits._

Ahora si no ha salido ningún error o excepción por la consola de Scala, podriamos decir que ya tenemos el entorno preperado para realizar consultas sobre el conjunto de datos que queramos.

También podremos ejecutar los scripts en scala que hagamos simplemente escribiendo en la terminal de Scala el siguiente comando sin las comillas simples:

:load 'ruta script scala'

Un ejemplo de script usando SparkSQL podría ser el siguiente, por ejemplo para cargar datos que se encuentren en un archivo CSV:


// Cargar directamente el CSV o importar hex de H20
val airlinesData = new H2OFrame(new File("/home/alex/SIO/dades/plane-data.csv"))
val airlinesData = new H2OFrame("X1997.hex")
val flightsTable = asDataFrame(airlinesData)(sqlContext)
// Tabla temporal SQL donde realizar consultas
flightsTable.registerTempTable("flights")
// Ejecutar la consulta
val result = sqlContext.sql("SELECT * FROM flights")
// Exportar el resultado al formato hex para visualizarlo en la interficie // de H2O
val bigDataFrame: H2OFrame = h2oContext.asH2OFrame(result)

También podriamos usar las funciones map, filter que nos proporciona Scala para procesar los datos, eso ya al gusto del programador y de los requisitos de los datos.

Share this post!