[Big Data] Explicación detallada de Flink (6): Código fuente Parte I

Esta serie incluye:


55. ¿Cuál es el proceso de envío de trabajos de Flink?

Proceso de envío de Flink:

  • En , inicie la función en , genere Flink StreamGraph y JobGraph Flink Clienta través de la reflexión y envíe JobGraph al clúster de Flink.jarmain
  • Después de que el clúster de Flink recibe el JobGraph ( JobManagerrecibido), traduce el JobGraph en un ExecutionGraph, luego comienza a programar y comienza a consumir datos después de que el inicio sea exitoso.

En resumen: proceso de ejecución central de Flink, las llamadas a las API del usuario se pueden convertir a StreamGraphJobGraphExecutionGraph.

56. ¿Cuántas formas existen de enviar trabajos de Flink?

El envío de trabajos de Flink se divide de dos formas:

  • Modo local : es decir, el modo de envío local, que ejecuta el código directamente en IDEA.
  • Método de envío remoto : dividido enstandalonemétodo,yarnmétodo,K8smétodo. Entre ellos,yarnel método se divide en tres modos de envío:yarn-per-jobmodo,yarn-sessionmodo,yarn-applicationmodo.

57. ¿Cuándo se genera Flink JobGraph?

StreamGraph y JobGraph se Flink Clientgeneran en el lado del cliente, es decir, antes de enviarse al clúster. El diagrama esquemático es el siguiente:

inserte la descripción de la imagen aquí

58. ¿Qué proceso pasó JobGraph antes de enviar el clúster?

  • Los usuarios inician el clúster de Flink, usan la línea de comando para enviar trabajos y ejecutarlos flink run -c WordCount xxx.jar.
  • Después de ejecutar la línea de comando, la entrada se invocará a través rundel script CliFrontend, que activará el método en el archivo CliFrontendenviado por el usuario , luego lo entregará al método y finalmente activará una ejecución específica de acuerdo con el modo de envío.jarmainPipelineExecuteorexecutePipelineExecutor
  • Según la PipelineExecutorejecución específica, el código del usuario se compilará para generar StreamGraph y Jobgraph se generará después de la optimización.

El diagrama de flujo específico es el siguiente:

inserte la descripción de la imagen aquí

59. Viendo que mencionaste PipeExecutor, ¿qué clases de implementación tiene?

PipeExecutorEn Flink se llama ejecutor de canalización , es una interfaz y Flink Clientuna parte importante del envío de trabajos al clúster después de que se genera JobGraph. Como se mencionó anteriormente, hay varias formas de enviar trabajos al clúster, el método más utilizado es yarnel método, yarnque incluye 3 33 modos de envío, principalmente usandosessionmodo,per-jobmodo. applicationEn el modo, JobGraph se genera en el clúster.

Entonces, PipeExecutorla clase de implementación es como se muestra en la siguiente figura: (presione el código y CTRL+Haparecerá)

inserte la descripción de la imagen aquí
Además de los dos modos anteriores en el cuadro rojo, utilícelo cuando ejecute Flink MiniCluster en el entorno IDEA para depurar LocalExecutor.

60. ¿Cuáles son las características del modo de presentación local y cómo se realiza?

Local es el método de envío que se ejecuta en el entorno local de IDEA. No en el grupo. Utilizado principalmente para depuración, el diagrama esquemático es el siguiente:

inserte la descripción de la imagen aquí

  • Los programas de Flink JobClientson enviados por .

  • JobClientEnvíe tareas a JobManager.

  • JobManagerResponsable de coordinar la asignación de recursos y la ejecución del trabajo. Una vez completada la asignación de recursos, la tarea se enviará al correspondiente TaskManager.

  • TaskManagerInicia un hilo para comenzar a ejecutarse TaskManagere JobManagerinformará los cambios de estado a , como iniciado, en progreso o completado.

  • Una vez completada la ejecución del trabajo, los resultados se envían al cliente.

Análisis del código fuente: a través de Flink 1.12.2 1.12.21.12.2 Se analiza el código fuente.

(1) Cree y obtenga el StreamExecutionEnvironmentobjeto correspondiente: LocalStreamEnvironment.

Invoca StreamExecutionEnvironmentel método del objeto execute.

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
(2) Obtenga StreamGraph.

