一、运行时的组件:
1.1、JobManager
1、作业管理器,控制每一个应用程序的主进程(也就是说每一个应用程序会被一个不同的JobMaager所控制执行),负责任务分配、调度、管理、checkpoint等;
2、会先接收到要执行的应用程序,包括作业图(JobGraph)、逻辑数据流图(logical dataflow graph)、和打包的所有类和其他资源库的jar包;
3、JobManager会把JobGraph转换成一个物理层面的数据流图,这个图叫做执行图(ExecutionGraph),包含了所有可以并发执行的任务。
4、JobManager会向资源管理器请求执行任务必要的资源,也就是TaskManager上面的slot,一旦获取到足够的资源,就是将执行图分发到真正运行它们的TaskManager上,而在运行过程中JobManager会负责所有需要中央协调的操作,比如检查点checkpoint等。
1.2、TaskManager:任务管理器
1、Flink中的工作进程,通常在flink中有多个TaskManager运行,每一个TaskManager都包含了一定数量的插槽(slot),slot的数量限制了TaskManager能够执行的任务数量(最大并行度);
2、启动后,TaskManager会向资源管理器注册它的插槽,收到资源管理器的指令后,TaskManager就会将一个或者多个插槽提供给JobManager调用,JobManager就可以向插槽分配任务Task来执行了;
3、在执行过程中,一个TaskManager可以跟其他运行同一应用程序的TaskManager交换数据。
1.3、ResourceManager:资源管理器(内存、CPU),主要对内存进行划分为slot。
1、slot是Flink中定义的处理资源单元;
2、Flink为不同环境和资源管理工具提供了不同的资源管理器,比如Yarn、Mesos、K8s以及standalone等;
3、当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果RM没有足够的slot来满足JobManager的请求时,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器。
1.4、Dispacher:分发器
1、可以跨作业运行,它为应用提交提供了REST接口;
2、当一个应用被提交执行时,分发器就会启动并将应用移交给一个JobManager;
3、会启动一个WEBUI,来方便展示和监控作业运行情况
二、作业提交流程:
2.1、Local本地模式
原理:
启动执行命令:
启动:./flink/bin/start-cluster.sh
可以看到进程:TaskManagerRunner、StandaloneSessionClusterEntrypoint
前端页面:http://ip:8081
提交作业命令:./flink/bin/flink run jar包路径 参数...
停止:./flink/bin/stop-cluster.sh
启动shell交互窗口:./flink/bin/start-scala-shell.sh local
2.2、集群模式:
原理:
启动执行命令:
启动:./flink/bin/start-cluster.sh
或者单独启动: ./flink/bin/jobmanager.sh ((start | start-foreground) cluster) | stop | stop-all
./flink/bin/taskmanager.sh start | start-foreground | stop | stop-all
启动历史服务器:./flink/bin/historyserver.sh (web默认端口8082)
前端页面:http://ip:8081
提交作业命令:./flink/bin/flink run jar包路径 参数...