spark retainedjobs maxretries jars deploy defaultcores yarn apache-spark

yarn - retainedjobs - spark port maxretries



¿Qué es el modo yarn-client en Spark? (6)

Apache Spark ha actualizado recientemente la versión a 0.8.1, en la cual el modo yarn-client está disponible. Mi pregunta es, ¿qué significa realmente el modo yarn-client? En la documentación dice:

With yarn-client mode, the application will be launched locally. Just like running application or spark-shell on Local / Mesos / Standalone mode. The launch method is also the similar with them, just make sure that when you need to specify a master url, use “yarn-client” instead

¿Qué significa "lanzado localmente"? Localmente ¿dónde? En el clúster Spark?
¿Cuál es la diferencia específica del modo de hilo independiente?


Antes que nada, aclaremos cuál es la diferencia entre ejecutar Spark en modo independiente y ejecutar Spark en un administrador de clúster (Mesos o YARN).

Cuando ejecuta Spark en modo independiente, tiene:

  • un nodo maestro Spark
  • algunos nodos de esclavos Spark, que han sido "registrados" con el maestro Spark

Asi que:

  • el nodo maestro ejecutará las tareas de envío del controlador Spark a los ejecutores y también realizará cualquier negociación de recursos, que es bastante básica. Por ejemplo, de forma predeterminada, cada trabajo consumirá todos los recursos existentes.
  • los nodos esclavos ejecutarán los ejecutores Spark, ejecutando las tareas enviadas desde el controlador.

Cuando utilizo un administrador de clúster (describiré para YARN, que es el caso más común), usted tiene:

  • Un administrador de recursos YARN (ejecutándose constantemente), que acepta solicitudes de nuevas aplicaciones y nuevos recursos (contenedores YARN)
  • Múltiples administradores de nodo YARN (ejecutándose constantemente), que consisten en el grupo de trabajadores, donde el administrador de recursos asignará los contenedores.
  • Un Application Master (que se ejecuta durante la duración de una aplicación YARN), que es responsable de solicitar contenedores del Resource Manager y enviar comandos a los contenedores asignados.

Tenga en cuenta que hay 2 modos en ese caso: cluster-mode y client-mode . En el modo cliente, que es el que mencionaste:

  • el controlador Spark se ejecutará en la máquina, donde se ejecuta el comando.
  • El Application Master se ejecutará en un contenedor asignado en el clúster.
  • Los ejecutores de Spark se ejecutarán en contenedores asignados.
  • El controlador Spark será responsable de instruir al maestro de aplicaciones para que solicite recursos y envíe comandos a los contenedores asignados, recibiendo sus resultados y proporcionando los resultados.

Entonces, volviendo a tus preguntas:

¿Qué significa "lanzado localmente"? Localmente ¿dónde? En el clúster Spark?

Localmente significa en el servidor en el que está ejecutando el comando (que podría ser un spark-submit o una spark-shell ). Eso significa que podría ejecutarlo en el nodo maestro del clúster o también podría ejecutarlo en un servidor fuera del clúster (por ejemplo, su computadora portátil), siempre y cuando la configuración adecuada esté en su lugar, para que este servidor pueda comunicarse con el clúster y viceversa.

¿Cuál es la diferencia específica del modo de hilo independiente?

Como se describió anteriormente, la diferencia es que en el modo independiente, no hay ningún administrador de clústeres. Un análisis más elaborado y la categorización de todas las diferencias concretas para cada modo está disponible en este article .


Con el modo yarn-client, su aplicación de chispa se ejecuta en su máquina local. Con el modo independiente de hilo, su aplicación de chispa se enviará al ResourceManager de YARN como hilo ApplicationMaster, y su aplicación se ejecutará en un nodo de hilos donde se está ejecutando ApplicationMaster. En ambos casos, el hilo sirve como administrador del clúster de chispa. Su aplicación (SparkContext) envía tareas al hilo.


Entonces en chispa tienes dos componentes diferentes. Está el conductor y los trabajadores. En el modo yarn-cluster, el controlador se ejecuta de forma remota en un nodo de datos y los trabajadores se están ejecutando en nodos de datos separados. En el modo yarn-client, el controlador está en la máquina que inició el trabajo y los trabajadores están en los nodos de datos. En modo local, el conductor y los trabajadores están en la máquina que inició el trabajo.

Cuando ejecuta .collect (), los datos de los nodos de trabajador se insertan en el controlador. Básicamente es donde ocurre el último tramo de procesamiento.

Por mi parte, he encontrado que el modo hilado-cluster es mejor cuando estoy en casa en el vpn, pero el modo hilado-cliente es mejor cuando estoy ejecutando código desde el centro de datos.

El modo Yarn-client también significa que usted asocia un nodo menos trabajador para el controlador.


Tanto la chispa como el hilo son estructuras distribuidas, pero sus roles son diferentes:

Yarn es un marco de gestión de recursos, para cada aplicación, tiene los siguientes roles:

