[Big Data] Explication détaillée de Flink (6) : code source, partie I

Cette série comprend :


55. Quel est le processus de soumission des tâches Flink ?

Processus de soumission de Flink :

  • Dans , démarrez la fonction dans , générez Flink StreamGraph et JobGraph Flink Clientpar réflexion et soumettez le JobGraph au cluster Flink.jarmain
  • Une fois que le cluster Flink a reçu le JobGraph ( JobManagerreçu), il traduit le JobGraph en ExecutionGraph, puis commence la planification et commence à consommer des données une fois le démarrage réussi.

Pour résumer : processus d'exécution de base de Flink, les appels aux API utilisateur peuvent être convertis en StreamGraphJobGraphExecutionGraph.

56. De combien de façons existe-t-il pour soumettre des tâches Flink ?

La soumission de travail de Flink est divisée en deux manières :

  • Mode local : c'est-à-dire le mode de soumission local, qui exécute le code directement dans IDEA.
  • Méthode de soumission à distance : divisée enstandaloneméthode,yarnméthode,K8sméthode. Parmi eux,yarnla méthode est divisée en trois modes de soumission :yarn-per-jobmode,yarn-sessionmode,yarn-applicationmode.

57. Quand le Flink JobGraph est-il généré ?

StreamGraph et JobGraph sont tous Flink Clientgénérés côté client, c'est-à-dire avant d'être soumis au cluster. Le diagramme schématique est le suivant :

insérer la description de l'image ici

58. Quel processus JobGraph a-t-il suivi avant de soumettre le cluster ?

  • Les utilisateurs démarrent le cluster Flink, utilisent la ligne de commande pour soumettre des tâches et les exécutent flink run -c WordCount xxx.jar.
  • Après avoir exécuté la ligne de commande, l'entrée sera invoquée via runle script CliFrontend, qui déclenchera la méthode dans le fichier CliFrontendsoumis par l'utilisateur , puis la remettra à la méthode, et enfin déclenchera une exécution spécifique selon le mode de soumission.jarmainPipelineExecuteorexecutePipelineExecutor
  • Selon l' PipelineExecutorexécution spécifique, le code de l'utilisateur sera compilé pour générer StreamGraph, et Jobgraph sera généré après optimisation.

L'organigramme spécifique est le suivant :

insérer la description de l'image ici

59. Puisque vous avez mentionné PipeExecutor, de quelles classes d'implémentation dispose-t-il ?

PipeExecutorDans Flink, cela s'appelle un exécuteur de pipeline . C'est une interface et Flink Clientune partie importante de la soumission des tâches au cluster après la génération de JobGraph. Comme mentionné précédemment, il existe plusieurs façons de soumettre des tâches au cluster, la méthode la plus couramment utilisée est yarnla méthode yarnqui comprend 3 33 modes de soumission, utilisant principalementsessionle mode,per-joble mode. applicationDans le mode , le JobGraph est généré dans le cluster.

La classe d'implémentation de est donc PipeExecutorcelle indiquée dans la figure ci-dessous : (appuyez sur le code et CTRL+Hil sortira)

insérer la description de l'image ici
En plus des deux modes ci-dessus dans la case rouge, utilisez-le lors de l'exécution de Flink MiniCluster dans l'environnement IDEA pour le débogage LocalExecutor.

60. Quelles sont les caractéristiques du mode de soumission Local et comment est-il réalisé ?

Local est la méthode de soumission exécutée dans l'environnement IDEA local. Pas sur le cluster. Principalement utilisé pour le débogage, le schéma schématique est le suivant :

insérer la description de l'image ici

  • Les programmes Flink JobClientsont soumis par .

  • JobClientSoumettre les devoirs à JobManager.

  • JobManagerResponsable de la coordination de l’allocation des ressources et de l’exécution des travaux. Une fois l'allocation des ressources terminée, la tâche sera soumise au correspondant TaskManager.

  • TaskManagerDémarre un thread pour commencer son exécution TaskManageret JobManagersignalera les changements d'état, tels que démarré, en cours ou terminé.

  • Une fois l'exécution du travail terminée, les résultats sont renvoyés au client.

Analyse du code source : via Flink 1.12.2 1.12.21.12.2 Le code source est analysé.

(1) Créez et récupérez l' StreamExecutionEnvironmentobjet correspondant : LocalStreamEnvironment.

