Tutorial de transmisión de Apache Spark para principiantes: funcionamiento, arquitectura y características
Publicado: 2020-02-27Actualmente vivimos en un mundo donde se genera una gran cantidad de datos cada segundo a un ritmo acelerado. Estos datos pueden proporcionar resultados significativos y útiles si se analizan con precisión. También puede ofrecer soluciones a muchas industrias en el momento adecuado.
Estos son muy útiles en industrias tales como servicios de viaje, comercio minorista, medios de comunicación, finanzas y atención médica. Muchas otras empresas importantes han adoptado el análisis de datos, como el seguimiento de la interacción del cliente con diferentes tipos de productos realizado por Amazon en su plataforma o los espectadores que reciben recomendaciones personalizadas en tiempo real, que proporciona Netflix.
Puede ser utilizado por cualquier empresa que use una gran cantidad de datos, y puede analizarlos en su beneficio para mejorar el proceso general en su negocio y aumentar la satisfacción del cliente y las experiencias de los usuarios. Mejores experiencias de usuario y satisfacción del cliente brindan beneficios a la organización, a largo plazo, para expandir el negocio y obtener ganancias.
Tabla de contenido
¿Qué es la transmisión?
La transmisión de datos es un método en el que la información se transfiere como un flujo continuo y constante. A medida que Internet crece, las tecnologías de transmisión también aumentan.
¿Qué es Spark Streaming?
Cuando los datos llegan continuamente en una secuencia sin vincular, se denomina flujo de datos. Los datos de entrada fluyen constantemente y se dividen por transmisión. El procesamiento posterior de los datos se realiza después de dividirlos en unidades discretas. El análisis de datos y el procesamiento de datos a baja latencia se denomina procesamiento de flujo.
En 2013, se agregó Apache Spark con Spark Streaming. Hay muchas fuentes desde las que puede ocurrir la ingesta de datos, como TCP Sockets, Amazon Kinesis, Apache Flume y Kafka. Con la ayuda de algoritmos sofisticados, se realiza el procesamiento de datos. Se utiliza una función de alto nivel como ventana, unión, reducción y mapa para expresar el procesamiento. Los paneles en vivo, las bases de datos y los sistemas de archivos se utilizan para enviar los datos procesados a los sistemas de archivos.

