Leí la Descripción general del modo de clúster y todavía no puedo entender los diferentes procesos en el clúster autónomo de Spark y el paralelismo.
¿Es el trabajador un proceso JVM o no? Ejecuté el bin\start-slave.sh
y descubrí que engendró al trabajador, que en realidad es una JVM.
Según el enlace anterior, un ejecutor es un proceso lanzado para una aplicación en un nodo de trabajo que ejecuta tareas. Un ejecutor también es una JVM.
Estas son mis preguntas:
Los ejecutores son por aplicación. Entonces, ¿cuál es el papel de un trabajador? ¿Se coordina con el ejecutor y comunica el resultado al conductor? ¿O el conductor habla directamente con el albacea? Si es así, ¿cuál es el propósito del trabajador entonces?
¿Cómo controlar el número de ejecutores para una aplicación?
¿Se pueden hacer que las tareas se ejecuten en paralelo dentro del ejecutor? Si es así, ¿cómo configurar el número de hilos para un ejecutor?
¿Cuál es la relación entre un trabajador, ejecutores y núcleos de ejecutor (--total-executeor-cores)?
¿Qué significa tener más trabajadores por nodo?
Actualizado
Tomemos ejemplos para entender mejor.
Ejemplo 1: un clúster independiente con 5 nodos de trabajo (cada nodo tiene 8 núcleos) cuando inicio una aplicación con la configuración predeterminada.
Ejemplo 2 La misma configuración de clúster que en el ejemplo 1, pero ejecuto una aplicación con la siguiente configuración --executor-cores 10 --total-executeor-cores 10.
Ejemplo 3 La misma configuración de clúster que en el ejemplo 1, pero ejecuto una aplicación con la siguiente configuración --executor-cores 10 --total-executeor-cores 50.
Ejemplo 4 La misma configuración de clúster que en el ejemplo 1, pero ejecuto una aplicación con la siguiente configuración --executor-cores 50 --total-executeor-cores 50.
Ejemplo 5 La misma configuración de clúster que en el ejemplo 1, pero ejecuto una aplicación con la siguiente configuración --executor-cores 50 --total-executeor-cores 10.
En cada uno de estos ejemplos, ¿Cuántos ejecutores? ¿Cuántos hilos por ejecutor? Cuantos núcleos ¿Cómo se decide el número de ejecutores por aplicación? ¿Es siempre igual al número de trabajadores?
fuente
--num-executors
ya no se usan en YARN.Así es como Apache Spark funciona internamente:
fuente