Apache Spark: Introducción

Última actualización: 04/10/2020

En esta entrada repasamos los aspectos clave de Apache Spark como motor de procesamiento Big Data.

Que es Apache Spark

Aspectos clave de Apache Spark

Apache Spark es un framework de procesamiento open source distribuido para Big Data. La característica principal es el uso que hace de las estructuras de datos en memoria llamadas RDD, con lo que consigue aumentar el rendimiento frente a herramientas como Hadoop considerablemente.

Spark fue desarrollado originalmente en la universidad de Berkeley y está escrito en Scala. Debido a la popularidad que ha tenido, se han desarrollado librerías y extensiones de la propuesta inicial. Estas han convertido a Spark en una plataforma diversa, que puede manejar casi todas las cargas de trabajo: batch, streaming, interactivas, grafos, etc.

  • Procesamiento en memoria: Apache Spark es 100 veces más rápido en memoria y 10 veces más rápido en disco que Hadoop MapReduce, para ello necesita más recursos.
  • Soporta múltiples lenguajes: Spark tiene APIs disponibles en los lenguajes Java, Scala, Pythony R.
  • Analítica avanzada: Para ello, soporta consultas SQL y su uso para Machine Learning con librerías de data science como MLlib y GraphX.
  • Abstracción RDD (Resilient Distributed Dataset): consiste en una colección inmutable de elementos en memoria distribuída.
  • Evaluación perezosa: Las transformaciones sobre los datos solo se resuelven al ejecutar una acción sobre ellos.
Ecosistema y componentes de Apache Spark
Ecosistema y componentes de Apache Spark

Ejemplos de código Apache Spark

El siguiente ejemplo está escrito en Scala. Es una aplicación spark básica de tipo wordcount. Lee un fichero de texto, lo divide por palabras y cuenta las ocurrencias de cada palabra.

val textFile = sc.textFile("/tables/internet_archive_scifi_v3.txt")
val counts = textFile.flatMap(line => line.split(" "))
                 .map(word => (word, 1))
                 .reduceByKey(_ + _)
counts.saveAsTextFile("/tables/wordcountresult")

El ejemplo a continuación realiza el cálculo de la estimación de pi de forma paralela. Es una aplicación intensiva en cómputo.

var NUM_SAMPLES = 900000000
val count = sc.parallelize(1 to NUM_SAMPLES).filter { _ =>
  val x = math.random
  val y = math.random
  x*x + y*y < 1
}.count()
println(s"Pi is roughly ${4.0 * count / NUM_SAMPLES}")

Spark Streaming

Spark Streaming extiende la funcionalidad de Spark para realizar procesamiento de datos en streaming o en tiempo real. Funciona como un wrapper sobre Spark batch, agrupando los datos recibidos en pequeños micro-batches, con lo que consigue unos buenos tiempos de respuesta. Es compatible con Yarn como gestor de trabajos en el clúster.

Proporciona dos tipos de operadores. El primer tipo son operadores que transforman DStream en un DStream diferente, incluyen operadores con y sin estado. El segundo tipo son operadores que se encargan de escribir los datos en sistemas externos.

Para mantener una tolerancia a fallos, Spark Streaming usa checkpointing. De esta manera, almacena el estado del sistema en instantes de tiempo para poder recuperar la información en el caso de que ocurra algún error en el driver.

Los trabajos Spark Streaming añaden una pestaña a la interfaz web de Spark que muestra las estadísticas y métricas de los registros procesados. Muestra gráficas que indican el retraso de planificación, el tiempo de procesamiento, las colas, etc.

Spark SQL

Apache Spark está diseñado para soportar procesamiento de datos distribuidos con un gran rendimiento, en múltiples casos de uso. Spark SQL, es un módulo de Spark para procesar datos estructurados. Es compatible con muchas fuentes de datos como Apache Hive, JDBC y formatos como Avro, Parquet, ORC y JSON.

También es muy eficiente para procesar datos semi-estructurados y está integrado con Hive Metastore y bases de datos NoSQL como HBase. Spark SQL resulta muy útil para incorporar consultas SQL en cargas de trabajo Spark. El caso de uso más común es en Ingeniería de datos, en cargas de trabajo con consultas SQL muy pesadas, que tardan en ejecutar pero no es necesaria una alta concurrencia.

Spark SQL está cobrando una importancia alta en el desarrollo de Spark y es que es de las funcionalidades más demandadas, siendo SQL el lenguaje preferido en tratamiento de datos. Las nuevas versiones de Spark como Spark 3.0 se acercan cada vez más a la compatibilidad completa con el estándar ANSI SQL.

Siguientes pasos y Formación

Si quieres aprender Apache Spark a fondo y convertirte en experto, no dudes en invertir en tu formación a largo plazo:

Además, te dejo algunos libros recomendados:


A continuación el vídeo-resumen. ¡No te lo pierdas!


¡Echa un ojo a mi lista de reproducción de Big Data en Youtube!

Si te ayuda el contenido del blog, por favor considera unirte a la lista de correo para reconocer el trabajo!

Deja una respuesta