Invoquez StreamExecutionEnvironmentla executeméthode de l'objet.

insérer la description de l'image ici
insérer la description de l'image ici
insérer la description de l'image ici
insérer la description de l'image ici
insérer la description de l'image ici
(2) Obtenez le StreamGraph.

insérer la description de l'image ici
(3) Exécuter PipeLineExecutorun Get localExecutorFactory spécifique.

insérer la description de l'image ici
(4) Obtenez le JobGraph.

Générez JobGraph selon la classe d'implémentation LocalExecutor de localExecutorFactory.

insérer la description de l'image ici
La partie ci-dessus est entièrement Flink Clientgénérée dans . Puisqu'il est soumis en mode Local, un cluster MiniCluster sera ensuite créé et miniCluster.submitJoble jobGraph à soumettre sera spécifié par .

(5) Instanciez le cluster MiniCluster.

insérer la description de l'image ici
(6) Retour au JobClientclient.

Après avoir exécuté ce qui précède miniCluster.submitJobpour soumettre le JobGraph au cluster local, un JobClientclient sera renvoyé, qui JobClientcontient des informations détaillées sur l'application, notamment le JobID, l'état de l'application, etc. Enfin, revenez à la couche supérieure d'exécution du code et la classe correspondante est StreamExecutionEnvironment.

insérer la description de l'image ici
Ce qui précède est le processus d'exécution du code source du mode Local.

61. Quels sont les modes de soumission à distance ?

Méthode de soumission à distance : divisée en méthode autonome , méthode Yarn et méthode K8s .

  • Autonome : Contientsessionle schéma.
  • La méthode Yarn est divisée en trois modes de soumission :yarn-per-jobmode,yarn-Sessionmode,yarn-applicationmode.
  • Façon K8 : contientsessionle mode.

62. Présentez brièvement le mode autonome ?

Le mode autonome est la méthode de soumission de version autonome du cluster Flink . Un seul nœud est utilisé pour la soumission et le mode Session est couramment utilisé.

insérer la description de l'image ici
Soumettez la commande comme suit :

bin/flink run org.apache.flink.WordCount xxx.jar
  • ClientLe client soumet des tâches à JobManager.
  • JobManagerResponsable de demander les ressources nécessaires au fonctionnement des tâches et de gérer les tâches et les ressources.
  • JobManagerRépartissez les tâches à TaskManagerexécuter.
  • TaskManagerSignalez régulièrement JobManagerl'état à .

63. Parlez-moi de la méthode de soumission des clusters de fils ?

La soumission via le cluster de fils est divisée en 3 33 façons de soumettre :

  • sessionmodèle
  • per-jobmodèle
  • applicationmodèle

64. Quelles sont les caractéristiques du mode session de fil ?

Soumettez la commande comme suit :

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

mode Yarn-session : toutes les tâches partagent des ressources de cluster, une mauvaise isolation, un goulot d'étranglement de charge JM etmainles méthodes sont exécutées sur le client. Il convient aux tâches courtes avec un temps d'exécution court et des exécutions fréquentes. Il n'y a qu'un seul job dans le clusterJobManager.De plus,Les jobs sont attribués de manière aléatoireTaskManager.

Caractéristiques : session-clusterle mode doit d'abord démarrer le cluster, puis soumettre le travail, puis demander un espace à Yarn, et les ressources resteront inchangées pour toujours. Si la ressource est pleine, le travail suivant ne peut pas être soumis, et le travail suivant ne peut être soumis normalement qu'une fois l'un des travaux de Yarn terminé et les ressources libérées. Tous les travaux partagent Dispatcheret ResourceManagerpartagent des ressources, ce qui convient aux travaux à petite échelle et à temps d'exécution court.

insérer la description de l'image ici

65. Quelles sont les caractéristiques du mode fil par tâche ?

Commande de validation :

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

Mode fil par tâche : chaque tâche démarre le cluster indépendamment, avec une bonne isolation, un équilibrage de charge JM etmainla méthode est exécutée sur le client. Enper-jobmode , il y en a un pour chaque JobJobManager,TaskManageret un seul Job pour chacun.

