Transformaciones con estado con ventanas en Spark Streaming



Esta publicación de blog analiza las transformaciones con estado con ventanas en Spark Streaming. Aprenda todo sobre el seguimiento de datos en lotes utilizando D-Streams de estado.

Contribuido por Prithviraj Bose

En este blog, analizaremos el concepto de ventanas de las transformaciones con estado de Apache Spark.





¿Qué es la transformación con estado?

Spark Streaming utiliza una arquitectura de micro lotes donde los datos entrantes se agrupan en micro lotes llamados Flujos discretos (DStreams) que también sirve como abstracción básica de programación. Los DStreams tienen internamente conjuntos de datos distribuidos resistentes (RDD) y, como resultado de este RDD estándar, se pueden realizar transformaciones y acciones.



En la transmisión, si tenemos un caso de uso para rastrear datos en lotes, entonces necesitamos DStreams con estado.

Por ejemplo, podemos rastrear la interacción de un usuario en un sitio web durante la sesión del usuario o podemos rastrear un hashtag de Twitter en particular a lo largo del tiempo y ver qué usuarios de todo el mundo están hablando de él.

Tipos de transformación estatal.



Los DStreams de estado son de dos tipos: seguimiento basado en ventanas y seguimiento de sesión completa.

tostring () método java

Para el seguimiento con estado, todos los datos entrantes deben transformarse en pares clave-valor, de modo que los estados clave se puedan rastrear en lotes. Ésta es una condición previa.

Además, también deberíamos habilitar el punto de control, un concepto que discutiremos en los blogs posteriores.

> Seguimiento basado en ventanas

En el seguimiento basado en ventanas, los lotes entrantes se agrupan en intervalos de tiempo, es decir, agrupan lotes cada 'x' segundos. Los cálculos adicionales de estos lotes se realizan mediante intervalos de diapositivas.

Por ejemplo, si el intervalo de ventana = 3 segundos y el intervalo de deslizamiento = 2 segundos, todos los datos entrantes se agruparán en lotes cada 3 segundos y los cálculos de estos lotes se realizarán cada 2 segundos. Alternativamente, podemos decir, haga cálculos cada 2 segundos en los lotes que llegaron en los últimos 3 segundos.

spark-streaming-dstream-window

En el diagrama anterior vemos que los lotes entrantes se agrupan cada 3 unidades de tiempo (intervalo de ventana) y los cálculos se realizan cada 2 unidades de tiempo (intervalo de deslizamiento).
Nota: a diferencia de Apache Flink, Apache Spark no tiene un concepto de ventana giratoria, todas las ventanas se deslizan.

FUEGO

Una API popular para transformaciones basadas en ventanas es

PairDStreamFunctions.reduceByKeyAndWindow .

Hay varias versiones sobrecargadas de esta API, veamos cuál tiene la mayor cantidad de parámetros. Después de esta explicación, el resto de las versiones sobrecargadas de esta API deberían explicarse por sí mismas.

Devuelve: DStream transformado [(K, V)]

reduceFunc : La función asociativa reducir.

invReduceFunc : La inversa de la función de reducción anterior. Esto es necesario para la computación eficiente de lotes entrantes y salientes. Con la ayuda de esta función, el valor de los lotes salientes se deduce del valor acumulado de la función de reducción anterior. Por ejemplo, si estamos calculando la suma de los valores entrantes para las claves respectivas, entonces para los lotes salientes restaremos los valores para las claves respectivas (siempre que estén presentes en el lote actual, de lo contrario, ignore).

windowDuration : Unidades de tiempo para agrupar los lotes, debe ser un múltiplo del intervalo de lotes.

slideDuration : Unidades de tiempo para el cálculo, debe ser un múltiplo del intervalo de lote. particiones : El particionador que se utilizará para almacenar el DStream resultante. Para obtener más información sobre particiones, lea esta .

filterFunc : Función para filtrar los pares clave-valor vencidos, es decir, por ejemplo, si no obtenemos una actualización para una clave durante algún tiempo, es posible que deseemos eliminarla.

Aquí está un programa para contar las palabras provenientes de un flujo de socket. Hemos utilizado una versión sobrecargada de la función anterior con un intervalo de ventana de 4 segundos y un intervalo de diapositiva de 2 segundos.

En mi próximo blog escribiré sobre el seguimiento de sesiones completas y los puntos de control.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios y nos pondremos en contacto con usted.

Artículos Relacionados:

Almacenamiento en caché distribuido con variables de difusión