Desarrollo de Big Data: Etapa de comprensión de Spark, Ejecutor, Conductor ... en Spark

1. Introducción

Así, para los recién llegados a Spark, en primer lugar, no conocen el mecanismo operativo de Spark. Cuando se comunican con usted, no saben de qué están hablando. Por ejemplo, el modo de implementación y el modo de operación pueden confundirse. Para aquellos que tienen cierta experiencia en desarrollo Incluso si conocen el mecanismo operativo, es posible que no comprendan muy bien los diversos términos de Spark en términos de expresión. Por lo tanto, comprender la terminología de Spark es una forma necesaria de comunicarse entre los desarrolladores de Spark. Este artículo comienza en el mecanismo operativo del caso Spark a WordCount para comprender varios términos en Spark.

2. Mecanismo de funcionamiento de la chispa

Primero, tome una fotografía del sitio web oficial para ilustrar que es un marco de ejecución general para aplicaciones Spark en un clúster distribuido. Principalmente por sparkcontext (contexto de chispa), administrador de clúster (administrador de recursos) y ejecutor (proceso de ejecución de un solo nodo). El administrador del clúster es responsable de la gestión unificada de recursos de todo el clúster. El ejecutor es el proceso principal de ejecución de la aplicación, que contiene múltiples subprocesos de tareas y espacio de memoria.

archivo El principal proceso de ejecución de Spark es el siguiente:

  1. Después de que la aplicación se envía usando spark-submit, inicializa el sparkcontext, que es el entorno de ejecución de Spark, en la ubicación correspondiente de acuerdo con la configuración del parámetro (modo de implementación) en el momento del envío, y crea el programador DAG y el programador de tareas. . El controlador ejecuta el código de acuerdo con la aplicación y el programa completo. Según el operador de la acción, se divide en varios trabajos. Cada trabajo crea un gráfico DAG. El programador DAG divide el gráfico DAG en varias etapas. Al mismo tiempo , cada etapa se divide en varias tareas El programador del DAG pasa el conjunto de tareas al programador de tareas, tarea El programador es responsable de la programación de tareas en el clúster. En cuanto a la relación entre etapa y tarea y cómo se divide, la discutiremos en detalle más adelante.

  2. El controlador solicita recursos del administrador de recursos de acuerdo con los requisitos de recursos en el contexto de chispa, incluida la cantidad de ejecutores y recursos de memoria.

  3. Una vez que el administrador de recursos recibe la solicitud, crea un proceso ejecutor en el nodo de trabajo que cumple las condiciones.

  4. Después de que se crea el Ejecutor, se registrará con el conductor en la dirección inversa para que el conductor pueda asignarle tareas para su ejecución.

  5. Cuando se ejecuta el programa, el controlador cancela el recurso solicitado al administrador de recursos.

3. Comprenda los términos en Spark

Desde el mecanismo operativo, continuemos explicando los siguientes términos,

3.1 Programa de controlador

El controlador es la aplicación Spark que escribimos para crear SparkContext o Sparksession. El controlador se comunicará con el administrador del clúster y asignará tareas al ejecutor para su ejecución.

3.2 Administrador de clústeres

Responsables de la programación de recursos de todo el programa, los programadores principales actuales son:

HILO

Spark independiente

meses

3.3 Ejecutores

Los ejecutores son en realidad un proceso JVM independiente, uno en cada nodo trabajador, que se utiliza principalmente para ejecutar tareas. Dentro de un ejecutor, se pueden ejecutar múltiples tareas simultáneamente.

3.4 Trabajo

El trabajo es un flujo de procesamiento completo del programa de usuario, que es un nombre lógico.

3.5 Etapa

Un trabajo puede contener varias etapas. Las etapas se serializan. La activación del estado se genera mediante algunas acciones de barajar, reducir por y guardar.

3.6 Tarea

