Divisão de tarefas do estágio de Spark

Primeiro entenda os estágios

Cluster Spark

  • Um cluster Spark pode executar vários aplicativos Spark simultaneamente.

Aplicativo Spark

  • Um aplicativo spark consiste em um driver (escrever código lógico) e vários encadeamentos do executor. O programa spark é executado no lado do driver e envia instruções para o nó onde o executor está localizado.
  • Quando sparkContext é iniciado, um driver é iniciado e vários executores também são iniciados. O executor não pode abranger nós, mas um nó pode ter vários executores. O RDD será calculado em vários executores em paralelo. Um executor pode processar dados de várias partições do RDD, mas os dados de uma partição não podem ser executados por vários executores.
  • Um aplicativo Spark pode executar vários trabalhos simultaneamente e acionar um operador de ação é um trabalho.

Trabalho

  • O Spark RDD é uma execução lenta, acionando uma ação e dividindo um trabalho.
  • Um trabalho pode ter vários estágios .

etapa

  • Uma ampla dependência divide um palco.
  • O número de estágios = o número de dependências amplas + 1.
  • Um palco tem várias tarefas .

tarefa

  • O número de tarefas = o número de partições do último RDD em cada estágio .

Visualize a relação entre os vários estágios por meio da IU da web

	val conf: SparkConf = new SparkConf().setAppName(this.getClass.getName).setMaster("local[*]")
    val sc = new SparkContext(conf)
    val rdd: RDD[Int] = sc.makeRDD(List(1,3,4,5,1,3,9), 2)
    val resRDD: RDD[(Int, Int)] = rdd.map((_,1)).reduceByKey(_+_)
    // 第一次action
    resRDD.foreach(println)

    // 第二次action
    resRDD.saveAsTextFile("D:\\develop\\workspace\\bigdata2021\\spark2021\\out")

    Thread.sleep(100000000)
    sc.stop()

Veja o número de trabalhos (cada ação aciona um trabalho)

Insira a descrição da imagem aqui

Visualize o número de estágios de job0 (o número de estágios aumenta toda vez que uma dependência ampla é acionada)

Insira a descrição da imagem aqui

Veja o número de tarefas (o número de partições RDD na fase final de cada fase)

Insira a descrição da imagem aqui

Se houver um processo de ordem aleatória

  • O sistema armazena em cache automaticamente o processo antes de embaralhar e exibe os dados ignorados na página da web.
    Insira a descrição da imagem aqui

Divisão de tarefas de estágio

  • Primeiro, é gerado um grafo acíclico dirigido por DAG, que é um grafo topológico composto de pontos e retas.O grafo tem direções e não forma um loop fechado.

  • O RDD original forma um DAG após uma série de transformações, e o DAG é dividido em diferentes estágios de acordo com a ampla dependência entre os RDDs.

  • O DAG registra o processo de conversão e os estágios da tarefa de RDD.
    Insira a descrição da imagem aqui

  • O processo intermediário de segmentação de tarefas RDD é: Aplicativo-> trabalho-> estágio-> tarefa.

  • O aplicativo é iniciado quando o sparkContext é iniciado.

  • Um operador de ação gera um trabalho.

  • Cada trabalho é dividido em diferentes etapas de acordo com a ampla dependência.

  • O número final de partições RDD para cada estágio é o número de tarefas.

Acho que você gosta

Origin blog.csdn.net/FlatTiger/article/details/115085777
Recomendado
Clasificación