Este documento ofrece una breve descripción general de cómo se ejecuta Spark en clústeres, para facilitar la comprensión de los componentes involucrados. Lea la guía de envío de aplicaciones para obtener más información sobre el inicio de aplicaciones en un clúster.
Las aplicaciones Spark se ejecutan como conjuntos independientes de procesos en un clúster, coordinados por el objeto SparkContext
de su programa principal (llamado programa de controladores).
Específicamente, para ejecutarse en un clúster, SparkContext puede conectarse a varios tipos de administradores de clúster(ya sea el administrador de clúster independiente de Spark, Mesos o YARN), que asignan recursos a aplicaciones cruzadas. Una vez conectado, Spark adquiere ejecutores en los nodos del clúster, que son procesos que ejecutan cálculos y almacenan datos para su aplicación.A continuación, envía el código de la aplicación (definido por archivos JAR o Python pasados a SparkContext) a los ejecutores. Finalmente, SparkContext envía tareas a los ejecutores para que se ejecuten.
Hay varias cosas útiles a tener en cuenta sobre esta arquitectura:
- Cada aplicación obtiene sus propios procesos ejecutores, que permanecen activos durante toda la aplicación y ejecutan tareas en múltiples subprocesos. Esto tiene la ventaja de aislar aplicaciones entre sí, tanto en el lado de la programación (cada controlador programa sus propias tareas) como en el lado del ejecutor (tareas de diferentes aplicaciones que se ejecutan en diferentes JVM). Sin embargo, también significa que los datos no se pueden compartir entre diferentes aplicaciones de Spark (instancias de SparkContext) sin escribirlos en un sistema de almacenamiento externo.
- Spark es independiente del administrador de clúster subyacente. Mientras pueda adquirir procesos de ejecución, y estos se comuniquen entre sí, es relativamente fácil ejecutarlo incluso en un administrador de iluminación que también admite otras aplicaciones (por ejemplo, Mesos/YARN).
- El programa de controladores debe escuchar y aceptar conexiones entrantes de sus ejecutores durante toda su vida útil (por ejemplo, consulte spark.controlador.puerto en la sección configuración de red). Como tal, el programa de controladores 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 workernodes, preferiblemente en la misma red de área local. Si desea enviar solicitudes al clúster de forma remota, es mejor abrir un RPC al controlador y hacer que envíe operaciones desde cerca que ejecutar un controlador lejos de los nodos de trabajo.
Tipos de administrador de clúster
El sistema admite actualmente varios administradores de clúster:
- Independiente: un sencillo administrador de clústeres incluido con Spark que hace que sea fácil configurar un clúster.
- Apache Mesos: un administrador de clústeres general que también puede ejecutar aplicaciones Hadoop MapReduce y service.
- Hadoop YARN-el administrador de recursos en Hadoop 2.
- Kubernetes: un sistema de código abierto para automatizar la implementación,el escalado y la administración de aplicaciones en contenedores.
Existe un proyecto de terceros (que no es compatible con el proyecto Spark) para agregar compatibilidad con forNomad como administrador de clúster.
Enviar solicitudes
Las solicitudes se pueden enviar a un clúster de cualquier tipo utilizando el script spark-submit
.La guía de envío de solicitudes describe cómo hacerlo.
Supervisión
Cada programa de controlador tiene una interfaz de usuario web, normalmente en el puerto 4040, que muestra información sobre las tareas de ejecución, los ejecutores y el uso del almacenamiento. Simplemente vaya a en un navegador web para acceder a esta interfaz de usuario. La guía de monitoreo también describe otras opciones de monitoreo.
Programación de trabajos
Spark proporciona control sobre la asignación de recursos tanto entre aplicaciones (a nivel del administrador de clústeres) como dentro de las aplicaciones (si se realizan varios cálculos en el mismo SparkContext).La descripción general de la programación de trabajos describe esto con más detalle.
Glosario
La siguiente tabla resume los términos que verás utilizados para referirse a conceptos de clúster:
Término | Significado |
---|---|
Aplicación | Programa de usuario basado en Spark. Consiste en un programa de controladores y ejecutores en el clúster. |
Jar de aplicación | Un jar que contiene la aplicación Spark del usuario. En algunos casos, los usuarios querrán crear un «uber jar» que contenga su aplicación junto con sus dependencias. El jar del usuario nunca debe incluir bibliotecas Hadoop o Spark, sin embargo, se agregarán en tiempo de ejecución. |
Programa de controladores | El proceso que ejecuta la función main() de la aplicación y crea el SparkContext |
Gestor de clúster | Un servicio externo para adquirir recursos en el clúster (por ejemplo, gestor independiente, Mesos, YARN) |
El modo de implementación | Distingue dónde se ejecuta el proceso del controlador. En el modo «clúster», el marco inicia el controlador dentro del clúster. En el modo «cliente», el remitente inicia el controlador fuera del clúster. |
Nodo de trabajo | Cualquier nodo que pueda ejecutar código de aplicación en el clúster |
Ejecutor | Proceso iniciado para una aplicación en un nodo de trabajo, que ejecuta tareas y mantiene los datos en memoria o almacenamiento en disco a través de ellas. Cada aplicación tiene sus propios ejecutores. |
Tarea | Una unidad de trabajo que se enviará a un ejecutor |
Trabajo | Un cálculo paralelo que consiste en múltiples tareas que se generan en respuesta a una acción de Chispa (por ejemplo, save , collect ); verá que este término se usa en los registros del conductor. |
Etapa | Cada trabajo se divide en conjuntos más pequeños de tareas llamadas etapas que dependen unas de otras (similar al mapa y reducir etapas en MapReduce); verá que este término se usa en los registros del controlador. |