Caractéristiques : Une tâche correspond à un travail. Chaque travail soumis demandera des ressources à Yarn individuellement en fonction de sa propre situation jusqu'à ce que le travail soit terminé. L'échec d'un travail n'affectera pas la soumission normale et le fonctionnement du travail suivant. Les demandes exclusives Dispatcheret ResourceManagerde ressources sont acceptées sur demande. Convient aux travaux de longue durée à grande échelle.

insérer la description de l'image ici

66. Quelles sont les caractéristiques du mode d'application du fil ?

Soumettez la commande comme suit :

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

mode Yarn-Application : chaque tâche démarre le cluster indépendamment, avec une bonne isolation, un équilibrage de charge JM etmainles méthodesJobManagersont exécutées sur .

Dans yarn-per-jobles yarn-sessionmodes et , le client doit effectuer les trois étapes suivantes, à savoir :

  • Obtenez les dépendances requises par le travail ;
  • En effectuant une analyse environnementale et en obtenant un plan logique, soit StreamGraphJobGraph;
  • Téléchargez les dépendances et JobGraph sur le cluster.

insérer la description de l'image ici
Ce n'est qu'une fois celles-ci terminées que env.execute()le runtime Flink sera déclenché pour commencer réellement à exécuter le travail via la méthode. Si tous les utilisateurs soumettent des travaux sur le même client, des dépendances plus importantes consommeront plus de bande passante, et la traduction d'une logique de travail plus complexe dans JobGraph consommera également plus de CPU et de mémoire, et les ressources du client deviendront plutôt un goulot d'étranglement.

Afin de résoudre ce problème, la communauté a mis en œuvre le mode Application sur la base du mode de déploiement traditionnel. Les trois choses qui demandaient initialement au client de faire ont été transférées vers JobManager, c'est-à-dire que main()la méthode est exécutée dans le cluster (où se trouve le point d'entrée ApplicationClusterEntryPoint), et le client n'a qu'à être responsable du lancement de la demande de déploiement.

insérer la description de l'image ici
Pour résumer, la communauté Flink recommande d'utiliser yarn-per-joble mode ou yarn-applicationpour soumettre des candidatures.

67. Parlez-moi en détail du processus de soumission des sessions de fil ?

L’organigramme de soumission est le suivant :

insérer la description de l'image ici

