4.1.7 Flink-流处理框架-Flink On Yarn三种部署方式

目录

1.写在前面

2.三种在 yarn 上运行的模式

2.1 会话模式

2.1.1 简要介绍

2.1.2 启动方式

 2.1.3 提交作业

2.2 单作业模式部署

2.2.1 简要介绍

2.2.2 启动方式

2.2.3 提交执行任务

2.2.4 取消作业

2.3 应用模式部署

2.3.1 简要介绍

2.3.2 提交任务

3.总结


1.写在前面

        以Yarn模式部署Flink任务时,要求Flink是有 Hadoop 支持的版本,Hadoop 环境需要保证版本在 2.2 以上,并且集群中安装有 HDFS 服务。

        独立(Standalone)模式由 Flink 自身提供资源,无需其他框架,这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但我们知道,Flink 是大数据计算框架,不是资源调度框架,这并不是它的强项;所以还是应该让专业的框架做专业的事,和其他资源调度框架集成更靠谱。而在目前大数据生态中,国内应用最为广泛的资源管理平台就是 YARN 了。所以接下来我们就将学习,在强大的 YARN 平台上 Flink 是如何集成部署的。

        整体来说,YARN 上部署的过程是:客户端把 Flink 应用提交给 Yarn 的 ResourceManager, Yarn 的 ResourceManager 会向 Yarn 的 NodeManager 申请容器。在这些容器上,Flink 会部署 JobManager 和 TaskManager 的实例,从而启动集群。Flink 会根据运行在 JobManger 上的作业 所需要的 Slot 数量动态分配 TaskManager 资源。

2.三种在 yarn 上运行的模式

        Flink1.13 版本提供了三种在 yarn 上运行的模式,分别是会话模式、单作业模式和应用模式。(1.10的时候没有应用模式)

2.1 会话模式

2.1.1 简要介绍

        Session-Cluster 模式需要先启动集群,然后再提交作业,接着会向 yarn 申请一 块空间后,资源永远保持不变。如果资源满了,下一个作业就无法提交,只能等到 yarn 中的其中一个作业执行完成后,释放了资源,下个作业才会正常提交。所有作业共享 Dispatcher 和 ResourceManager;共享资源;适合规模小执行时间短的作业。

        在 yarn 中初始化一个 flink 集群,开辟指定的资源,以后提交任务都向这里提交。这个 flink 集群会常驻在 yarn 集群中,除非手工停止。

2.1.2 启动方式

        YARN 的会话模式与独立集群略有不同,需要首先申请一个 YARN 会话(YARN session) 来启动 Flink 集群。具体步骤如下:

(1)启动 hadoop 集群

(2)执行脚本命令向 YARN 集群申请资源,开启一个 YARN 会话,启动 Flink 集群。

$ bin/yarn-session.sh -nm test

         可用参数解读:

  • ⚫ -d:分离模式,如果你不想让 Flink YARN 客户端一直前台运行,可以使用这个参数, 44 即使关掉当前对话窗口,YARN session 也可以后台运行。
  • ⚫ -jm(--jobManagerMemory):配置 JobManager 所需内存,默认单位 MB。
  • ⚫ -nm(--name):配置在 YARN UI 界面上显示的任务名。
  • ⚫ -qu(--queue):指定 YARN 队列名。
  • ⚫ -tm(--taskManager):配置每个 TaskManager 所使用内存。

        注意:Flink1.11.0 版本不再使用-n 参数和-s 参数分别指定 TaskManager 数量和 slot 数量, YARN 会按照需求动态分配 TaskManager 和 slot。所以从这个意义上讲,YARN 的会话模式也 不会把集群资源固定,同样是动态分配的。 YARN Session 启动之后会给出一个 web UI 地址以及一个 YARN application ID,如下所示, 用户可以通过 web UI 或者命令行两种方式提交作业。

2021-06-03 15:54:27,069 INFO org.apache.flink.yarn.YarnClusterDescriptor [] - YARN application has been deployed successfully. 2021-06-03 15:54:27,070 INFO org.apache.flink.yarn.YarnClusterDescriptor [] - Found Web Interface hadoop104:39735 of application 'application_1622535605178_0003'. JobManager Web Interface: http://hadoop104:39735

 2.1.3 提交作业

        (1)通过 Web UI 提交作业 这种方式比较简单,与上文所述 Standalone 部署模式基本相同。

        (2)通过命令行提交作业

        ① 将 Standalone 模式讲解中打包好的任务运行 JAR 包上传至集群

        ② 执行以下命令将该任务提交到已经开启的 Yarn-Session 中运行。客户端可以自行确定 JobManager 的地址,也可以通过-m 或者-jobmanager 参数指定 JobManager 的地址,JobManager 的地址在 YARN Session 的启动页面中可以找到。 