ApplicationMaster: gestión de recursos de una sola aplicación, que incluye solicitar / liberar recursos de Yarn para la aplicación y el monitor.

Intento: un intento es solo un proceso normal que hace parte del trabajo completo de la aplicación. Por ejemplo, un trabajo mapreduce que consiste en múltiples mapeadores y reductores, cada mapeador y reductor es un Intento.

Un proceso común de cumbre de una aplicación al hilo es:

  1. El cliente envía la solicitud de aplicación al hilo. En la solicitud, Yarn debe conocer la clase ApplicationMaster; Para SparkApplication, es org.apache.spark.deploy.yarn.ApplicationMaster , para el trabajo de MapReduce, es org.apache.hadoop.mapreduce.v2.app.MRAppMaster .

  2. Yarn asigna algún recurso para el proceso de ApplicationMaster e inicia el proceso de ApplicationMaster en uno de los nodos del clúster;

  3. Después de que se inicie ApplicationMaster, ApplicationMaster solicitará recursos de Yarn para esta aplicación y pondrá en marcha al trabajador;

Para Spark, el marco informático distribuido, un trabajo informático se divide en muchas tareas pequeñas y cada ejecutor será responsable de cada tarea, el controlador recogerá el resultado de todas las tareas del ejecutor y obtendrá un resultado global. Una aplicación de chispa tiene solo un controlador con múltiples ejecutores.

Entonces, el problema surge cuando Spark usa Yarn como una herramienta de administración de recursos en un clúster:

  • En el modo de clúster de hilo, el cliente de Spark enviará la aplicación de chispa al hilo, tanto Spark Driver como Spark Executor están bajo la supervisión de hilo. En la perspectiva de hilo, Spark Driver y Spark Executor no tienen ninguna diferencia, pero los procesos normales de Java, es decir, un proceso de trabajo de aplicación. Por lo tanto, cuando el proceso del cliente se ha ido, por ejemplo, el proceso del cliente finaliza o se cancela, la aplicación Spark en el hilo sigue ejecutándose.

  • En el modo cliente de hilo, solo el Spark Executor está bajo el
    supervisión de hilo. The Yarn ApplicationMaster solicitará recursos para el ejecutor de chispa solo. El programa del controlador se ejecuta en el proceso del cliente y no tiene nada que ver con el hilo, solo un proceso que envía la aplicación al hilo. Por lo tanto, cuando el cliente se va, por ejemplo, el cliente
    proceso de salidas, el controlador está inactivo y la informática termina.


Una aplicación Spark consiste en un controlador y uno o muchos ejecutores. El programa del controlador es el programa principal (donde SparkContext instancia de SparkContext ), que coordina a los ejecutores para ejecutar la aplicación Spark. Los ejecutores ejecutan las tareas asignadas por el controlador.

Una aplicación YARN tiene las siguientes funciones: cliente de hilo, maestro de aplicación de hilo y lista de contenedores que se ejecutan en los administradores de nodos.

Cuando la aplicación Spark se ejecuta en YARN, tiene su propia implementación de cliente de hilo y maestro de aplicación de hilo.

Con esos antecedentes, la principal diferencia es donde se ejecuta el programa del controlador.

  1. Modo autónomo de hilo: su programa de controlador se ejecuta como un hilo del maestro de aplicación de hilos, que se ejecuta en uno de los administradores de nodos del clúster. El cliente de Yarn simplemente extrae el estado del maestro de la aplicación. Este modo es el mismo que en un trabajo de reducción de mapas, donde el maestro de la aplicación MR coordina los contenedores para ejecutar las tareas de asignación / reducción.
  2. Modo cliente de hilo: su programa de controlador se está ejecutando en el cliente de hilo en el que escribe el comando para enviar la aplicación de chispa (puede no ser una máquina en el grupo de hilo). En este modo, aunque el programa de accionamiento se ejecuta en la máquina cliente, las tareas se ejecutan en los ejecutores en los gestores de nodo del clúster YARN.

Referencia: http://spark.incubator.apache.org/docs/latest/cluster-overview.html


Una aplicación Spark ejecutándose

modo hilo-cliente:

  1. el programa del controlador se ejecuta en la máquina del cliente o en la máquina local donde se ha iniciado la aplicación.

  2. La asignación de recursos se realiza mediante el administrador de recursos YARN en función de la localidad de datos en los nodos de datos y el programa del controlador de la máquina local controlará los ejecutores en el grupo de chispa (administradores de nodos).

Por favor, consulte este article cloudera para más información.

La diferencia entre el modo independiente y el modo de despliegue de hilo

  1. La optimización de recursos no será eficiente en el modo independiente.
  2. En el modo independiente, el programa del controlador ejecuta un ejecutor en cada nodo de un clúster independientemente de la localidad de datos.
  3. standalone es bueno para el caso de uso, donde solo se está ejecutando su aplicación de chispa y el clúster no necesita asignar recursos para otros trabajos de manera eficiente.