Spark Structured Streaming es uno de los fundamentos de Spark Stack, una de las partes más importantes de la arquitectura del sistema de computación Apache Spark. Por ello, si planeas conocer cómo funciona el procesamiento de los datos en este sistema desde su desarrollo interno, debes identificar sus principales funciones y características.
Desde KeepCoding comprendemos la importancia de conocer todo sobre uno de los sistemas de computación más reconocidos en el mundo Big Data, como lo es Apache Spark. Por ello, en este post, te exponemos qué es Spark Structured Streaming.
¿Qué es Spark Structured Streaming?
Spark Structured Streaming es un motor de streaming processing construido sobre el motor de SparkSQL. El principal fin de Spark Structured Streaming radica en que permite expresar el procesamiento en streaming, al igual que se logra con el procesamiento en batch.
Por otra parte, dentro de su desenvolvimiento dentro de la arquitectura de Spark Stack podrás encontrar las siguientes características y funciones de Spark Structured Streaming:
- El sistema Structured Streaming da garantías de procesamiento end-to-end exactly-once con tolerancia a fallos utilizando mecanismos de checkpointin.
- Structured Streaming proporciona un sistema de procesamiento en stream rápido, escalable, tolerante a los fallos y con garantías de exactly-one, sin que el usuario tenga que saber que se encuentra trabajando sobre un stream de datos.
- Los datos en Structured Streaming se procesan usando un motor de procesamiento en micro-batch: procesa pequeños lotes de datos, con latencias end-to-end de 100 milisegundos y proporcionando garantías exactly-one.
- Spark2.3 añade un modo llamado Continuos Processing, permitiendo latencias de un milisegundo y proporcionando garantías atleast-once.
Spark Structured Streaming: Concepts
Del Spark Streaming hace referencia a una query en la entrada que generará la tabla de resultados. De manera que, cada vez que se dispara el trigger (1 sec), nuevas rows se añaden a la tabla de Input. Eventualmente se va generando la tabla de resultados.
Por otra parte, cuando la tabla de resultados de Spark Streaming se actualice, podrás enviar estos datos a un almacenamiento externo. Dicha salida puede definirse en distintos modos, que te exponemos a continuación:
- Complete Mode: se envía toda la tabla de resultados al completo.
- Append Mode: únicamente se envían las rows nuevas añadidas desde el ultimo trigger. Así, se asume que las rows antiguas no se van a modificar.
- Update Mode: se envían todas las rows que hayan tenido alguna modificación desde el último trigger.
Por ejemplo
import org.apache.spark.sql.functions._
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder
.appName(“StructuredNetworkWordCount”).getOrCreate()
import spark.implicits._
val lines = spark.readStream
.format(“socket”)
.option(“host”, “localhost”)
.option(“port”, 9999)
.load()
val query = lines.as[String]
.flatMap(_.split(” “))
.groupBy(“value”)
.count()
.writeStream
.outputMode(“complete”)
.format(“console”)
start()
query.awaitTermination()
Spark Structured Streaming: Windows
Agrega los datos en una ventana de 10 minutos que se desliza cada 5 minutos, de manera que el resultado de las tablas se envía en base al modo que se utilice.
Por otra parte, en ocasiones se pueden recibir datos antiguos y también puede mantener en memoria un estado parcial de las agregaciones durante un gran periodo de tiempo, por lo que se puede agregar eventos que llegan con retrasos.
Existe un límite
Ejecutar esta consulta de Spark Streaming durante días puede alcanzar el límite de los datos que se pueden
almacenar. Por ello, el sistema necesita saber cuándo puede descartar datos antiguos, watermarking.
Condiciones
- Modo Append/Update.
- Agregación con tiempo o usando window.
- withWatermark, utilizado en la misma columna de tiempo que la agregación.
- Configurar el withWatermark antes que la agregación.
Spark Structured Streaming: Joins
Por último, Spark Structured Streaming soporta hacer joins con dataset estáticos y con otros streams como:
- Stream-Static: no necesita mantener el estado. El stream de datos hace join con el dataset
estático previamente cargado en memoria. - Stream-Stream: necesita mantener el estado de los streams para asegurar que eventos
que llegan en diferentes momentos en el tiempo hagan join.
En el desarrollo de este post, te hemos expuesto lo que es Spark Structured Streaming como parte de la arquitectura del sistema de computación Apache Spark. A pesar de ello, el mundo del procesamiento Big Data es sumamente amplio, por lo que te recomendamos continuar aprendiendo sobre este ámbito del sector IT si buscas convertirte en un experto en este campo.
Por este motivo, desde KeepCodging te presentamos el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, por medio del que podrás aprender mucho más sobre este servicio y, en general, sobre los sistemas y herramientas más importantes en el mundo del Big Data. Así, de la mano de profesionales y en menos de nueve meses, te convertirás en todo un experto y podrás conocer e identificar las alternativas de gestión de datos más apropiadas para los estudios de los macrodatos. ¡No esperes más para empezar e inscríbete!