$ bin/flink run -c com.atguigu.wc.StreamWordCount FlinkTutorial-1.0-SNAPSHOT.jar

        ③ 任务提交成功后,可在 YARN 的 Web UI 界面查看运行情况。    如下图所示,从图中可以看到我们创建的 Yarn-Session 实际上是一个 Yarn 的 Application,并且有唯一的 Application ID。

        ④也可以通过 Flink 的 Web UI 页面查看提交任务的运行情况,如图 3-15 所示。

        如果想取消 yarn-session,直接执行kill

yarn application --kill application_1577588252906_0001

2.2 单作业模式部署

2.2.1 简要介绍

        一个 Job 会对应一个集群,每提交一个作业会根据自身的情况,都会单独向 yarn 申请资源,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行。独享 Dispatcher 和 ResourceManager,按需接受资源申请;适合规模大长时间运行的作业。每次提交都会创建一个新的 flink 集群,任务之间互相独立,互不影响,方便管理。任务执行完成之后创建的集群也会消失。

2.2.2 启动方式

仅仅启动 hadoop 集群(略)

2.2.3 提交执行任务

(1)执行命令提交作业

$ bin/flink run -d -t yarn-per-job -c com.atguigu.wc.StreamWordCount 
FlinkTutorial-1.0-SNAPSHOT.jar

        早期版本也有另一种写法(注意这里是通过参数-m yarn-cluster 指定向 YARN 集群提交任务):

$ bin/flink run -m yarn-cluster -c com.atguigu.wc.StreamWordCount 
FlinkTutorial-1.0-SNAPSHOT.jar

 (2)在 YARN 的 ResourceManager 界面查看执行情况,如图 3-16 所示。

        点击可以打开 Flink Web UI 页面进行监控,如图 3-17 所示:

2.2.4 取消作业

        可以使用命令行查看或取消作业,命令如下

$ ./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

        这里的 application_XXXX_YY 是当前应用的 ID,是作业的 ID。注意如果取消作业,整个 Flink 集群也会停掉。

2.3 应用模式部署

2.3.1 简要介绍

        前面提到的两种模式下,应用代码都是在客户端上执行,然后由客户端提交给 JobManager 的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给 JobManager;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的 资源消耗。

        所以解决办法就是,我们不要客户端了,直接把应用提交到 JobManger 上运行。而这也就代表着,我们需要为每一个提交的应用单独启动一个 JobManager,也就是创建一个集群。这个 JobManager 只为执行这一个应用而存在,执行结束之后 JobManager 也就关闭了,这就是所 谓的应用模式,如图 3-12 所示。

        应用模式与单作业模式,都是提交作业之后才创建集群;单作业模式是通过客户端来提交 的,客户端解析出的每一个作业对应一个集群;而应用模式下,是直接由 JobManager 执行应用程序的,并且即使应用包含了多个作业,也只创建一个集群。

2.3.2 提交任务

        应用模式同样非常简单,与单作业模式类似,直接执行 flink run-application 命令即可。

(1)执行命令提交作业。

$ bin/flink run-application -t yarn-application -c com.atguigu.wc.StreamWordCount 
FlinkTutorial-1.0-SNAPSHOT.jar

(2)在命令行中查看或取消作业。

$ ./bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY
$ ./bin/flink cancel -t yarn-application 
-Dyarn.application.id=application_XXXX_YY <jobId>

(3)也可以通过 yarn.provided.lib.dirs 配置选项指定位置,将 jar 上传到远程。这种方式下 jar 可以预先上传到 HDFS,而不需要单独发送到集群,这就使得作业提交更 加轻量了。

$ ./bin/flink run-application -t yarn-application
-Dyarn.provided.lib.dirs="hdfs://myhdfs/my-remote-flink-dist-dir"
hdfs://myhdfs/jars/my-application.jar

3.总结

        总结一下,在会话模式下,集群的生命周期独立于集群上运行的任何作业的生命周期,并 且提交的所有作业共享资源。而单作业模式为每个提交的作业创建一个集群,带来了更好的资 源隔离,这时集群的生命周期与作业的生命周期绑定。最后,应用模式为每个应用程序创建一 个会话集群,在 JobManager 上直接调用应用程序的 main()方法。 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值