Li a Visão geral do modo de cluster e ainda não consigo entender os diferentes processos no cluster do Spark Standalone e o paralelismo.
O trabalhador é um processo da JVM ou não? Eu executei o bin\start-slave.sh
e descobri que ele gerou o trabalhador, que na verdade é uma JVM.
Conforme o link acima, um executor é um processo iniciado para um aplicativo em um nó de trabalho que executa tarefas. Um executor também é uma JVM.
Estas são as minhas perguntas:
Executores são por aplicativo. Então, qual é o papel de um trabalhador? Ele coordena com o executor e comunica o resultado de volta ao driver? Ou o motorista fala diretamente com o executor? Se sim, qual é o propósito do trabalhador?
Como controlar o número de executores de um aplicativo?
As tarefas podem ser executadas em paralelo dentro do executor? Se sim, como configurar o número de threads de um executor?
Qual é a relação entre um trabalhador, executores e núcleos de executores (--total-executor-cores)?
O que significa ter mais trabalhadores por nó?
Atualizada
Vamos dar exemplos para entender melhor.
Exemplo 1: Um cluster autônomo com 5 nós de trabalho (cada nó com 8 núcleos) Quando inicio um aplicativo com configurações padrão.
Exemplo 2 Mesma configuração de cluster do exemplo 1, mas eu executo um aplicativo com as seguintes configurações --executor-cores 10 --total-executor-cores 10.
Exemplo 3 A mesma configuração de cluster do exemplo 1, mas eu executo um aplicativo com as seguintes configurações --executor-cores 10 --total-executor-cores 50.
Exemplo 4 mesma configuração de cluster do exemplo 1, mas eu executo um aplicativo com as seguintes configurações --executor-cores 50 --total-executor-cores 50.
Exemplo 5 mesma configuração de cluster do exemplo 1, mas eu executo um aplicativo com as seguintes configurações --executor-cores 50 --total-executor-cores 10.
Em cada um desses exemplos, quantos executores? Quantos threads por executor? Quantos núcleos? Como é decidido o número de executores por aplicativo? É sempre o mesmo que o número de trabalhadores?
fonte
--num-executors
não estão mais em uso no YARN.É assim que o Apache Spark trabalha internamente:
fonte