Cette série comprend :
- [Big Data] Explication détaillée de Flink (1) : bases
- [Big Data] Explication détaillée de Flink (2) : partie principale I
- [Big Data] Explication détaillée de Flink (3) : partie principale II
- [Big Data] Explication détaillée de Flink (4) : partie principale III
- [Big Data] Explication détaillée de Flink (5) : partie principale IV
- [Big Data] Explication détaillée de Flink (6) : code source, partie I
Explication détaillée de Flink (6) : Code source Ⅰ
- 55. Quel est le processus de soumission des tâches Flink ?
- 56. De combien de façons existe-t-il pour soumettre des tâches Flink ?
- 57. Quand le Flink JobGraph est-il généré ?
- 58. Quel processus JobGraph a-t-il suivi avant de soumettre le cluster ?
- 59. Puisque vous avez mentionné PipeExecutor, de quelles classes d'implémentation dispose-t-il ?
- 60. Quelles sont les caractéristiques du mode de soumission Local et comment est-il réalisé ?
- 61. Quels sont les modes de soumission à distance ?
- 62. Présentez brièvement le mode autonome ?
- 63. Parlez-moi de la méthode de soumission des clusters de fils ?
- 64. Quelles sont les caractéristiques du mode session de fil ?
- 65. Quelles sont les caractéristiques du mode fil par tâche ?
- 66. Quelles sont les caractéristiques du mode d'application du fil ?
- 67. Parlez-moi en détail du processus de soumission des sessions de fil ?
- 68. Parlez-moi en détail du processus de soumission de fil par tâche ?
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 Client
par réflexion et soumettez le JobGraph au cluster Flink.jar
main
- Une fois que le cluster Flink a reçu le JobGraph (
JobManager
reç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 StreamGraph
→ JobGraph
→ ExecutionGraph
.
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 en
standalone
méthode,yarn
méthode,K8s
méthode. Parmi eux,yarn
la méthode est divisée en trois modes de soumission :yarn-per-job
mode,yarn-session
mode,yarn-application
mode.
57. Quand le Flink JobGraph est-il généré ?
StreamGraph et JobGraph sont tous Flink Client
générés côté client, c'est-à-dire avant d'être soumis au cluster. Le diagramme schématique est le suivant :
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
run
le scriptCliFrontend
, qui déclenchera la méthode dans le fichierCliFrontend
soumis par l'utilisateur , puis la remettra à la méthode, et enfin déclenchera une exécution spécifique selon le mode de soumission.jar
main
PipelineExecuteor
execute
PipelineExecutor
- Selon l'
PipelineExecutor
exé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 :
59. Puisque vous avez mentionné PipeExecutor, de quelles classes d'implémentation dispose-t-il ?
PipeExecutor
Dans Flink, cela s'appelle un exécuteur de pipeline . C'est une interface et Flink Client
une 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 yarn
la méthode yarn
qui comprend 3 33 modes de soumission, utilisant principalementsession
le mode,per-job
le mode. application
Dans le mode , le JobGraph est généré dans le cluster.
La classe d'implémentation de est donc PipeExecutor
celle indiquée dans la figure ci-dessous : (appuyez sur le code et CTRL+H
il sortira)
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 :
-
Les programmes Flink
JobClient
sont soumis par . -
JobClient
Soumettre les devoirs àJobManager
. -
JobManager
Responsable 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 correspondantTaskManager
. -
TaskManager
Démarre un thread pour commencer son exécutionTaskManager
etJobManager
signalera 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' StreamExecutionEnvironment
objet correspondant : LocalStreamEnvironment
.
Invoquez StreamExecutionEnvironment
la execute
méthode de l'objet.
(2) Obtenez le StreamGraph.
(3) Exécuter PipeLineExecutor
un Get localExecutorFactory spécifique.
(4) Obtenez le JobGraph.
Générez JobGraph selon la classe d'implémentation LocalExecutor de localExecutorFactory.
La partie ci-dessus est entièrement Flink Client
générée dans . Puisqu'il est soumis en mode Local, un cluster MiniCluster sera ensuite créé et miniCluster.submitJob
le jobGraph à soumettre sera spécifié par .
(5) Instanciez le cluster MiniCluster.
(6) Retour au JobClient
client.
Après avoir exécuté ce qui précède miniCluster.submitJob
pour soumettre le JobGraph au cluster local, un JobClient
client sera renvoyé, qui JobClient
contient 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
.
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 : Contient
session
le schéma. - La méthode Yarn est divisée en trois modes de soumission :
yarn-per-job
mode,yarn-Session
mode,yarn-application
mode. - Façon K8 : contient
session
le 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é.
Soumettez la commande comme suit :
bin/flink run org.apache.flink.WordCount xxx.jar
Client
Le client soumet des tâches àJobManager
.JobManager
Responsable de demander les ressources nécessaires au fonctionnement des tâches et de gérer les tâches et les ressources.JobManager
Répartissez les tâches àTaskManager
exécuter.TaskManager
Signalez régulièrementJobManager
l'é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 :
session
modèleper-job
modèleapplication
modè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 etmain
les 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-cluster
le 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 Dispatcher
et ResourceManager
partagent des ressources, ce qui convient aux travaux à petite échelle et à temps d'exécution court.
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 etmain
la méthode est exécutée sur le client. Enper-job
mode , il y en a un pour chaque JobJobManager
,TaskManager
et 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 Dispatcher
et ResourceManager
de ressources sont acceptées sur demande. Convient aux travaux de longue durée à grande échelle.
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 etmain
les méthodesJobManager
sont exécutées sur .
Dans yarn-per-job
les yarn-session
modes 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
StreamGraph
→JobGraph
; - Téléchargez les dépendances et JobGraph sur le cluster.
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.
Pour résumer, la communauté Flink recommande d'utiliser yarn-per-job
le mode ou yarn-application
pour soumettre des candidatures.
67. Parlez-moi en détail du processus de soumission des sessions de fil ?
L’organigramme de soumission est le suivant :
1. Démarrez le cluster
Flink Client
Yarn ResourceManager
Soumettez les informations sur la tâche à .Flink Client
Té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 Client
Yarn ResourceManager
Soumettez les informations sur la tâche à .
- Yarn démarre le cluster Flink, faites 2 22 étapes :
- En
Yarn Client
soumettantYarn ResourceManager
une demande pour que Flink crée un cluster,Yarn ResourceManager
alloue des ressources de conteneur et notifie le correspondant pour enNodeManager
démarrer unApplicationMaster
(chaque fois qu'un travail Flink est soumis, un sera démarréApplicationMaster
),ApplicationMaster
qui inclura celui actuellement à démarrerJobManager
et l'utilisation interne de Flink lui-mêmeResourceManager
. JobManager
S'exécute dans le processus commeYarnSessionClusterEntryPoint
point d'entrée pour le démarrage du cluster. InitializationDispatcher
, qui est utilisée en interne par FlinkResourceManager
, démarre les services RPC associés et attend queFlink Client
JobGraph soit soumis via l'interface Rest.
- En
2. Soumission du travail
-
Flink Client
Dispatcher
Soumettez le JobGraph compilé via Rest .Dispatcher
Il s'agit d'une interface Rest et n'est pas responsable du travail de planification et d'affectation réel. -
Dispatcher
Après avoir reçu le JobGraph, créez-en un pour le travailJobMaster
, confiez le travailJobMaster
,JobMaster
soyez 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
-
JobMaster
Postulez pour des ressourcesResourceManager
et commencez à planifier ExecutionGraph. -
ResourceManager
Ajoutez des demandes de ressources à la file d'attente etYarnResourceManager
démarrez le processus en demandant un nouveau conteneur via heartbeatTaskManager
. -
YarnResourceManager
Démarrez, puis chargez les fichiers Jar et les autres ressources associées requises à partir de HDFS, démarrez dans le conteneurTaskManager
etTaskManager
démarrezTaskExecutor
. -
TaskManager
Après avoir commencé,ResourceManager
inscrivez-vous auprès de et signalez l'état de vos ressources Slot àResourceManager
. -
ResourceManager
Retirez la demande de Slot de la file d'attente,TaskManager
confirmez la disponibilité des ressources pour et indiquez àTaskManager
quel Slot est allouéJobMaster
. -
TaskManager
Répondez àJobMaster
un Slot de vous-même qui appartient à votre tâche, etJobMaser
le Slot sera mis en cache dans le SlotPool. -
JobMaster
Planifiez la tâche àTaskMnager
exé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 :
1. Démarrez le cluster
Flink Client
Yarn ResourceManager
Soumettez les informations sur la tâche à .Flink Client
Té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 Client
Yarn ResourceManager
Soumettez les informations sur la tâche à .
- Yarn démarre le cluster Flink, faites 2 2Fonctionnement en 2 étapes.
- En
Yarn Client
soumettantYarn ResourceManager
une demande pour que Flink crée un cluster,Yarn ResourceManager
alloue des ressources de conteneur et notifie le correspondant pour enNodeManager
démarrer unApplicationMaster
(chaque fois qu'un travail Flink est soumis, un sera démarréApplicationMaster
),ApplicationMaster
qui inclura celui actuellement à démarrerJobManager
et l'utilisation interne de Flink lui-mêmeResourceManager
. JobManager
S'exécute dans le processus commeYarnJobClusterEntryPoint
point d'entrée pour le démarrage du cluster. InitializationDispatcher
, qui est utilisée en interne par FlinkResourceManager
, démarre les services RPC associés et attend queFlink Client
JobGraph soit soumis via l'interface Rest.
- En
2. Soumission du travail
ApplicationMaster
StartDispatcher
,Dispatcher
startResourceManager
etJobMaster
(cette étapeJobMaster
est différente de Session, elle estDispatcher
tirée plutôt que passée par le client).JobMaster
Responsable 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
-
JobMaster
Demandez des ressources SlotResourceManager
et commencez à planifier ExecutionGraph. -
ResourceManager
Ajoutez des demandes de ressources à la file d'attente etYarnResourceManager
démarrez le processus en demandant un nouveau conteneur via heartbeatTaskManager
. -
YarnResourceManager
Démarrez, puis chargez les fichiers Jar et les autres ressources associées requises à partir de HDFS, et démarrez dans le conteneurTaskManager
. -
TaskManager
Commencez en interneTaskExecutor
. -
TaskManager
Après avoir commencé,ResourceManager
inscrivez-vous auprès de et signalez l'état de vos ressources Slot àResourceManager
. -
ResourceManager
Retirez la demande de Slot de la file d'attente,TaskManager
confirmez la disponibilité des ressources pour et indiquez àTaskManager
quel Slot est allouéJobMaster
. -
TaskManager
Répondez àJobMaster
un Slot de vous-même qui appartient à votre tâche, etJobMaser
le Slot sera mis en cache dans le SlotPool. -
JobMaster
Planifiez la tâche àTaskMnager
exécuter sur le slot.