在Flink中一共有三种部署模式,分别为local,standalone和yarn模式,由于前两者主要是用于开发和测试,本文将不再赘述,企业中用的更多的是yarn模式,关于yarn模式下为什么比standalon模式要好主要有一下几个方面

1.资源按需使用,不会因为各自内置的调度争抢资源,在者类似于像spark,flink等框架他们的主要强大之处在于是计算,调度的话还是yarn是强项,从而可以提高集群的利用率
2.对于yarn来说,任务有优先级,根据优先级运行作业
3.基于Yarn调度系统可以自动化的处理各个角色的Failover(容错)(下面的三条前提是在你配置好flink on yarn的HA以后的事情
* JobManger和TaskManager进程都由Yarn NodeMaganer监控
* 如果JobManager进程down掉,则Yarn ResourceManager会重新调度JobManager到其他的机器上。
* 如果TaskManager进程down掉,JobManager会受到消息并重新像Yarn ResourceManager申请资源,重新启动TaskManager。

首先我们来部署一下yarn集群(这里的集群指的是yarn集群,即你不需要在每台机器上都部署flink,一般在hadoop上的主节点上部署就可以了)模式。 注:本次部署采用的是flink1.12.0
1.hadoop集群的主节点上解压flink1.12的tar包,解压好将包的名字改为flink-yarn。

2.修改hadoop集群中的yarn-site.xml文件,将如下内容添加进去,因为对于flink使用yarn模式下,很容易造成内存超标,这个时候yarn会自动kill掉job,添加完以后记得分发到每台节点上

<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true --><property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value></property><!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true --><property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property>

3.在hadoop的所有节点上编辑/etc/profile文件末尾追加一行,这一步是为了让flink读取配置connect到hadoop上,其中HADOOP_CONF_DIR目录根据自己的路径相应配置。

export HADOOP_CLASSPATH=`hadoop classpath`export HADOOP_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop

输入hadoop classpath出现下面的信息则说明上述步骤没有问题.

编辑好以后千万别忘记在每台机器上 source /etc/profile.以上则是Yarn的部署模式。

flink on yarn一共有3中模式.分别为Session Mode,Per-Job Mode,Application Mode(1.10.x版本后添加的)

1.Session Mode : 在yarn集群内部初始化一个flink集群常驻,一直运行,除非手工停止,这种模式需要先启动Flink集群,向Yarn申请资源, 资源申请到以后,永远保持不变。以后提交任务都向这里提交。

Session Mode原理:
yarn-session.sh(flink-yarn/bin目录里面) + flink run

  • 使用Flink中的yarn-session(yarn客户端),会启动两个必要的服务JobManager和TaskManager
  • 客户端通过flink run提交作业
  • yarn-session会一直启动,不停的接受客户端的

notice: 对于Session模式在向Flink集群提交Job的时候, 如果资源被用完了,则新的Job不能正常提交.

click: https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/#deployment-modes


Session模式的使用:
在提交Job前必须要开始yarn-session
bin/yarn-session.sh -n 2 -tm 800 -s 1 -d

  • -n 表示申请2个容器,这⾥指的就是多少个taskmanager
  • -s 表示每个TaskManager的slots数量
  • -jm 表示每个JobManager的内存大小 单位:MB
  • -tm 表示每个TaskManager的内存⼤小 单位:MB
  • -d 表示以后台程序⽅式运行
    当然这些参数也可以通过 bin/yarn-session.sh --help来查看

此时我们提交一个WordCount任务

bin/flink run  /opt/module/flink-yarn/examples/batch/WordCount.jar

任务执行完毕:

可以看到虽然我们的任务已经结束了,但是YARN为我们初始化的Flink集群还在运行等待任务的提交,如何关闭这个阻塞进程呢?
yarn application -kill appid
也即是 yarn application -kill application_1629878381984_0010

2.Per-Job模式(直接在YARN上提交FlinkJob):
一个Job会对应一个Flink集群,每提交一个作业都会单独向yarn申请资源初始化flink集群,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行,而且运行完就关闭释放资源,把资源还给yarn集群,资源利⽤更合理,独享Dispatcher和ResourceManager,按需接受资源申请;

可用参数:
bin/flink run -m yarn-cluster --help
bin/flink --help

部分参数描述:
yjm --yarnjobManagerMemory : jobmanager内存
ytm --yarntaskManagerMemory :taskmanager内存
-yh --yarnhelp 获取yarn帮助
-yqu 选择yarn队列

使用per-job方式提交一个Job,当然像-yjm和-ytm这样的可以不写,会有默认值。

bin/flink run -t yarn-per-job  -yjm 1024 -ytm 1024    /opt/module/flink-yarn/examples/batch/WordCount.jar

从节点状态上也可以看到JobManager启在了hadoop102上,taskManager启在了103上.

这里还可以看到使用per-jon模式任务执行完以后就立即关闭然后释放资源.

此时任务完成时,上述的YarnJobClusterEntrypoint和YarnTaskExecutorRunner也随即被自动kill掉了

3.Application Mode(与per-job没有太大差别,可以理解为上述的per-job模式)

Application Mode会在Yarn上启动集群, 应用jar包的main函数(用户类的main函数)将会在JobManager上执行. 只要应用程序执行结束, Flink集群会马上被关闭. 也可以手动停止集群.

与Per-Job-Cluster的区别: 就是Application Mode下, 用户的main函数是在client中执行,而per-job的main函数是在cluster中执行的。

总结:
Session模式:
优点:flink 集群环境是提前准备好的不需要为每个作业单独创建flink环境。
缺点:
1.会⼀直有⼀个程序运⾏在yarn集群中,不管有没有任务提交执⾏,浪费资源。
2.job和job之间共享Flink-Session中的JobManager,资源隔离相对较差。

适⽤场景:离线大量的小作业的时候可以考虑使⽤这种⽅式

per-job (生产上用的最多)
优点:
1.随到随用,只有任务需要运⾏时才会开启flink集群;运行完就关闭释放资源,资源利用更合理;
2.job和job之间的资源隔离更加的充分。

缺点:对于小作业不太友好,因为需要不断的像yarn申请开启flink集群。
适⽤场景:适合实时的,⻓时间运⾏的⼤作业调度处理。

Reference:
https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/#deployment-modes
添加链接描述

详解Flink中yarn部署模式以及测试相关推荐

  1. Flink从入门到精通100篇(二十一)-万字长文详解 Flink 中的 CopyOnWriteStateTable

    前言 现如今想阅读 HashMap 源码实际上比较简单,因为网上一大堆博客去分析 HashMap 和 ConcurrentHashMap.本文详细分析 CopyOnWriteStateTable 源码 ...

  2. 详解Flink中的状态管理

    流式计算分为无状态和有状态两种情况.无状态的计算观察每个独立事件,并根据最后一个事件输出结果.例如:流处理应用程序从传感器接收温度读数,并在温度超过90度时发出警告.有状态的计算则会基于多个事件输出结 ...

  3. ai进入轮廓模式怎么退出_详解AI中扩展、扩展外观、轮廓化描边、创建轮廓

    详解AI中扩展.扩展外观.轮廓化描边.创建轮廓 在学习AI软件中,有不少同学分不清扩展.扩展外观.轮廓化描边.创建轮廓这四个概念具体的功能区别,今天我们具体聊一下. 先说"扩展", ...

  4. And解roid中Activity启动模式详

    转自: http://www.cnblogs.com/fanchangfa/archive/2012/08/25/2657012.html And解roid中Activity启动模式详 在Androi ...

  5. LVS原理详解(3种工作模式及8种调度算法)

    2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法) LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong  发布日期:20 ...

  6. 详解OpenCV中的Lucas Kanade稀疏光流单应追踪器

    详解OpenCV中的Lucas Kanade稀疏光流单应追踪器 1. 效果图 2. 源码 参考 这篇博客将详细介绍OpenCV中的Lucas Kanade稀疏光流单应追踪器. 光流是由物体或相机的运动 ...

  7. 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配

    先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...

  8. foreach php,详解PHP中foreach的用法和实例

    本篇文章介绍了详解PHP中foreach的用法和实例,详细介绍了foreach的用法,感兴趣的小伙伴们可以参考一下. 在PHP中经常会用到foreach的使用,而要用到foreach,就必须用到数组. ...

  9. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

