Apache Spark DStream (Discretized Streams)

Jun 1, 2021
admin

¡Mantente actualizado con las últimas tendencias tecnológicas
Únete a DataFlair en Telegram!

Objetivo

Este tutorial de Spark, te guiará a través de Apache Spark DStream. En primer lugar, vamos a ver lo que es Spark Streaming, a continuación, lo que es DStream en Apache Spark. En este blog de Apache Spark también se discuten las operaciones de flujo discretizado, es decir, las transformaciones sin estado y con estado, la operación de salida, el DStream de entrada y los receptores.

Apache Spark DStream (Discretized Streams)

Apache Spark DStream (Discretized Streams)

Introducción a DStream en Apache Spark

En esta sección, aprenderemos sobre DStream. ¿Cuál es su papel y responsabilidad en Spark Streaming? Incluye lo que todos los métodos se inculcan para hacer frente a la transmisión de datos en vivo.
Como una extensión de la API de Apache Spark, Spark Streaming es tolerante a fallos, sistema de alto rendimiento. Procesa el flujo de datos en vivo. Spark Streaming toma la entrada de varias fuentes de entrada fiables como Flume, HDFS y Kafka, etc. y luego envía los datos procesados a sistemas de archivos, bases de datos o tableros en vivo. El flujo de datos de entrada se divide en los lotes de datos y luego genera el flujo final del resultado en lotes.

Spark DStream (Discretized Stream) es la abstracción básica de Spark Streaming. DStream es un flujo continuo de datos. Recibe entrada de varias fuentes como Kafka, Flume, Kinesis, o sockets TCP. También puede ser un flujo de datos generado mediante la transformación del flujo de entrada. En su núcleo, DStream es un flujo continuo de RDD (abstracción de Spark). Cada RDD en DStream contiene datos del intervalo determinado.

Cualquier operación sobre un DStream se aplica a todos los RDDs subyacentes. DStream cubre todos los detalles. Proporciona al desarrollador una API de alto nivel para su comodidad. Como resultado, Spark DStream facilita el trabajo con datos en streaming.

Spark Streaming ofrece propiedades de tolerancia a fallos para los DStreams como la de los RDDs. mientras haya una copia de los datos de entrada, puede volver a calcular cualquier estado a partir de ella utilizando el linaje de los RDDs. Por defecto, Spark replica los datos en dos nodos. Como resultado, Spark Streaming puede soportar fallos de un solo trabajador.

Operaciones de Spark DStream

Al igual que RDD, Spark DStream también soporta dos tipos de Operaciones: Transformaciones y Operaciones de salida-

i. Transformación

Hay dos tipos de transformación en DStream:

  • Transformaciones sin estado
  • Transformaciones con estado

a. Transformaciones sin estado

El procesamiento de cada lote no depende de los datos de los lotes anteriores. Las transformaciones sin estado son simples transformaciones RDD. Se aplica en cada lote que significa cada RDD en un DStream. Incluye transformaciones RDD comunes como map(), filter(), reduceByKey() etc.
Aunque estas funciones parecen aplicarse a todo el flujo, cada DStream es una colección de muchos RDDs (lotes). Como resultado, cada transformación sin estado se aplica a cada RDD.

Las transformaciones sin estado son capaces de combinar datos de muchos DStreams dentro de cada paso de tiempo. Por ejemplo, los DStreams de clave/valor tienen las mismas transformaciones relacionadas con la unión que los RDDs- cogroup(), join(), leftOuterJoin() etc.

Podemos utilizar estas operaciones en los DStreams para realizar operaciones subyacentes de los RDDs en cada lote.

Si las transformaciones sin estado son insuficientes, DStreams viene con un operador avanzado llamado transform(). transform() permite operar en los RDDs dentro de ellos. El transform() permite que cualquier función arbitraria de RDD a RDD actúe sobre el DStream. Esta función es llamada en cada lote de datos del stream para producir un nuevo stream.

b. Stateful Transformations

Utiliza datos o resultados intermedios de lotes anteriores y calcula el resultado del lote actual. Las transformaciones con estado son operaciones sobre DStreams que siguen los datos a través del tiempo. Así, hace uso de algunos datos de lotes anteriores para generar los resultados de un nuevo lote.

Los dos tipos principales son las operaciones con ventana, que actúan sobre una ventana deslizante de periodos de tiempo, y updateStateByKey(), que se utiliza para rastrear el estado a través de eventos para cada clave (por ejemplo, para construir un objeto que represente cada sesión de usuario).

Sigue este enlace para leer las transformaciones DStream en detalle con los ejemplos.

ii. Operación de salida

Una vez que obtenemos los datos tras la transformación, sobre esos datos se realiza la operación de salida en Spark Streaming. Después de la depuración de nuestro programa, utilizando la operación de salida sólo podemos guardar nuestra salida. Algunas de las operaciones de salida son print(), save() etc.. La operación de guardar toma el directorio para guardar el archivo y un sufijo opcional. La operación print() toma los 10 primeros elementos de cada lote del DStream e imprime el resultado.

Input DStreams y Receivers

Input DStream es un DStream que representa el flujo de datos de entrada de la fuente de streaming. Receptor (Scala doc, Java doc) objeto asociado con cada objeto DStream de entrada. Recibe los datos de una fuente y los almacena en la memoria de Spark para su procesamiento.

Spark Streaming proporciona dos categorías de fuentes de streaming incorporadas:

  • Fuentes básicas – Son fuentes que están directamente disponibles en la API StreamingContext. Ejemplos: sistemas de archivos, y conexiones de socket.
  • Fuentes avanzadas – Estas fuentes están disponibles por clases de utilidad extra como Kafka, Flume, Kinesis. Por lo tanto, requiere la vinculación contra dependencias extra.

Por ejemplo:

  • Kafka: el artefacto requerido para Kafka es spark-streaming-kafka-0-8_2.11.
  • Flume: el artefacto requerido para Flume es dspark-streaming-flume_2.11.
  • Kinesis: el artefacto requerido para Kinesis es spark-streaming-kinesis-asl_2.11.

Crea muchas entradas DStream para recibir múltiples flujos de datos en paralelo. Crea múltiples receptores que reciben muchos flujos de datos. Spark worker/executor es una tarea de larga duración. Por lo tanto, ocupa uno de los núcleos que se asocian a la aplicación Spark Streaming. Así, es necesario que, la aplicación Spark Streaming tenga suficientes núcleos para procesar los datos recibidos.

Conclusión

En conclusión, al igual que RDD en Spark, Spark Streaming proporciona una abstracción de alto nivel conocida como DStream. DStream representa un flujo continuo de datos. Internamente, DStream se representa como una secuencia de RDDs. Así, como RDD, podemos obtener DStream a partir de DStream de entrada como Kafka, Flume, etc. También se puede aplicar la transformación sobre el DStream existente para obtener un nuevo DStream.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.