inserte la descripción de la imagen aquí
(3) Ejecute PipeLineExecutorGet localExecutorFactory específico.

inserte la descripción de la imagen aquí
(4) Obtenga JobGraph.

Genere JobGraph de acuerdo con la clase de implementación LocalExecutor de localExecutorFactory.

inserte la descripción de la imagen aquí
La parte anterior está toda Flink Clientgenerada en . Dado que se envía en modo local, a continuación se creará un clúster MiniCluster y miniCluster.submitJobel jobGraph que se enviará se especificará mediante .

(5) Cree una instancia del clúster MiniCluster.

inserte la descripción de la imagen aquí
(6) Devolución al JobClientcliente.

Después de ejecutar lo anterior miniCluster.submitJobpara enviar JobGraph al clúster local, JobClientse devolverá un cliente que JobClientcontiene información detallada de la aplicación, incluido el JobID, el estado de la aplicación, etc. Finalmente, regrese a la capa superior de ejecución de código y la clase correspondiente es StreamExecutionEnvironment.

inserte la descripción de la imagen aquí
Lo anterior es el proceso de ejecución del código fuente del modo Local.

61. ¿Cuáles son las modalidades de envío remoto?

Método de envío remoto: dividido en método independiente , método Yarn y método K8 .

  • Independiente : contienesessionel esquema.
  • El método Yarn se divide en tres modos de envío:yarn-per-jobmodo,yarn-Sessionmodo,yarn-applicationmodo.
  • Modo K8 : contienesessionmodo.

62. ¿Presentar brevemente el modo independiente?

El modo independiente es el método de envío de versión independiente del clúster Flink . Solo se usa un nodo para el envío y el modo de sesión se usa comúnmente.

inserte la descripción de la imagen aquí
Envíe el comando de la siguiente manera:

bin/flink run org.apache.flink.WordCount xxx.jar
  • ClientEl cliente envía tareas a JobManager.
  • JobManagerResponsable de solicitar los recursos necesarios para la operación de la tarea y gestionar tareas y recursos.
  • JobManagerDistribuir tareas a TaskManagerejecutar.
  • TaskManagerInformar periódicamente JobManagerdel estado a .

63. ¿Cuénteme sobre el método de envío del grupo de hilos?

La presentación a través del grupo de hilos se divide en 3 33 formas de enviar:

  • sessionmodelo
  • per-jobmodelo
  • applicationmodelo

64. ¿Cuáles son las características del modo de sesión de hilo?

Envíe el comando de la siguiente manera:

./bin/flink run -t yarn-session \
-Dyarn.application.id=application_XXXX_YY xxx.jar

modo de sesión de hilo : Todos los trabajos comparten recursos del clúster, aislamiento deficiente, cuello de botella de carga JM ymainmétodos se ejecutan en el cliente. Es adecuado para tareas cortas con tiempo de ejecución corto y ejecución frecuente. Solo hay un trabajo en el clústerJobManager. Además, los trabajos se asignan aleatoriamenteTaskManager.

Características: session-clusterel modo debe iniciar el clúster primero, luego enviar el trabajo y luego solicitar un espacio de Yarn, y los recursos permanecerán sin cambios para siempre. Si el recurso está lleno, no se puede enviar el siguiente trabajo y solo se puede enviar normalmente después de que se completa uno de los trabajos en Yarn y se liberan los recursos. Todos los trabajos comparten Dispatchery ResourceManagercomparten recursos, lo que es adecuado para trabajos de pequeña escala y tiempo de ejecución corto.

inserte la descripción de la imagen aquí

65. ¿Cuáles son las características del modo hilo por trabajo?

Comando de confirmación:

./bin/flink run -t yarn-per-job --detached xxx.jar

modo hilo por trabajo : cada trabajo inicia el clúster de forma independiente, con buen aislamiento, equilibrio de carga JM ymainel método se ejecuta en el cliente. Enper-jobel modo, hay uno para cada trabajoJobManageryTaskManagersolo un trabajo para cada uno.

Características: Una tarea corresponde a un trabajo. Cada trabajo enviado solicitará recursos de Yarn individualmente de acuerdo con su propia situación hasta que se complete el trabajo. La falla de un trabajo no afectará el envío y funcionamiento normales del siguiente trabajo. Se aceptan solicitudes exclusivas Dispatchery de recursos a pedido. ResourceManagerAdecuado para trabajos de larga duración a gran escala.

