Apache Spark: Introducción

Última actualización: 08/01/2021

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. Este estado se almacena preferiblemente en un sistema de almacenamiento tolerante a fallos como HDFS.

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. He seleccionado los mejores cursos de Spark:

Además, te dejo mis libros recomendados:

Preguntas Frecuentes Apache Spark – FAQ

¿Apache Spark necesita Hadoop?

Apache Spark puede ejecutar sin Hadoop, no es necesario. HDFS es solamente uno de los sistemas de ficheros soportados por Spark, pero puede usar otros.

¿Cuándo usar Apache Spark?

Debemos contemplar Apache Spark como herramienta de procesamiento de datos distribuida cuando necesitemos implementar procesos de big data y machine learning. Estos procesos deberán beneficiarse de dividir las operaciones y de distribuir los trabajos en un cluster de varios nodos.

¿Qué lenguajes de programación usa Apache Spark?

Apache Spark usa la JVM y está escrito en Java y en Scala. Soporta múltiples lenguajes como Scala y Python. Python está más orientado al desarrollo de aplicaciones de analítica y Data Science.


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


¡Echa un ojo a mi lista de reproducción de Big Data y suscríbete al canal de Youtube para no perderte ninguna píldora BIG DATA!

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

Deja una respuesta