Funcionamiento de Stream
Los siguientes son el funcionamiento interno. Spark Streaming divide los flujos de datos de entrada en vivo en lotes. Spark Engine se usa para procesar estos lotes para generar lotes de flujo final como resultado.
Los datos de la transmisión se dividen en lotes pequeños y se representan mediante Apache Spark Discretized Stream (Spark DStream). Spark RDD se usa para construir DStreams, y esta es la abstracción de datos central de Spark. Cualquier componente de Apache Spark, como Spark SQL y Spark MLib, se puede integrar fácilmente con Spark Streaming sin problemas.
Spark Streaming ayuda a escalar los flujos de datos en vivo. Es una de las extensiones de la API central de Spark. También permite el procesamiento de secuencias tolerantes a fallas y de alto rendimiento. El uso de Spark Streaming realiza procesamiento y transmisión en tiempo real de datos en vivo. Las principales empresas del mundo están utilizando el servicio de Spark Streaming, como Pinterest, Netflix y Uber.
Spark Streaming también proporciona un análisis de datos en tiempo real. El procesamiento de datos en vivo y rápido se realiza en la plataforma única de Spark Streaming.
Lea también Arquitectura Apache Spark
¿Por qué Spark Streaming?
Spark Streaming se puede utilizar para transmitir datos en tiempo real desde diferentes fuentes, como Facebook, Stock Market y Geographical Systems, y realizar análisis potentes para alentar a las empresas.
Hay cinco aspectos significativos de Spark Streaming que lo hacen tan único, y son:
1. Integración
Bibliotecas avanzadas como procesamiento de gráficos, aprendizaje automático, SQL se pueden integrar fácilmente con él.
2. Combinación
Los datos que se transmiten se pueden realizar junto con consultas interactivas y también conjuntos de datos estáticos.
3. Equilibrio de carga
Spark Streaming tiene un equilibrio perfecto de carga, lo que lo hace muy especial.
4. Uso de recursos
Spark Streaming utiliza el recurso disponible de forma muy óptima.
5. Recuperación de rezagados y fracasos
Spark Streaming puede recuperarse rápidamente de cualquier tipo de falla o retraso.
Necesidad de Streaming en Apache Spark
El modelo de operador continuo se usa al diseñar el sistema para procesar flujos tradicionalmente para procesar los datos. El funcionamiento del sistema es el siguiente:
- Las fuentes de datos se utilizan para transmitir los datos. Los diferentes tipos de fuentes de datos son dispositivos IoT, datos de telemetría del sistema, registros en vivo y muchos más. Estos datos de transmisión se ingieren en sistemas de ingestión de datos como Amazon Kinesis, Apache Kafka y muchos más.
- En un clúster, el procesamiento paralelo se realiza en los datos.
- Los sistemas posteriores como Kafka, Cassandra, HBase se utilizan para pasar los resultados.
Un conjunto de nodos trabajadores ejecuta algunos operadores continuos. El procesamiento de registros de datos transmitidos se realiza de uno en uno. Luego, los documentos se envían a los siguientes operadores en la tubería.
Los operadores de origen están acostumbrados a recibir datos de los sistemas de ingesta. Los operadores de sumidero están acostumbrados a dar salida al sistema aguas abajo.
Algunos operadores son continuos. Se trata de un modelo natural y directo. Cuando se trata de análisis de datos complejos en tiempo real, que se realiza a gran escala, la arquitectura tradicional enfrenta algunos desafíos en el mundo moderno, y son:
Recuperación rápida de fallas
En el sistema actual, las fallas se acompañan y solucionan rápidamente mediante la recuperación de la información perdida mediante el cálculo de la información faltante en nodos paralelos. Por lo tanto, hace que la recuperación sea aún más rápida en comparación con los sistemas tradicionales.
equilibrador de carga
El equilibrador de carga ayuda a asignar recursos y datos entre el nodo de una manera más eficiente para que ningún recurso esté esperando o sin hacer nada, pero los datos se distribuyen uniformemente en los nodos.
Unificación de cargas de trabajo interactivas, por lotes y de transmisión
También se puede interactuar con los datos de transmisión realizando consultas a los datos de transmisión. También se puede combinar con conjuntos de datos estáticos. No se pueden hacer consultas ad-hoc usando nuevos operadores porque no está diseñado para operadores continuos. Las consultas interactivas, de transmisión y por lotes se pueden combinar mediante el uso de un solo motor.
Consultas SQL y análisis con ML
El desarrollo de sistemas con un comando de base de datos común hizo que la vida del desarrollador fuera fácil de trabajar en colaboración con otros sistemas. La comunidad acepta ampliamente consultas SQL. Donde el sistema proporciona módulos y bibliotecas para el aprendizaje automático que se pueden utilizar para fines analíticos avanzados.
Resumen de transmisión de Spark
Spark Streaming utiliza un conjunto de RDD que se utiliza para procesar los datos en tiempo real. Por lo tanto, Spark Streaming generalmente se usa comúnmente para tratar el flujo de datos en tiempo real. Spark Streaming proporciona un procesamiento tolerante a fallas y de alto rendimiento de flujos de datos en vivo. Es una función adicional que viene con Core Spark API.
Funciones de transmisión de chispas
- Análisis comercial : con el uso de Spark Streaming, también se puede conocer el comportamiento de la audiencia. Estos aprendizajes pueden ser utilizados posteriormente en la toma de decisiones de las empresas.
- Integración: el procesamiento por lotes y en tiempo real está integrado con Spark
- Tolerancia a fallas : la capacidad única de Spark es que puede recuperarse de una falla de manera eficiente.
- Velocidad: Spark logra baja latencia
- Escalado: Spark puede escalar fácilmente los nodos hasta cientos.
Fundamentos de Spark Streaming
1. Contexto de transmisión
En Spark, Streaming Context consume y administra el flujo de datos. Crea un objeto de Receptor que se produce al registrar una transmisión de Entrada. Por lo tanto, es la funcionalidad principal de Spark la que se convierte en un punto de entrada crítico al sistema, ya que proporciona muchos contextos que brindan un flujo de trabajo predeterminado para diferentes fuentes como Akka Actor, Twitter y ZeroMQ.

