BigData Apache Spark

Apache Spark

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (13 votos, promedio: 5,00 de 5)
Cargando...

Procesando grandes volúmenes de datos de forma distribuida

Apache Spark es un sistema de computación distribuido. Spark fue diseñado para solucionar problemas grandes de modo que cada servidor del cluster realiza las operaciones sobre un conjunto más pequeño de datos, e ir uniendo los resultados para encontrar el resultado final.

Spark se utiliza en BigData para realizar cálculos intensivos sobre grandes volúmenes de datos y para procesamiento en tiempo real.

¿Qué es Apache Spark?

Apache Spark realiza las operaciones de forma distribuida en el cluster y trabaja con procesamiento en paralelo. Con Apache Spark se pueden realizar cálculos y transformaciones sobre grandes volúmenes de datos. Spark permite dividir un problema grande en más pequeños y repartir cada parte del problema a un servidor en el cluster, este lo resuelve y devuelve el resultado, o participa en la resolución del problema.

Es un sistema escalable, por lo que permite añadir más servidores al cluster para la resolución del problema más rápido o poder trabajar con volúmenes de datos más grandes. Con Apache Spark también se pueden realizar calculos o transformaciones en Streaming, que sería algo como computación en tiempo cerca del real.

Ventajas de Apache Spark

  • Se pueden programar en scala, en python (pySpark), R o en java
  • Sistema muy rápido
  • Permite la computación en modo distribuido
  • Escalabilidad
  • Diseñado para trabajar con grandes volúmenes de datos con integración perfecta con el ecosistema Hadoop
  • Cálculos y transformaciones de datos en Streaming
  • Muchas librerías e integraciones con herramientas de terceros
  • Gran comunidad de desarrolladores

¿Para qué  se puede utilizar Spark?

  • Análisis de sentimiento de tweets
  • Análisis semántico de los comentarios de una página web para comprobar si hablan de un concepto
  • Recomendaciones en una tienda online
  • Detección de fraude en la banca
  • Reconocimiento de patrones o de imágenes
  • Analizar weblogs
  • Machine learning
  • Calculo del PageRank

¿Qué empresas utilizan la tecnología de Apache Spark?

Muchas empresas tienen integrado Apache Spark en partes fundamentales de sus sistemas informáticos de producción y donde Spark se convierte en parte fundamental de sus negocios realizando una o varias funciones dentro del sistema. Entre las empresas que tienen integrado Apache Spark en sus sistemas son:

  • Alibaba, análisis de datos de la tienda online
  • Amazon
  • Ebay, ofertas personalizadas
  • Kelkoo, el comparador de productos utiliza Apache Spark para recomendar productos, para analíticas o para la minería de datos.
  • Groupon
  • Shopify
  • myfitnesspal, la aplicación para móviles, utiliza Spark para recomendar dietas y ejercicios a los usuarios
  • Pinterest, tendencias
  • Yahoo!
  • TripAdvisor, recomendaciones a los usuarios
  • Yandex
  • Netflix, recomendaciones

Spark en un contenedor docker

Es conveniente instalar un cluster de Hadoop para poder trabajar con Spark y Hadoop y poder beneficiarse de todas las ventajas del BigData. Una vez instalado el cluster de Hadoop se puede ejecutar el siguiente comando para levantar un contenedor con Spark:

docker run --name spark1 -d --hostname spark1.dominio.local --net donet --ip 172.18.0.105 --restart always -e CORE_CONF_fs_defaultFS=hdfs://namenode1:8020 -e YARN_CONF_yarn_resourcemanager_hostname=resourcemanager1 uhopper/hadoop-spark tail -f /var/log/dmesg

Realizado esto es fácil acceder a la shell de Spark para Scala utilizando el comando:

docker exec -it spark1 spark-shell

Ejecutar en docker la Spark Shell con el conector de MongoDB para Spark

Es posible cargar distintos paquetes de software adicional en la shell de Spark para poder trabajar con software de terceros. En el siguiente ejemplo se carga el conector para la base de datos MongoDB para Apache Spark.

docker exec -it spark1 spark-shell --packages org.mongodb.spark:mongo-spark-connector_2.11:2.3.1

Además se le pueden pasar parámetros de configuración a la Spark Shell para preconfigurar el módulo

--conf "spark.mongodb.input.uri=mongodb://m1.dominio.local,m2.dominio.local/database.collection?replicaSet=mongoset" --conf "spark.mongodb.output.uri=mongodb://m1.dominio.local,m2.dominio.local/database.collection?replicaSet=mongoset"

Aquí la forma de leer de una base de datos de MongoDB desde Spark y escribir desde Spark en MongoDB los datos cargados con otro nombre de colección:

import com.mongodb.spark._
import com.mongodb.spark.config._
import org.bson.Document
val rconfig = ReadConfig(Map("uri" -> "mongodb://m1.domain.local,m2.domain.local/database.collection?replicaSet=mongoset"))
val wconfig = WriteConfig(Map("uri" -> "mongodb://m1.domain.local,m2.domain.local/database.collection2?replicaSet=mongoset"))
val rdd = MongoSpark.load(sc, rconfig)
println(rdd.count)
println(rdd.first.toJson)
MongoSpark.save(rdd, wc1onfig)

Mediante la carga de paquetes y la conectividad de Spark con software de terceros es posible extraer datos de un lugar, realizar las operaciones necesarios y guardarlos en el mismo lugar o en otro distinto. En el siguiente ejemplo se carga un fichero CSV almacenado en un cluster de Hadoop a un dataframe de Spark y se crea una vista temporal. El fichero CSV en Hadoop solo tiene una columna con un listado de emails. La primera celda de la columna de emails titulo el titulo de la columna, llamada “email”.

val df = spark.read.format("csv").option("header", "true").load("/user/hue/bbdd.csv");
df.createOrReplaceTempView("customers");

Tras la carga, ahora se puede utilizar sparkSQL para realizar consultas como si de una base de datos se tratara.

val dfsql = spark.sql("SELECT email FROM customers").cache();
dfsql.count()

Por último es posible guardar los datos de la consulta en MongoDB para su posterior consulta.

MongoDBMongoSpark.save(dfsql.write.format("com.mongodb.spark.sql.DefaultSource").mode("append"), wconfig)

Existen muchas formas de trabajar con Apache Spark y cada proyecto puede utilizarlo de una forma bien distinta. En Spark es posible cruzar datos de distintas fuentes, realizar operaciones y finalmente almacenarlos en prácticamente en cualquier lugar de forma fácil.

Más información en la web de Apache Spark

Deja una respuesta