inserte la descripción de la imagen aquí

66. ¿Cuáles son las características del modo de aplicación del hilo?

Envíe el comando de la siguiente manera:

./bin/flink run-application -t yarn-application xxx.jar

Modo de aplicación de hilo : cada trabajo inicia el clúster de forma independiente, con buen aislamiento, equilibrio de carga JM ymainmétodosJobManagerque se ejecutan en .

Tanto en yarn-per-jobel yarn-sessionmodo como, el cliente debe realizar los siguientes tres pasos, a saber:

  • Obtenga las dependencias requeridas por el trabajo;
  • Realizando un análisis ambiental y obteniendo un plan lógico, es decir StreamGraphJobGraph;
  • Cargue dependencias y JobGraph al clúster.

inserte la descripción de la imagen aquí
Solo después de que se completen, env.execute()se activará el tiempo de ejecución de Flink para comenzar a ejecutar el trabajo a través del método. Si todos los usuarios envían trabajos en el mismo cliente, las dependencias más grandes consumirán más ancho de banda y la traducción de una lógica de trabajo más compleja a JobGraph también consumirá más CPU y memoria, y los recursos del cliente se convertirán en un cuello de botella.

Para solucionarlo, la comunidad implementó el modo Aplicación sobre la base del modo de implementación tradicional. Las tres cosas que originalmente requerían que hiciera el cliente se han transferido a JobManager, es decir, main()el método se ejecuta en el clúster (donde se encuentra el punto de entrada ApplicationClusterEntryPoint), y el cliente solo necesita ser responsable de iniciar la solicitud de implementación.

inserte la descripción de la imagen aquí
En resumen, la comunidad Flink recomienda utilizar yarn-per-jobel modo o yarn-applicationpara enviar solicitudes.

67. ¿Cuénteme en detalle sobre el proceso de envío de la sesión de hilo?

El diagrama de flujo de envío es el siguiente:

inserte la descripción de la imagen aquí

1. Inicie el clúster

  • Flink ClientYarn ResourceManagerEnvíe la información de la tarea a .
    • Flink ClientCargue la configuración de la aplicación ( Flink-conf.yaml,, ) y los archivos relacionados (Flink Jar, archivos de clase de configuración, archivos Jar logback.xmlde log4j.propertiesusuario, objetos JobGraph, etc.) al HDFS de almacenamiento distribuido.
    • Flink ClientYarn ResourceManagerEnvíe la información de la tarea a .
  • Yarn inicia el clúster de Flink, haz 2 22 pasos:
    • Al Yarn Clientenviar Yarn ResourceManageruna solicitud para que Flink cree un clúster, Yarn ResourceManagerasigne recursos de contenedor y notifique al correspondiente para NodeManageriniciar uno ApplicationMaster(cada vez que se envíe un trabajo de Flink, se iniciará uno ApplicationMaster), ApplicationMasterque incluirá el que se está iniciando actualmente JobManagery el uso interno. del propio Flink ResourceManager.
    • JobManagerSe ejecuta en el proceso como YarnSessionClusterEntryPointpunto de entrada para el inicio del clúster. Inicialización Dispatcher, que Flink utiliza internamente ResourceManager, inicia los servicios RPC relacionados y espera a que Flink ClientJobGraph se envíe a través de la interfaz Rest.

2. Envío de trabajo

  • Flink ClientDispatcherEnvíe el JobGraph compilado a través de Rest . DispatcherEs una interfaz Rest y no es responsable del trabajo real de programación y asignación.

  • DispatcherDespués de recibir JobGraph, cree uno para el trabajo JobMaster, entregue el trabajo JobMaster, JobMastersea responsable de la programación del trabajo, administre el ciclo de vida del trabajo y la tarea, y cree el ExecutionGraph (la versión paralelizada de JobGraph, la estructura de datos central de capa de programación).

Una vez ejecutados los dos pasos anteriores, el trabajo ingresa a la etapa de ejecución de programación.