Leer: Rol de Apache Spark en Big Data y por qué es único
Un objeto de contexto de chispa representa la conexión con un clúster de chispa. Cuando el objeto Spark Streaming se crea mediante un objeto StreamingContext, los acumuladores, los RDD y las variables de transmisión también se pueden crear como un objeto SparkContex.
2. Puntos de Control, Variables de Difusión y Acumuladores
puntos de control
Checkpoint funciona de manera similar a Checkpoints, que almacena el estado de los sistemas al igual que en los juegos. Donde, en este caso, Checkpoints ayuda a reducir la pérdida de recursos y hace que el sistema sea más resistente a las fallas del sistema. Una metodología de punto de control es una mejor manera de realizar un seguimiento y guardar los estados del sistema para que, en el momento de la recuperación, se pueda retirar fácilmente.
Variables de difusión
En lugar de proporcionar la copia completa de las tareas a los nodos de la red, siempre captura una variable de solo lectura que es responsable de reconocer los nodos de diferentes tareas presentes y, por lo tanto, reduce los costos de transferencia y computación por nodos individuales. Por lo tanto, puede proporcionar un conjunto de entrada significativo de manera más eficiente. También utiliza algoritmos avanzados para distribuir la variable de transmisión a diferentes nodos de la red; por lo tanto, se reduce el costo de comunicación.
Acumuladores
Los acumuladores son variables que se pueden personalizar para diferentes propósitos. Pero también existen acumuladores ya definidos como contadores y sumadores. También hay acumuladores de seguimiento que realizan un seguimiento de cada nodo, y también se pueden agregar algunas funciones adicionales. Los acumuladores numéricos admiten muchas funciones digitales que también son compatibles con Spark. También se pueden crear acumuladores personalizados a petición del usuario.
DStream
DStream significa flujo discretizado. Spark Streaming ofrece la abstracción necesaria, que se llama Discretized Stream (DStream). DStream es un dato que fluye continuamente. De una fuente de datos, se recibe DStream. También se puede obtener de un flujo de datos procesados. La transformación del flujo de entrada genera un flujo de datos procesados.
Después de un intervalo específico, los datos están contenidos en un RDD. Una serie interminable de RDD representa un DStream.
almacenamiento en caché
Los desarrolladores pueden usar DStream para almacenar en caché los datos de la transmisión en la memoria. Esto es útil si los datos se calculan varias veces en el DStream. Se puede lograr utilizando el método persist() en un DStream.
La duplicación de datos se realiza para garantizar la seguridad de tener un sistema resistente que pueda resistir fallas en el sistema y, por lo tanto, tener la capacidad de tolerar fallas en el sistema (como Kafka, Sockets, Flume, etc.)
Ventaja y arquitectura de Spark Streaming
El procesamiento de un flujo de datos a la vez puede ser engorroso a veces; por lo tanto, Spark Streaming discretiza los datos en pequeños sublotes que son fácilmente manejables. Esto se debe a que los trabajadores de Spark obtienen búferes de datos en paralelo aceptados por el receptor de Spark Streaming. Y por lo tanto, todo el sistema ejecuta los lotes en paralelo y luego acumula los resultados finales. Luego, estas tareas cortas son procesadas en lotes por el motor Spark y los resultados se proporcionan a otros sistemas.
En la arquitectura Spark Streaming, el cómputo no se asigna ni se carga estáticamente en un nodo, sino que se basa en la localidad de los datos y la disponibilidad de los recursos. Por lo tanto, está reduciendo el tiempo de carga en comparación con los sistemas tradicionales anteriores. De ahí el uso del principio de localidad de datos, también es más fácil para la detección de fallas y su recuperación.
Los nodos de datos en Spark generalmente están representados por RDD, que es un conjunto de datos de distribución resistente.
Objetivos de Spark Streaming
Los siguientes son los objetivos alcanzados por la arquitectura Spark.
1. Equilibrio de carga dinámico
Esta es una de las características esenciales de Spark Streaming, donde los flujos de datos son asignados dinámicamente por el balanceador de carga, que es responsable de la asignación de datos y el cálculo de recursos utilizando reglas específicas definidas en él. El objetivo principal del equilibrio de carga es equilibrar la carga de trabajo de manera eficiente entre los trabajadores y poner todo en forma paralela para que no se desperdicien los recursos disponibles. Y también responsable de asignar dinámicamente recursos a los nodos trabajadores en el sistema.
2. Fracaso y Recuperación
Como en el sistema tradicional, cuando ocurre una falla en la operación, todo el sistema tiene que recalcular esa parte para recuperar la información perdida. Pero el problema surge cuando un nodo maneja toda esta recuperación y hace que todo el sistema espere a que se complete. Mientras que en Spark, la información perdida es computada por otros nodos libres y hace que el sistema vuelva a realizar un seguimiento sin esperas adicionales como en los métodos tradicionales.
Y también la tarea fallida se distribuye uniformemente en todos los nodos del sistema para volver a calcular y recuperarla de la falla más rápido que el método tradicional.
3. Lotes y consulta interactiva
El conjunto de RDD en Spark se llama DStream en Spark que proporciona una relación entre las cargas de trabajo de Streaming y los lotes. Estos lotes se almacenan en la memoria de Spark, lo que proporciona una forma eficiente de consultar los datos presentes en ella.
La mejor parte de Spark es que incluye una amplia variedad de bibliotecas que se pueden usar cuando lo requiera el sistema Spark. Algunos nombres de las bibliotecas son MLlib para aprendizaje automático, SQL para consulta de datos, GraphX y Data Frame, mientras que DStreams puede convertir Dataframe y preguntas en declaraciones SQL equivalentes.
4. Rendimiento
Como el sistema de chispas utiliza distribuciones paralelas de la tarea que mejoran su capacidad de rendimiento y, por lo tanto, aprovechan el motor de chispas que es capaz de lograr una baja latencia de hasta unos pocos 100 milisegundos.
¿Cómo funciona Spark Streaming?
Los datos en la transmisión se dividen en pequeños lotes que se denominan DStreams en Spark Streaming. Es una secuencia de RDD internamente. RDDS utiliza las API de Spark para procesar los datos y, como resultado, se devuelven los envíos. La API de Spark Streaming está disponible en Python, Java y Scala. Faltan muchas funciones en la API de Python recientemente presentada en Spark 1.2.
Los cálculos con estado se denominan un estado que Spark Streaming mantiene en función de los datos entrantes en la secuencia. Los datos que fluyen en el flujo se procesan dentro de un marco de tiempo. El desarrollador debe especificar este marco de tiempo y Spark Streaming debe permitirlo. La ventana de tiempo es el marco de tiempo dentro del cual se debe completar el trabajo. La ventana de tiempo se actualiza dentro de un intervalo de tiempo que también se conoce como intervalo deslizante en la ventana.
Fuentes de transmisión de chispas
El objeto receptor que está relacionado con un DStream de entrada, almacena los datos recibidos en la memoria Sparks para su procesamiento.
La transmisión integrada tiene dos categorías:
1. Fuente básica
Fuentes disponibles en Streaming API, por ejemplo, Conexión de socket y Sistema de archivos.
2. Fuente avanzada
El nivel avanzado de fuentes es Kinesis, Flume y Kafka, etc.
Operaciones de transmisión
Hay dos tipos de operaciones que son compatibles con Spark RDDS, y son:
1. Operaciones de salida en Apache Spark
Las operaciones de salida se utilizan para enviar los datos del DStream a un sistema externo, como un sistema de archivos o una base de datos. Las operaciones de salida permiten que los datos transformados sean consumidos por los sistemas externos. Todas las transformaciones de DStreams son ejecutadas por la activación, que es realizada por los sistemas externos.
Estas son las operaciones de salida actuales:
foreachRDD(función), [sufijo]), saveAsHadoopFiles(prefijo, [sufijo]), saveAsObjectFiles(prefijo, [sufijo])”prefix-TIME_IN_MS[.sufijo]”, saveAsTextFiles(prefijo, print()
Los RDD ejecutan con pereza operaciones de salida. Dentro de las Operaciones DStream de Salida, se toman enérgicamente Acciones RDD para ser procesadas de los datos recibidos. La ejecución de las operaciones de salida se realiza una a la vez. Las aplicaciones Spark definen el orden de ejecución de las operaciones de salida.
2. Transformación de chispa
La transformación de Spark también cambia los datos de DStream, ya que los RDD lo admiten en Spark. Al igual que Spark RDD, DStream admite muchas modificaciones.

Las siguientes son las operaciones de Transformación más comunes:
Window(), updateStateByKey(), transform(), [numTasks]), cogroup(otherStream, [numTasks]), join(otherStream, reduceByKey(func, [numTasks]), countByValue(), reduce(), union(otherStream ), contar(), repartición(númParticiones), filtro(), planoMapa(), mapa().
Conclusión
En el mundo actual basado en datos, las herramientas para almacenar y analizar datos han demostrado ser el factor clave en el análisis y el crecimiento empresarial. Big Data y las herramientas y tecnologías asociadas han demostrado tener una demanda creciente. Como tal, Apache Spark tiene un gran mercado y ofrece excelentes funciones a clientes y empresas.
Si está interesado en saber más sobre Big Data, consulte nuestro programa PG Diploma in Software Development Specialization in Big Data, que está diseñado para profesionales que trabajan y proporciona más de 7 estudios de casos y proyectos, cubre 14 lenguajes y herramientas de programación, prácticas talleres, más de 400 horas de aprendizaje riguroso y asistencia para la colocación laboral con las mejores empresas.
Aprenda cursos de desarrollo de software en línea de las mejores universidades del mundo. Obtenga Programas PG Ejecutivos, Programas de Certificado Avanzado o Programas de Maestría para acelerar su carrera.