1. Démarrez le cluster

  • Flink ClientYarn ResourceManagerSoumettez les informations sur la tâche à .
    • Flink ClientTéléchargez la configuration de l'application ( Flink-conf.yaml, logback.xml, log4j.properties) et les fichiers associés (Flink Jar, fichiers de classe de configuration, fichiers Jar utilisateur, objets JobGraph, etc.) vers le stockage distribué HDFS.
    • Flink ClientYarn ResourceManagerSoumettez les informations sur la tâche à .
  • Yarn démarre le cluster Flink, faites 2 22 étapes :
    • En Yarn Clientsoumettant Yarn ResourceManagerune demande pour que Flink crée un cluster, Yarn ResourceManageralloue des ressources de conteneur et notifie le correspondant pour en NodeManagerdémarrer un ApplicationMaster(chaque fois qu'un travail Flink est soumis, un sera démarré ApplicationMaster), ApplicationMasterqui inclura celui actuellement à démarrer JobManageret l'utilisation interne de Flink lui-même ResourceManager.
    • JobManagerS'exécute dans le processus comme YarnSessionClusterEntryPointpoint d'entrée pour le démarrage du cluster. Initialization Dispatcher, qui est utilisée en interne par Flink ResourceManager, démarre les services RPC associés et attend que Flink ClientJobGraph soit soumis via l'interface Rest.

2. Soumission du travail

  • Flink ClientDispatcherSoumettez le JobGraph compilé via Rest . DispatcherIl s'agit d'une interface Rest et n'est pas responsable du travail de planification et d'affectation réel.

  • DispatcherAprès avoir reçu le JobGraph, créez-en un pour le travail JobMaster, confiez le travail JobMaster, JobMastersoyez responsable de la planification des travaux, gérez le cycle de vie du travail et de la tâche, et construisez l'ExecutionGraph (la version parallélisée du JobGraph, la structure de données de base du couche de planification).

Une fois les deux étapes ci-dessus exécutées, le travail entre dans la phase d'exécution de la planification.

3. Exécution de la planification des tâches

  • JobMasterPostulez pour des ressources ResourceManageret commencez à planifier ExecutionGraph.

  • ResourceManagerAjoutez des demandes de ressources à la file d'attente et YarnResourceManagerdémarrez le processus en demandant un nouveau conteneur via heartbeat TaskManager.

  • YarnResourceManagerDémarrez, puis chargez les fichiers Jar et les autres ressources associées requises à partir de HDFS, démarrez dans le conteneur TaskManageret TaskManagerdémarrez TaskExecutor.

  • TaskManagerAprès avoir commencé, ResourceManagerinscrivez-vous auprès de et signalez l'état de vos ressources Slot à ResourceManager.

  • ResourceManagerRetirez la demande de Slot de la file d'attente, TaskManagerconfirmez la disponibilité des ressources pour et indiquez à TaskManagerquel Slot est alloué JobMaster.

  • TaskManagerRépondez à JobMasterun Slot de vous-même qui appartient à votre tâche, et JobMaserle Slot sera mis en cache dans le SlotPool.

  • JobMasterPlanifiez la tâche à TaskMnagerexécuter sur le slot.

68. Parlez-moi en détail du processus de soumission de fil par tâche ?

Soumettez la commande comme suit :

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

L’organigramme de soumission est le suivant :

insérer la description de l'image ici
1. Démarrez le cluster

  • Flink ClientYarn ResourceManagerSoumettez les informations sur la tâche à .
    • Flink ClientTéléchargez la configuration de l'application ( Flink-conf.yaml, logback.xml, log4j.properties) et les fichiers associés (Flink Jar, fichiers de classe de configuration, fichiers Jar utilisateur, objets JobGraph, etc.) vers le stockage distribué HDFS.
    • Flink ClientYarn ResourceManagerSoumettez les informations sur la tâche à .
  • Yarn démarre le cluster Flink, faites 2 2Fonctionnement en 2 étapes.
    • En Yarn Clientsoumettant Yarn ResourceManagerune demande pour que Flink crée un cluster, Yarn ResourceManageralloue des ressources de conteneur et notifie le correspondant pour en NodeManagerdémarrer un ApplicationMaster(chaque fois qu'un travail Flink est soumis, un sera démarré ApplicationMaster), ApplicationMasterqui inclura celui actuellement à démarrer JobManageret l'utilisation interne de Flink lui-même ResourceManager.
    • JobManagerS'exécute dans le processus comme YarnJobClusterEntryPointpoint d'entrée pour le démarrage du cluster. Initialization Dispatcher, qui est utilisée en interne par Flink ResourceManager, démarre les services RPC associés et attend que Flink ClientJobGraph soit soumis via l'interface Rest.

2. Soumission du travail

  • ApplicationMasterStart Dispatcher, Dispatcherstart ResourceManageret JobMaster(cette étape JobMasterest différente de Session, elle est Dispatchertirée plutôt que passée par le client). JobMasterResponsable de la planification des tâches, de la gestion du cycle de vie des tâches et des tâches et de la construction d'ExecutionGraph (la version parallélisée de JobGraph, la structure de données de base de la couche de planification).

Une fois les deux étapes ci-dessus exécutées, le travail entre dans la phase d'exécution de la planification.

3. Exécution de la planification des tâches

  • JobMasterDemandez des ressources Slot ResourceManageret commencez à planifier ExecutionGraph.

  • ResourceManagerAjoutez des demandes de ressources à la file d'attente et YarnResourceManagerdémarrez le processus en demandant un nouveau conteneur via heartbeat TaskManager.

  • YarnResourceManagerDémarrez, puis chargez les fichiers Jar et les autres ressources associées requises à partir de HDFS, et démarrez dans le conteneur TaskManager.

  • TaskManagerCommencez en interne TaskExecutor.

  • TaskManagerAprès avoir commencé, ResourceManagerinscrivez-vous auprès de et signalez l'état de vos ressources Slot à ResourceManager.

  • ResourceManagerRetirez la demande de Slot de la file d'attente, TaskManagerconfirmez la disponibilité des ressources pour et indiquez à TaskManagerquel Slot est alloué JobMaster.

  • TaskManagerRépondez à JobMasterun Slot de vous-même qui appartient à votre tâche, et JobMaserle Slot sera mis en cache dans le SlotPool.

  • JobMasterPlanifiez la tâche à TaskMnagerexécuter sur le slot.

Je suppose que tu aimes

Origine blog.csdn.net/be_racle/article/details/132419006
conseillé
Classement