Spark Streaming.
1/7
Como ya vimos en el punto anterior Apache Spark es un framework de procesamiento de datos
de Hadoop. Nos vamos a centrar en este punto en Spark Streaming que es la herramienta que nos
permitirá realizar el proceso de Streaming Processing.
Una clave de Spark es que permite el procesamiento continuo y esto se logra a través del
componente Spark Streaming.
Spark Streaming puede coger datos de un gran rango de fuentes (Incluso flujos que provengan de
Apache Flume, Amazon Kinesis, Apache Kafka o Twitter), así como también de dispositivos y
sensores mediante sockets TCP.
También es posible recoger datos que estén en sistemas de archivos (Amazon S3, HDFS).
Procesamiento de datos
1 Siguiente
Spark Streaming.
2/7
Principalmente, lo que Spark Streaming realiza es coger un flujo de datos continuo y transformarlo
en un flujo discreto (Dstream).
De forma interna, Spark Streaming guarda estos datos como una secuencia de RDDs. Un
Rdd es un conjunto de datos particionados e inmutables ya que es la unidad de información
que, tradicionalmente, el Spark Core consume.
Al ejecutar el Spark Core mandándole información mediante Spark Streaming, éste no se entera
de que está procesando un flujo de datos, sino que ejecuta de forma normal dicho procesamiento
ya que el trabajo de coordinar y crear los RDDs está asignado a Spark Streaming.
Anterior 1 2 Siguiente
2/7
Spark Streaming.
2/7
Principalmente, lo que Spark Streaming realiza es coger un flujo de datos continuo y transformarlo
en un flujo discreto (Dstream).
De forma interna, Spark Streaming guarda estos datos como una secuencia de RDDs. Un
Rdd es un conjunto de datos particionados e inmutables ya que es la unidad de información
que, tradicionalmente, el Spark Core consume.
Al ejecutar el Spark Core mandándole información mediante Spark Streaming, éste no se entera
de que está procesando un flujo de datos, sino que ejecuta de forma normal dicho procesamiento
ya que el trabajo de coordinar y crear los RDDs está asignado a Spark Streaming.
Anterior 1 2 Siguiente
2/7
Spark Streaming.
3/7
Modelos de procesamiento
Spark Streaming puede soportar varios modelos que se corresponden con las semánticas que
se utilizan para procesar los flujos de datos. Estos flujos pueden ser procesados por alguno de
los siguientes modelos:
1. "Exactly Once"
El procesamiento de cada elemento se realiza una sola vez.
2. "At most Once"
3. "At Least Once"
No todos los tipos de fuentes soportan todos los modelos, hay que verificar dicha relación y
verificar que puede ser soportada.
Ejercicio
Relaciona los elementos de la columna derecha con la columna izquierda
(Introducir números en las casillas de la columna derecha)
Exactly once. 1 El procesamiento de cada
elemento se realiza como
mínimo una vez. Esto hace que
At most once. 2 sea menos probable perder
datos pero también aumenta el
riesgo de duplicarlos.
At least once. 3
El procesamiento de cada
elemento se realiza como
máximo una vez aunque es
posible que no llegue a ser
procesado.
El procesamiento de cada
elemento se realiza una sola
vez.
Comprobar Reintentar (5) para Mostrar solución
Spark Streaming.
3/7
Modelos de procesamiento
Spark Streaming puede soportar varios modelos que se corresponden con las semánticas que
se utilizan para procesar los flujos de datos. Estos flujos pueden ser procesados por alguno de
los siguientes modelos:
1. "Exactly Once"
El procesamiento de cada elemento se realiza una sola vez.
2. "At most Once"
3. "At Least Once"
No todos los tipos de fuentes soportan todos los modelos, hay que verificar dicha relación y
verificar que puede ser soportada.
Ejercicio
Relaciona los elementos de la columna derecha con la columna izquierda
(Introducir números en las casillas de la columna derecha)
Exactly once. 1 El procesamiento de cada
elemento se realiza como
mínimo una vez. Esto hace que
At most once. 2 sea menos probable perder
datos pero también aumenta el
riesgo de duplicarlos.
At least once. 3
El procesamiento de cada
elemento se realiza como
máximo una vez aunque es
posible que no llegue a ser
procesado.
El procesamiento de cada
elemento se realiza una sola
vez.
¡Correcto! ×
Spark Streaming puede soportar varios modelos que se
corresponden con las semánticas que se utilizan para procesar los
flujos de datos. Estos flujos pueden ser procesador por alguno de
los anteriores modelos.
Comprobar Reintentar Mostrar solución
Anterior 1 2 3 Siguiente
3/7
Spark Streaming.
4/7
El modelo más sencillo de realizar, desde un punto de vista de procesamiento, es "at most once".
Es así ya que se acepta que, de forma ocasional, pueda perderse algún dato ya que lo importante
es que el flujo continúe. Por Ejemplo: En un stream de video, ocasionalmente se pierden paquetes y
baja la calidad, pero lo importante es que el vídeo continúe y que no haya que empezar desde el
inicio.
Bajo el modelo "at least once", existe la garantía de que, aunque falle algún nodo, no se
perderán datos ya que cuando el nodo esté recuperado se procesarán todos los datos para que no
se vaya ninguno. Si tomáramos como ejemplo el streaming de vídeo anterior, bajo este modelo lo
que sucedería es que, al ejecutar todos los datos con buena calidad, se podría repetir algún pedazo
anterior que ya hemos visto.
Habitualmente, lo normal es escoger el modelo "exactly once" pero hay que tener cuidado ya que
es el que más recursos consume y puede ocasionarnos algún problema de desempeño ya que
requiere de mucho procesamiento adicional para asegurar que no se pierda información.
Anterior 1 2 3 4 Siguiente
4/7
Spark Streaming.
5/7
Vamos a crear un programa que cuente el número de palabras de un texto recibido de un
servidor:
Anterior 1 2 3 4 5 Siguiente
Spark Streaming.
5/7
Vamos a crear un programa que cuente el número de palabras de un texto recibido de un
servidor:
Anterior 1 2 3 4 5 Siguiente
5/7
Spark Streaming.
6/7
Una vez ejecutadas estas líneas en Spark deberemos de iniciar la computación.
Programa completo:
Anterior 1 2 3 4 5 6 Siguiente
Spark Streaming.
7/7
Podemos utilizar la herramienta netcat como servidor de datos usando el siguiente comando:
Nc –lk 9999
Entonces en una terminal podremos ejecutar el programa.
./programa localhost 9999
En la terminal en la que tengamos abierto netcat escribiremos una línea de texto y la enviaremos.
En la terminal donde hemos ejecutado el programa nos saldrá algo así:
Anterior 1 2 3 4 5 6 7
7/7