3. Ejecución de la programación del trabajo

  • JobMasterSolicite recursos ResourceManagery comience a programar ExecutionGraph.

  • ResourceManagerAgregue solicitudes de recursos a la cola de espera e YarnResourceManagerinicie el proceso solicitando un nuevo Contenedor mediante latido TaskManager.

  • YarnResourceManagerInicie y luego cargue archivos Jar y otros recursos relacionados necesarios desde HDFS, comience en el contenedor TaskManagery TaskManagercomience TaskExecutor.

  • TaskManagerDespués de comenzar, ResourceManagerregístrese e informe el estado de sus recursos de tragamonedas a ResourceManager.

  • ResourceManagerSaque la solicitud de ranura de la cola de espera, TaskManagerconfirme la disponibilidad de recursos e indique a TaskManagerqué ranura está asignada JobMaster.

  • TaskManagerResponda a JobMasteruna ranura suya que pertenezca a su tarea y JobMaserla ranura se almacenará en caché en SlotPool.

  • JobMasterPrograme la tarea que TaskMnagerse ejecutará en la ranura.

68. ¿Cuénteme en detalle sobre el proceso de envío de hilo por trabajo?

Envíe el comando de la siguiente manera:

./bin/flink run -t yarn-per-job --detached xxx.jar

El diagrama de flujo de envío es el siguiente:

inserte la descripción de la imagen aquí
1. Inicie el clúster

  • Flink ClientYarn ResourceManagerEnvíe la información de la tarea a .
    • Flink ClientCargue la configuración de la aplicación ( Flink-conf.yaml,, ) y los archivos relacionados (Flink Jar, archivos de clase de configuración, archivos Jar logback.xmlde log4j.propertiesusuario, objetos JobGraph, etc.) al HDFS de almacenamiento distribuido.
    • Flink ClientYarn ResourceManagerEnvíe la información de la tarea a .
  • Yarn inicia el clúster de Flink, haz 2 2Operación de 2 pasos.
    • Al Yarn Clientenviar Yarn ResourceManageruna solicitud para que Flink cree un clúster, Yarn ResourceManagerasigne recursos de contenedor y notifique al correspondiente para NodeManageriniciar uno ApplicationMaster(cada vez que se envíe un trabajo de Flink, se iniciará uno ApplicationMaster), ApplicationMasterque incluirá el que se está iniciando actualmente JobManagery el uso interno. del propio Flink ResourceManager.
    • JobManagerSe ejecuta en el proceso como YarnJobClusterEntryPointpunto de entrada para el inicio del clúster. Inicialización Dispatcher, que Flink utiliza internamente ResourceManager, inicia los servicios RPC relacionados y espera a que Flink ClientJobGraph se envíe a través de la interfaz Rest.

2. Envío de trabajo

  • ApplicationMasterIniciar Dispatcher, Dispatcheriniciar ResourceManagery JobMaster(este paso JobMasteres diferente de la Sesión, Dispatcherel Cliente lo realiza en lugar de pasarlo). JobMasterResponsable de la programación de trabajos, la gestión del ciclo de vida de trabajos y tareas y la construcción de ExecutionGraph (la versión paralelizada de JobGraph, la estructura de datos central de la capa de programación).

Una vez ejecutados los dos pasos anteriores, el trabajo ingresa a la etapa de ejecución de programación.

3. Ejecución de la programación del trabajo

  • JobMasterSolicite recursos de Slot ResourceManagery comience a programar ExecutionGraph.

  • ResourceManagerAgregue solicitudes de recursos a la cola de espera e YarnResourceManagerinicie el proceso solicitando un nuevo Contenedor mediante latido TaskManager.

  • YarnResourceManagerInicie, luego cargue archivos Jar y otros recursos relacionados necesarios desde HDFS y comience en el contenedor TaskManager.

  • TaskManagerComience internamente TaskExecutor.

  • TaskManagerDespués de comenzar, ResourceManagerregístrese e informe el estado de sus recursos de tragamonedas a ResourceManager.

  • ResourceManagerSaque la solicitud de ranura de la cola de espera, TaskManagerconfirme la disponibilidad de recursos e indique a TaskManagerqué ranura está asignada JobMaster.

  • TaskManagerResponda a JobMasteruna ranura suya que pertenezca a su tarea y JobMaserla ranura se almacenará en caché en SlotPool.

  • JobMasterPrograme la tarea que TaskMnagerse ejecutará en la ranura.

Supongo que te gusta

Origin blog.csdn.net/be_racle/article/details/132419006
Recomendado
Clasificación