Vamos assumir o seguinte: apenas um trabalho do Spark está sendo executado a cada momento.
O que eu recebo até agora
Aqui está o que eu entendo o que acontece no Spark:
- Quando a
SparkContext
é criado, cada nó do trabalhador inicia um executor. Executores são processos separados (JVM), que se conectam novamente ao programa do driver. Cada executor possui o jar do programa do driver. Sair de um driver, desliga os executores. Cada executor pode conter algumas partições. - Quando um trabalho é executado, um plano de execução é criado de acordo com o gráfico de linhagem.
- O trabalho de execução é dividido em estágios, em que estágios contém tantas transformações e ações vizinhas (no gráfico de linhagem), mas sem embaralhamento. Assim, os estágios são separados por shuffles.
Eu entendi aquilo
- Uma tarefa é um comando enviado do driver para um executor serializando o objeto Function.
- O executor desserializa (com o jar do driver) o comando (tarefa) e o executa em uma partição.
mas
Questões)
Como divido o palco nessas tarefas?
Especificamente:
- As tarefas são determinadas pelas transformações e ações ou podem haver várias transformações / ações em uma tarefa?
- As tarefas são determinadas pela partição (por exemplo, uma tarefa por estágio por partição).
- As tarefas são determinadas pelos nós (por exemplo, uma tarefa por estágio por nó)?
O que eu acho (apenas resposta parcial, mesmo que correta)
Em https://0x0fff.com/spark-architecture-shuffle , o shuffle é explicado com a imagem
e tenho a impressão de que a regra é
cada estágio é dividido em # tarefas de número de partições, sem levar em consideração o número de nós
Para minha primeira imagem, eu diria que teria 3 tarefas de mapa e 3 tarefas de redução.
Para a imagem de 0x0fff, eu diria que existem 8 tarefas de mapa e 3 tarefas de redução (supondo que haja apenas três arquivos laranja e três verde escuro).
Perguntas abertas em qualquer caso
Isso está correto? Mas mesmo que isso esteja correto, minhas perguntas acima não são todas respondidas, porque ainda está em aberto, se várias operações (por exemplo, mapas múltiplos) estão dentro de uma tarefa ou são separadas em uma tarefa por operação.
O que os outros dizem
O que é uma tarefa no Spark? Como o trabalhador Spark executa o arquivo jar? e Como o agendador do Apache Spark divide arquivos em tarefas? são semelhantes, mas não achei que minha pergunta fosse respondida claramente lá.