Client 将作业提交给 JobManager ,JobManager 将作业分发给很多个 TaskManager 开始干活。
部署模式有三种(会话模式_session,单作业模式_per_job,应用模式_application)
主要区别是生命周期及资源的分配方式,以及应用的 main 方法到底在哪里执行,是客户端还是JobManager。
会话模式
需要先启动一个集群,保持一个会话。
但启动集群时,资源是共享的,会导致资源竞争。
单作业模式
为每个提交的作业启动一个集群,作业完成后,集群关闭,资源被释放。
【生产环境运行更加稳定,实际应用时首选。】
但 Flink 不能直接这样运行,需要借助资源管理框架运行(如 Yarn,K8S )。
应用模式
前两种都是客户端执行应用代码,然后提交给 Job Manager ,客户端消耗很多带宽,可能会加重客户端所在节点的资源消耗。
应用模式为每个应用单独提交一个 Job Mananger ,相当于每个Flink集群运行一个应用。
应用模式可以有 Standalone模式、YARN模式、K8S模式等。
运行模式指的是由谁来管理资源。
Standalone模式
独立运行,不依赖外部资源管理平台,不能自动扩展。
YARN
客户端将 Flink 应用提交给 YARN 的 Resource Manager ,Resource Manager 向 YARN 的各个Node结点申请容器,在容器上运行部署(根据 slot 数量动态分配 TaskManager 资源),从而启动集群。
要求 Hadoop环境(HDFS、YARN、MapReduce)
会话模式
执行脚本命令向 YARN 集群申请资源,开启一个 YARN 会话,启动 Flink 集群。
bin/yarn-session.sh -nm test -id xxxxx
// 其中 -nm表示配置在 YARN UI 界面上显示的任务名
-id指定执行的ID
单作业模式
因为 YARN 环境中有了外部平台做资源调度,因此可以直接向 YARN 提交一个单独的作业,从而启动一个 Flink集群。
bin/flink run -d -t yarn-per-job -c xxxxxxx FlinkTutorial-1.0-SNAPSHOT.jar
// 其中 -t 指定运行模式
-c 指定类名
最后指定 jar 包
怎么停止呢?【因为是单作业模式,所以如果停止作业,整个集群就会被停止掉】
bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY <jobID>
// 其中, application_XXXX_YY 指的是当前应用的ID
应用模式部署
bin/flink run-application -t xxx -c xxx xxx.jar // 提交作业
// 取消作业的命令和前面与一样,把 yarn-per-job 换成 run-application 就行
历史服务器
为了在作业挂掉时,能够定位那一刻发生了什么,不只是依赖日志,而是可以看到相关的 WebUI 统计信息,查询这些已完成作业的统计信息。
它对外提供了 REST API ,接受 HTTP 的请求并使用 JSON 数据进行响应。
// 创建目录
hadoop fs -mkdir -p /logs/flink-job
// 修改配置,在 flink-config.yaml中添加如下图的配置
// 启动历史服务器
historyserver.sh start