Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2023-04-14 GMT+08:00

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.

Figura 1 Proceso de lectura de archivos
El proceso de lectura de archivos es el siguiente:
  1. Driver se interconecta con el HDFS para obtener la información del File A.
  2. El HDFS devuelve la información de block detallada acerca de este archivo.
  3. Driver establece un grado paralelo basado en la cantidad de datos de block y crea varias tasks para leer los blocks de este archivo.
  4. 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.

Figura 2 Proceso de escritura de archivos
El proceso de escritura de archivos es el siguiente:
  1. Driver crea un directorio donde se va a escribir el archivo.
  2. 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.
  3. 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.

    Figura 3 Marco de operación de Spark on Yarn-cluster

    Proceso de implementación de Spark on Yarn-cluster:

    1. El cliente genera la información de la aplicación y, a continuación, envía la información a ResourceManager.
    2. ResourceManager asigna el primer container (ApplicationMaster) a SparkApplication e inicia el driver en el container.
    3. 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.

    4. El driver asigna tasks al executor.
    5. 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.

    Figura 4 Marco de operación de Spark on Yarn-client

    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.

    1. 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.
    2. 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.
    3. En función de los requerimientos de recursos de cada tarea, el ApplicationMaster puede solicitar una serie de containers para ejecutar tareas desde ResourceManager.
    4. 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.

    5. Los drivers asignan tasks a los executors. El executor ejecuta tasks e informa del estado operativo al driver.