Un escenario puede contener varias tareas, como sc.textFile ("/ xxxx"). Map (). Filter (), donde map y filter son cada uno una tarea. El resultado de cada tarea es el resultado de la siguiente tarea.

3.7 Partición

La partición es parte de la fuente de datos en Spark. Una fuente de datos completa se dividirá en múltiples particiones por Spark para que Spark pueda enviarse a múltiples ejecutores para ejecutar tareas en paralelo.

3.8 RDD

RDD es un conjunto de datos elásticos distribuidos. En Spark, una fuente de datos se puede considerar como un RDD grande. El RDD se compone de varias particiones. Los datos cargados por Spark se almacenarán en el RDD. Por supuesto, en realidad se cortan en el RDD. Múltiples particiones.

Entonces, la pregunta es ¿cómo se ejecuta un trabajo de chispa?

(1) El programa Spark que escribimos, también conocido como controlador, enviará un trabajo al Administrador de clústeres.

(2) Cluster Manager comprobará la línea local de datos y encontrará el nodo más adecuado para programar la tarea

(3) El trabajo se dividirá en diferentes etapas y cada etapa se dividirá en varias tareas.

(4) El controlador envía la tarea al ejecutor para ejecutar la tarea

(5) El controlador rastreará la ejecución de cada tarea y la actualizará en el nodo maestro. Esto se puede verificar en la interfaz de usuario de Spark Master.

(6) Una vez completado el trabajo, los datos de todos los nodos se agregarán finalmente nuevamente al nodo maestro, incluido el tiempo promedio, el tiempo máximo, la mediana y otros indicadores.

3.9 Modo de despliegue y modo de funcionamiento

El modo de implementación significa que Cluster Manager generalmente incluye Standalone e Yarn, mientras que el modo de operación se refiere a la máquina en ejecución de Drvier, ya sea el cluster o la máquina que envía la tarea. Corresponde a los modos Cluster y Client. La diferencia radica en en los resultados de ejecución, los registros y la estabilidad. Espere.

4. Comprensión de varios términos del caso WordCount

Comprender conceptos relacionados nuevamente

  • Trabajo: el trabajo se activa mediante acción, por lo que un trabajo contiene una acción y N operaciones de transformación;

  • Etapa: etapa es un conjunto de tareas divididas debido a operaciones de reproducción aleatoria, y etapa se divide según su ancho y dependencias estrechas;

  • Tarea: la unidad de ejecución más pequeña, porque cada tarea solo es responsable de una partición de datos

    Procesando, por lo que generalmente hay tantas tareas como particiones, este tipo de Tarea realmente realiza la misma acción en diferentes particiones;

El siguiente es un programa WordCount

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object WordCount {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("yarn").setAppName("WordCount")
    val sc = new SparkContext(conf)
    val lines1: RDD[String] = sc.textFile("data/spark/wc.txt")
    val lines2: RDD[String] = sc.textFile("data/spark/wc2.txt")
    val j1 = lines1.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_)
    val j2 = lines2.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_)
    j1.join(j2).collect()
    sc.stop()
  }
}

El modo Yarn se usa más en el entorno de producción, por lo que desde la perspectiva del modo de implementación de Yarn, solo hay una operación de acción recopilada en el código, por lo que solo hay un trabajo, y el trabajo se divide en tres etapas debido a la reproducción aleatoria, que son flatMap y map. Y ​​reduceBykey se cuentan como Stage0, y la otra línea2 se cuenta como otra, Stage1, y Stage3 son los dos primeros resultados unen, luego recopilan, y stage3 depende de stage1 y stage0, pero stage0 y stage1 son paralelos En el entorno de producción real, para ver el gráfico de dependencia de la etapa de dependencia, puede ver claramente la relación de dependencia.

Wu Xie, Xiao San Ye, un pequeño novato en segundo plano, big data e inteligencia artificial. Presta atención a másarchivo

Supongo que te gusta

Origin blog.csdn.net/hu_lichao/article/details/111829136
Recomendado
Clasificación