赞
踩
Flink的Standalone和 Yarn模式都属于集群运行模式,但是有很大的不同,在实际环境中,使用Flink on Yarn模式者居多。
on yarn模式的好处
在集群运行时,可能会有很多的集群实例包括MapReduce、Spark、Flink等等,那么如果它们全基于on Yarn就可以完成资源分配,减少单个实例集群的维护,提高集群的利用率。
on yarn模式注意事项
Flink on yarn有两种运行模式:Session-Cluster
和Per-Job-Cluster
模式。
从上面来看, Session模式下基本和standalone模式一样,只不过是资源管理交给了Yarn集群
由于每个job独享一个flink集群,每个job独享Dispatcher和ResourceManager,按需接受资源申请;
应用场景:规模大,时间长的任务,无界流任务可用
1.启动hadoop集群(略)
2.添加hadoop依赖
将hadoop依赖支持放进flink/lib目录下
Flink官方从1.8版本开始不提供带hadoop支持,flink将hadoop当做额外的组件,需要手动放进来。
在G:\18_尚硅谷大数据技术之Flink\2.资料目录下,2.8和3.1版本都能用
3.启动yarn-session
bin/yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm test -d
Yarn-session模式下,在启动的时候就指定好了TaskManager的数量,指定了资源的数量;
注意:每次启动yarn-session会阻塞当前Linux的页面,ctrl+c 会挂掉当前的yarn-session;并且页面末尾如下面一张图所示,每次启动yarn-session会随机jobmanager的端口号,因此要从web页面访问,需要按照这个端口号来访问。[总结:启动yarn-session阻塞页面+随机web端口号]
jpsall如下:
./flink run -c com.atguigu.wc.Flink03_WordCount_Unbounded FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar --host hadoop102 --port 7777
yarn application --kill application_1577588252906_0001
Session-Cluster中任务提交现象说明
前提:三台机器,flink的配置为每个TaskManager有两个slots,一共6个slots
(1)访问web页面会看到可用slots个数为0,因为还没有提交任务,yarn没有给flink集群分配资源。Yarn分配资源的进程为YarnTaskExecutorRunner,提交任务后,yarn回启动这个进程来调度资源。用jps可以看到。
现象1:提交job后才能查看flink集群可用资源
(2)提交一个并行度为4的job,yarn会分配两个TaskManager,4个slots
两个taskManager进程都分配到第三台 机器了;
现象2:(一台NodeManager可以运行多个TaskManager进程)
(3)再提交并行度为1的job,flink需要1个TaskManager来执行此job,由于两个已经启动的TaskManager已经没有slot可以提供给job了,yarn需要申请NodeManager资源来启动TaskManager,而一个TaskManager就带有两个Slot,因此会还剩1个slot可用。
现象3:(TaskManager进程是Flink中管理资源的最小单元)
(4)再提交并行度>1的job,会造成和standAlone模式下一样的现象
可用slots为0,Running Jobs为3,但是第三个Job是阻塞的
启动hadoop集群(略)
将hadoop依赖支持放进flink/lib目录下
Flink官方从1.8版本开始不提供带hadoop支持,flink将hadoop当做额外的组件,需要手动放进来。
在G:\18_尚硅谷大数据技术之Flink\2.资料目录下,2.8和3.1版本都能用
不用启动yarn-session,直接执行job
./flink run -m yarn-cluster -c com.atguigu.wc.Flink03_WordCount_Unbounded \
FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar --host hadoop102 --port 7777
说明:Per Job Cluster模式下提交job比standalone模式下提交job多一个参数-m yarn-cluster
提交后linux窗口阻塞,如下图所示:也会随机web的地址
Yarn模式下提交的flink任务,在yarn web页面都能查看到,可以看出来flink在yarn的两种部署模式
第一种:根据随机的web地址,在浏览器访问
第二种:在yarn页面中找到当前提交的flink Job,在Tracking UI页面可以访问到UI页面(如下图所示)
注意: PerJob模式下,一个job对应一个webUI页面,和Session模式不同,Session模式下所有任务共享一个webUI页面,因此可以看见一个页面有多个Job的现象,但是PerJob模式下的web页面只会显示当前一个Job。
bin/flink 可以查看命令的参数
PerJob模式提交一个flink job到hive队列中:
PerJob 模式下分别提交两个并行度为4的Job到两个队列中:
是可以运行的,因为允许一台机器上启动多个TaskManager
一台机器上起的TaskManager的个数受TaskManger配置的内存限制:
结论:PerJob模式下,只要整个Yarn集群的机器资源充足,就能一直启动TaskManager,
而YarnSession和standalone模式下,一台机器只能启动一个taskManager;
调小slots大小的两种方式:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。