最新文章

  1. 计算机教室开放使用计划,计算机教室实施计划方案.pdf
  2. linux磁盘i o跟踪,利用zabbix动态监控磁盘I/O
  3. linux 安装软件出现/tmp 磁盘不足时 解决方案
  4. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...
  5. C++新特性探究(六):auto
  6. ompparticles.cpp:(.text+0x322): undefined reference to `omp_set_num_threads'
  7. 深度解密 Go 语言之基于信号的抢占式调度
  8. java对文件读取_java开发中文件读取的方法总结
  9. oracle中decode方法使用
  10. 分布式系统的数据一致性问题
  11. LRU原理和Redis实现
  12. 【android高级编程】简答题汇总
  13. 字体裁剪,精简字体,字体瘦身:FontSubsetGUI,FontCreator,FontPruner
  14. 北京计算机应用中级,计算机应用教程(中级)
  15. 敏捷项目管理传统项目管理的区别
  16. 玩游戏使用云服务器,云服务器可以玩大型游戏吗?
  17. 利用python打开word文件
  18. android创建以及使用SDcard镜像文件
  19. MySQL设置字段从指定数字自增,比如10000
  20. 素描教程石膏像明暗素描技法

热门文章

  1. 用Python玩转二维码
  2. 苹果手机计算机隐藏照片app,‎App Store 上的“秘密计算器 - 隐藏私人照片和视频”...
  3. matplotlib保存图片去除白边
  4. Android 百度地图开发(二)
  5. 3年级计算机的知识能力,三年级信息技术教案资料三篇
  6. 如何根据小米12手机电池信息计算充电时间
  7. S2FGAN论文阅读
  8. java期末考试B卷题及答案,《JAVA程序设计》期末试题B卷
  9. 以太坊漏洞分析————4、底层函数误用漏洞
  10. 我所看到的印度软件业