Visión general
- Más información sobre la arquitectura Spark
- Conozca los diferentes modos de ejecución
Introducción
Apache Spark es un motor informático unificado y un conjunto de bibliotecas para el procesamiento de datos en paralelo en clústeres de computadoras. Es el motor open source más desarrollado para esta tarea, lo que lo convierte en una herramienta estándar para cualquier desarrollador o científico de datos interesado en big data.
Spark admite múltiples lenguajes de programación ampliamente utilizados (Python, Java, Scala y R), incluye bibliotecas para diversas tareas que van desde SQL hasta transmisión y aprendizaje automático, y Spark se ejecuta en cualquier lugar, desde una computadora portátil hasta un clúster de cientos de servidores. Esto hace que sea un sistema fácil de comenzar y escalar hasta el procesamiento de big data o una escala increíblemente grande.
Con más de 500 colaboradores de 200 instituciones responsables del código y una base de usuarios de más de 225,000 miembros, Apache Spark se ha convertido en el marco de big data más común y solicitado en todas las industrias principales. Las compañías de comercio electrónico como Alibaba, las compañías de redes sociales como Tencent y el motor de búsqueda chino Baidu ejecutan operaciones de apache spark a gran escala.
Este post es un recurso único que ofrece una descripción general de la arquitectura Spark con la ayuda de un diagrama de arquitectura Spark.
Tabla de contenido
- La arquitectura de una aplicación Spark
- El conductor de Spark
- Los ejecutores de Spark
- El administrador de Cluster
- Tipos de Cluster Manager
- Modos de ejecución
- Modo de clúster
- Modo cliente
- Modo local
La arquitectura de una aplicación Spark
A continuación se muestran los componentes de alto nivel de la arquitectura de la aplicación Apache Spark:
El conductor de Spark
El conductor es el procedimiento «en el asiento del conductor» de su aplicación Spark. Es el controlador de la ejecución de una aplicación Spark y mantiene todos los estados del clúster Spark (el estado y las tareas de los ejecutores). Debe interactuar con el administrador del clúster para obtener recursos físicos y ejecutar ejecutores.
Al final del día, esto es solo un procedimiento en una máquina física que es responsable de mantener el estado de la aplicación que se ejecuta en el clúster.
Los ejecutores de Spark
Los ejecutores de Spark son los procesos que realizan las tareas asignadas por el controlador de Spark. Los ejecutores disponen una responsabilidad fundamental: tomar las tareas asignadas por el conductor, ejecutarlas e informar sobre su estado (éxito o fracaso) y resultados. Cada aplicación Spark tiene sus propios procesos ejecutores independientes.
El administrador del clúster
Spark Driver y Executors no existen en un vacío, y aquí es donde entra el administrador de clústeres. El administrador de clústeres es responsable de mantener un clúster de máquinas que ejecutarán sus aplicaciones Spark. De manera algo confusa, un administrador de clúster tendrá sus propias abstracciones de «controlador» (a veces llamado maestro) y «trabajador».
La diferencia principal es que están vinculados a máquinas físicas en lugar de procesos (como lo están en Spark). La máquina a la izquierda de la ilustración es el nodo de controlador de Cluster Manager. Los círculos representan procesos demonio que se ejecutan y gestionan cada uno de los nodos trabajadores individuales. Aún no se está ejecutando ninguna aplicación Spark; estos son solo los procesos del administrador de clústeres.
Cuando llega el momento de ejecutar una aplicación Spark, solicitamos recursos al administrador del clúster para ejecutarla. Dependiendo de cómo esté configurada nuestra aplicación, esto puede incluir un lugar para ejecutar el controlador Spark o pueden ser solo recursos para los ejecutores de nuestra aplicación Spark. A lo largo del transcurso de la ejecución de la aplicación Spark, el administrador del clúster será responsable de administrar las máquinas subyacentes en las que se ejecuta nuestra aplicación.
Hay varias cosas útiles a prestar atención sobre esta arquitectura:
- Cada aplicación tiene sus propios procesos ejecutores, que permanecen activos durante toda la aplicación y ejecutan tareas en varios subprocesos. Esto tiene la ventaja de aislar las aplicaciones entre sí, tanto en el lado de la programación (cada controlador programa sus propias tareas) como lado del ejecutor (las tareas de diferentes aplicaciones se ejecutan en diferentes JVM).
A pesar de esto, además significa que los datos no se pueden compartir entre diferentes aplicaciones Spark (instancias de SparkContext) sin escribirlos en un sistema de almacenamiento externo. - Spark es independiente del administrador del clúster subyacente. Siempre que pueda obtener procesos ejecutores y estos se comuniquen entre sí, es relativamente fácil ejecutarlo inclusive en un administrador de clúster que además admita otras aplicaciones (a modo de ejemplo, Mesos / YARN).
- El programa controlador debe escuchar y aceptar conexiones entrantes de sus ejecutores a lo largo de su vida (a modo de ejemplo, ver spark.driver.port en la sección de configuración de red). Como tal, el programa de controlador debe ser direccionable a la red desde los nodos de trabajo.
- Debido a que el controlador programa tareas en el clúster, debe ejecutarse cerca de los nodos trabajadores, preferiblemente en la misma red de área local. Si desea enviar solicitudes al clúster de forma remota, es mejor abrir una RPC al controlador y hacer que envíe operaciones desde cerca que ejecutar un controlador lejos de los nodos trabajadores.
Tipos de administradores de clústeres
En este momento, el sistema admite varios administradores de clústeres:
- Ser único – un administrador de clúster simple incluido con Spark que facilita la configuración de un clúster.
- Apache Mesos – un administrador de clúster general que además puede ejecutar Hadoop MapReduce y aplicaciones de servicio.
- Hadoop HILO – el administrador de recursos en Hadoop 2.
- Kubernetes – un sistema open source para automatizar la implementación, el escalado y la administración de aplicaciones en contenedores.
Existe un proyecto de terceros (no admitido por el proyecto Spark) para agregar soporte para Nómada como administrador de clúster.
Modos de ejecución
Un modo de ejecución le da el poder de determinar dónde están ubicados físicamente los recursos antes mencionados cuando ejecuta su aplicación. Tiene tres modos para seleccionar:
- Modo de clúster
- Modo cliente
- Modo local
Modo de clúster
El modo de clúster es probablemente la forma más común de ejecutar aplicaciones Spark. En el modo de clúster, un usuario envía un JAR, un script Python o un script R precompilado a un administrador del clúster. Después, el administrador del clúster lanza el procedimiento del controlador en un nodo trabajador dentro del clúster, al mismo tiempo de los procesos ejecutores. Esto significa que el administrador del clúster es responsable de mantener todos los procesos relacionados con la aplicación Spark.
Modo cliente
El modo de cliente es casi el mismo que el modo de clúster, excepto que el controlador Spark permanece en la máquina cliente que envió la solicitud. Esto significa que la máquina cliente es responsable de mantener el procedimiento del controlador Spark y el administrador del clúster mantiene los procesos ejecutores. Estas máquinas se conocen comúnmente como máquinas de puerta de link o nodos de borde.
Modo local
El modo local es una desviación significativa de los dos modos anteriores: ejecuta toda la aplicación Spark en una sola máquina. Logra el paralelismo por medio de hilos en esa única máquina. Esta es una forma común de aprender Spark, probar sus aplicaciones o experimentar iterativamente con el desarrollo local.
A pesar de esto, no sugerimos usar el modo local para ejecutar aplicaciones de producción.
Conclusión
En resumen, Spark nos ayuda a dividir los trabajos intensivos y de alta computación en tareas más pequeñas y concisas que después son ejecutadas por los nodos trabajadores. Además logra el procesamiento de datos en tiempo real o archivados usando su arquitectura básica.
Le recomiendo que consulte los siguientes recursos de ingeniería de datos para impulsar su conocimiento:
Espero que les haya gustado el post. Si tiene alguna duda relacionada con este post, hágamelo saber en la sección de comentarios a continuación.