Relación entre Spark, HDFS y Yarn
Relación entre Spark y HDFS
Los datos calculados por Spark provienen de múltiples fuentes de datos, como archivos locales y HDFS. La mayoría de los datos calculados por Spark provienen del HDFS. El HDFS puede leer datos a gran escala para computación paralela. Después de ser calculados, los datos se pueden almacenar en el HDFS.
Spark implica Driver y Executor. El Driver programa las tareas y el Executor ejecuta las tareas.
Figura 1 muestra el proceso de lectura de un archivo.
- Driver se interconecta con el HDFS para obtener la información del File A.
- El HDFS devuelve la información de block detallada acerca de este archivo.
- Driver establece un grado paralelo basado en la cantidad de datos de block y crea varias tasks para leer los blocks de este archivo.
- Executor ejecuta las tareas y lee los blocks detallados como parte del conjunto de datos distribuido resistentes (RDD).
Figura 2 muestra el proceso de escribir datos en un archivo.
- Driver crea un directorio donde se va a escribir el archivo.
- Basándose en el estado de distribución de RDD, se calcula el número de tasks relacionadas con la escritura de datos, y estas tareas se envían al Executor.
- Executor ejecuta estas tasks y escribe los datos RDD en el directorio creado en 1.
Relación entre Spark y Yarn
La computación y programación de Spark pueden implementarse usando el modo de Yarn. Spark disfruta de los recursos informáticos proporcionados por los clústeres de Yarn y ejecuta tareas de forma distribuida. Spark en Yarn tiene dos modos: Yarn-cluster y Yarn-client.
- Modo de Yarn-cluster
Figura 3 muestra el marco de ejecución de Spark en Yarn-cluster.
Proceso de implementación de Spark on Yarn-cluster:
- El cliente genera la información de la aplicación y, a continuación, envía la información a ResourceManager.
- ResourceManager asigna el primer container (ApplicationMaster) a SparkApplication e inicia el driver en el container.
- ApplicationMaster se aplica a los recursos de ResourceManager para ejecutar el container.
ResourceManager asigna el container a ApplicationMaster, que se comunica con NodeManager, e inicia el executor en el container obtenido. Después de iniciar el executor, se registra con el driver y se aplica a tasks.
- El driver asigna tasks al executor.
- El executor ejecuta tasks e informa del estado operativo al driver.
- Modo de Yarn-client
Figura 4 muestra el marco de ejecución de Spark en Yarn-cluster.
Proceso de implementación de Spark on Yarn-client:
En el modo Yarn-client, Driver se despliega en el client y se inicia en el client. En el modo Yarn-client, el cliente de la versión anterior es incompatible. Se recomienda utilizar el modo Yarn-cluster.
- El cliente envía la solicitud de aplicación de Spark a ResourceManager y, a continuación, ResourceManager devuelve los resultados. Los resultados incluyen información como Application ID y los recursos máximos y mínimos disponibles. El cliente empaqueta toda la información necesaria para iniciar ApplicationMaster y envía la información a ResourceManager.
- Después de recibir la solicitud, ResourceManager encuentra un nodo apropiado para ApplicationMaster y lo inicia en este nodo. ApplicationMaster es un papel en Yarn, y el nombre del proceso en Spark es ExecutorLauncher.
- En función de los requerimientos de recursos de cada tarea, el ApplicationMaster puede solicitar una serie de containers para ejecutar tareas desde ResourceManager.
- Después de recibir la lista de container recién asignados (de ResourceManager), ApplicationMaster envía información a los NodeManagers relacionados para iniciar los containers.
ResourceManager asigna los containers a ApplicationMaster, que se comunica con los NodeManagers relacionados e inicia los executors en los containers obtenidos. Una vez iniciados los executors, se registra con los drivers y se aplica a tasks.
Los containers en ejecución no se suspenden y los recursos no se liberan.
- Los drivers asignan tasks a los executors. El executor ejecuta tasks e informa del estado operativo al driver.