Flink程序部署与提交

news2024/11/15 2:17:33

前言

我们看门见山,生产环境一般用的是在YARN上面采用应用模式进行部署flink程序。实际生产中一般需要和资源管理平台(如YARN)结合起来,选择特定的模式来分配资源、部署应用。

部署模式

在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。Flink 为各
种场景提供了不同的部署模式,主要有以下三种:

  • 会话模式(Session Mode)
  • 单作业模式(Per-Job Mode)
  • 应用模式(Application Mode)

它们的区别主要在于:

  • 集群的生命周期以及资源的分配方式;
  • 以及应用的 main 方法到底在哪里执行——客户端(Client)还是 JobManager。接下来我们就做一个展开说明。

1. 会话模式(Session Mode)
会话模式其实最符合常规思维。我们需要先启动一个集群,保持一个会话,在这个会话中
通过客户端提交作业,如图 所示。集群启动时所有资源就都已经确定,所以所有提交的
作业会竞争集群中的资源。

在这里插入图片描述

(1)优点
只需要一个集群,所有作业都这个集群提交,作业结束直接释放资源,集群依然正常运行。
(2)缺点

  • 资源共享、资源不够的时候,作业提交就会失败。
  • 同一个 TaskManager 上可能运行了很多作业,如果其中一个发生故障导致 TaskManager 宕机,那么所有作业都会受到影响。
  • 客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给
    JobManager;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的
    资源消耗。

(3)适用场景
会话模式比较适合于单个规模小、执行时间短的大量作业。

  1. 单作业模式(Per-Job Mode)
    会话模式因为资源共享会导致很多问题,所以为了更好地隔离资源,我们可以考虑为每个
    提交的作业启动一个集群,这就是所谓的单作业(Per-Job)模式,如下图所示。
    在这里插入图片描述
    (1)优点
    提交一个作业,就会启动一个集群,作业被提交给 JobManager,进而分发给 TaskManager 执行。作业作业完成后,集群就会关闭,所有资源也会释放。这样一来,每个作业都有它自己的 JobManager
    管理,占用独享的资源,即使发生故障,它的 TaskManager 宕机也不会影响其他作业。
    (2)缺点
    客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给
    JobManager;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的
    资源消耗。
    (3)适用场景
    作业通常是短暂运行的,并且可能经常更改或更新,那么每次作业运行都启动一个新的JobManager实例可能会更有优势。

  2. 应用模式(Application Mode)
    前面提到的两种模式下,应用代码都是在客户端上执行,然后由客户端提交给 JobManager
    的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给
    JobManager;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的
    资源消耗。
    所以解决办法就是,我们不要客户端了,直接把应用提交到 JobManger 上运行。而这也就
    代表着,我们需要为每一个提交的应用单独启动一个 JobManager,也就是创建一个集群。这
    个 JobManager 只为执行这一个应用而存在,执行结束之后 JobManager 也就关闭了,这就是所
    谓的应用模式,如下图所示。
    在这里插入图片描述

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

(3)适用场景
实际生产中最常用的模式。

YARN结合三种部署模式

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

一句话总结YARN上部署过程

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

  1. 会话模式提交作业

     bin/flink run -c com.exmple.FlineDemo FlinkDemo-1.0-SNAPSHOT.jar
    
  2. 单作业模式模式提交作业

    bin/flink run -d -t yarn-per-job -c com.exmple.FlineDemo FlinkDemo-1.0-SNAPSHOT.jar
    

    早期的另一个写法:

    bin/flink run -m yarn-cluster -c com.exmple.FlineDemo FlinkDemo-1.0-SNAPSHOT.jar
    
  3. 应用模式提交作业

    bin/flink run-application -t yarn-application -c com.exmple.FlineDemo FlinkDemo-1.0-SNAPSHOT.jar
    

    常用参数详解:

    -yjm	指定JobManager所在的Container内存。单位:MB
    -ytm	每一个TaskManager Container的内存,单位MB。
    -ys	    每一个TaskManager中slots的数量。
    -ynm	YARN中application的名称。
    -c	    指定Job对应的jar包中主函数所在类名。
    -yj,--yarnjar <arg>              jar包位置
    -yt,--yarnship 传输指定目录下的文件(t用于传输)
    -yqu,--yarnqueue <arg>      指定yarn队列
    -yD <property=value>        自定义参数 
    -yid,--yarnapplicationId <arg>    指定yarnid执行
    -yq,--yarnquery       显示可用的YARN资源(内存,核心)                  
    -d,--detached         后台执行
    

YARN高可用

YARN 的高可用是只启动一个 Jobmanager, 当这个 Jobmanager 挂了之后, YARN 会再次
启动一个, 所以其实是利用的 YARN 的重试次数来实现的高可用。

  1. 在 yarn-site.xml 中配置
<property>
 <name>yarn.resourcemanager.am.max-attempts</name>
 <value>4</value>
 <description>
 The maximum number of application master execution attempts.
 </description>
</property>

注意: 配置完不要忘记分发, 和重启 YARN。

  1. 在 flink-conf.yaml 中配置
yarn.application-attempts: 3
high-availability: zookeeper
high-availability.storageDir: hdfs://hadoop102:9820/flink/yarn/ha
high-availability.zookeeper.quorum: 
hadoop102:2181,hadoop103:2181,hadoop104:2181
high-availability.zookeeper.path.root: /flink-yarn
  1. 启动 yarn-session。
  2. 杀死 JobManager, 查看复活情况。

注意: yarn-site.xml 中配置的是 JobManager 重启次数的上限, flink-conf.xml 中的次数应该
小于这个值。

参数文献

Flink命令行界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC:clip-interrogator

文字生成图片是近年来多模态和大模型研究的热门方向&#xff0c;openai提出的CLIP提供了一个方法建立起了图片和文字的联系&#xff0c;但是只能做到给定一张图片选择给定文本语义最相近的那一个&#xff0c;实际项目开发中我们总是需要从一张图片获取描述&#xff0c;clip-int…

数据结构与算法概述(1/6)

目录 1. 引言 2. 数据结构的概念 2.1 什么是数据结构 2.2 数据结构的分类 2.3 数据存储结构 3. 算法的概念 3.1 什么是算法 3.2 算法的基本特性 3.3 算法的评价标准 3.4 算法的描述方法 4. 算法性能分析 4.1 时间复杂度的概念与分析 4.2 空间复杂度的概念与分析 4…

萨科微半导体入驻得捷

2024年8月1日&#xff0c;萨科微半导体公司宣布其高性能半导体产品成功入驻全球知名电子元器件采购平台得捷&#xff0c;这一合作不仅丰富了得捷的产品线&#xff0c;也标志着萨科微产品将借助得捷的广泛影响力加速出海&#xff0c;共同推动电子行业创新与发展&#xff0c;为全…

查看一个exe\dll文件的依赖项

方法 使用一个Dependencies工具&#xff0c;检测exe文件的所有依赖项 工具使用 下载压缩包之后解压&#xff0c;解压后如下图所示 在命令行中运行Dependencies.exe程序会得到帮助菜单 查询某exe的所有依赖项&#xff0c;使用命令 Dependencies.exe -chain <查询文件> …

uniapp app中使用柱状图 折线图 圆环图和饼图

实现思路 借助echarts.min.js 搭配l-echart进行配置 废话不多说上代码后自己百度了解配置项的意思就好 下面代码是折线图的 &#xff0c;柱状图和它一摸一样&#xff0c;只需要把line换成bar就好 <template><l-echart ref"chart"></l-echart> …

网络协议八 网络安全相关

网络通讯中的4种 安全问题 网络层- ARP欺骗 ARP欺骗的防护原理 DoS&#xff0c;DDoS 攻击 应用层 DNS 劫持 HTTP 协议的安全问题 单向散列函数&#xff0c;不可逆 MD4,MD5,SHA全家桶 可逆&#xff0c;对称加密 DES,3DES,AES DES,已经被破解&#xff0c;不建议使用 3DES AES 目前…

2024新型数字政府综合解决方案(三)

新型数字政府综合解决方案通过融合人工智能、大数据和云计算技术&#xff0c;建立了一个智能化、互联互通的政府服务平台&#xff0c;旨在提升政府服务效率与透明度。该方案通过全面数字化政务流程&#xff0c;实现数据的实时共享和自动化处理&#xff0c;使公众能够便捷地访问…

Qt作业合集

8.14作业 设置窗口&#xff0c;按钮&#xff0c;标签&#xff0c;行编辑器&#xff0c;实现快递速运登录页面 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口//设置窗口的标题this->setWindowTitle("邮递系统")…

Flink on yarn 开发过程中遇到的问题

1. 任务启动报错Trying to access closed classloader. Exception in thread "Thread-5" java.lang.IllegalStateException: Trying to access closed classloader. Please check if you store classloaders directly or indirectly in static fields. If the st…

Qt QLabel标签制作弹框效果,3s后缓慢自动消失

效果图 初始化说明 void InitStatusTips() {if (NULL statusTips_) {return;}statusTips_->setFixedSize(300, 80);//固定大小statusTips_->move((width() - statusTips_->width()) / 2, height() - 30 - statusTips_->height());//移动位置statusTips_->setA…

汽车IVI中控OS Linux driver开发实操(二十四):I2C设备驱动的编写

在Linux驱动中I2C系统中主要包含以下几个成员: I2C adapter(即I2C适配器,用来控制各种I2C从设备,其驱动需要完成对适配器的完整描述,最主要的工作是需要完成i2c_algorithm结构体。这个结构体包含了此I2C控制器的数据传输具体实现,以及对外上报此设备所支持的功能类型。具…

钉钉虚拟位置打卡神器2024免费试用版下载-钉钉虚拟位置打卡神器

钉钉虚拟位置打卡神器是一款能够快速帮助用户修改定位的辅助&#xff0c;钉钉虚拟位置打卡免费版能够一键切换手机上班的打开地点&#xff0c;帮助打工人更好的应对公司&#xff0c;收获奖金&#xff01;软件不需要root就可以安装使用&#xff0c;并且体积也比较小&#xff0c;…

仿RabbitMq实现简易消息队列基础篇(future操作实现异步线程池)

TOC 介绍 std::future 是C11标准库中的一个模板类&#xff0c;他表示一个异步操作的结果&#xff0c;当我们在多线程编程中使用异步任务时&#xff0c;std::future可以帮助我们在需要的时候&#xff0c;获取任务的执行结果&#xff0c;std::future 的一个重要特性是能…

【Java学习】Stream流详解

所属专栏&#xff1a;Java学习 Stream流是JDK 8引入的一个概念&#xff0c;它提供了一种高效且表达力强的方式来处理数据集合&#xff08;如List、Set等&#xff09;或数组。Stream API可以以声明性方式&#xff08;指定做什么&#xff09;来处理数据序列。流操作可以被分为两大…

GD32 ADC配置跳坑

GD32 ADC配置跳坑 &#xff1a;时钟使能配置需在ADC前面 放在后面读取ADC值失败。 DMA配置放在ADC配置后面可以正常读取ADC的值 不同的模式选择可能会导致ADC存在读取失败的问题&#xff0c;红色部分是常用的模式&#xff0c;一般可以读取到相应的ADC的值 adc_software_trigge…

优雅谈大模型:Python编程篇

Python在机器学习领域的地位十分关键&#xff0c;虽然后面有Julia&#xff0c;Mojo等其他对手的挑战&#xff0c;然而Python拥有庞大的机器学习库和框架&#xff0c;尤其是生态系统比以往任何时候又强大了不少。从另外维度它和Java&#xff0c;Scala&#xff0c;Go&#xff0c;…

游戏安全入门-扫雷分析远程线程注入

前言 无论学习什么&#xff0c;首先&#xff0c;我们应该有个目标&#xff0c;那么入门windows游戏安全&#xff0c;脑海中浮现出来的一个游戏 – 扫雷&#xff0c;一款家喻户晓的游戏&#xff0c;虽然已经被大家分析的不能再透了&#xff0c;但是我觉得自己去分析一下还是极好…

适配器模式, 修饰器模式 与 代理模式

这三种模式, 感觉非常类似, 都是把核心类包一层, 在外部做一些额外的事情, 我还没发现他们之间具体的区别, 有想法的同学, 可以评论或者私聊我 适配器模式 简介: 就是在目标类外面包一层, 用以适配其他的模块,兼容整个程序框架 举个例子: 比如运动员, 中国运动员参加法国奥运…

市域社会治理平台规划建设方案

1. 建设背景与市域治理定义 市域社会治理作为国家治理体系的重要组成部分&#xff0c;具有承上启下的枢纽作用。2019年&#xff0c;全国市域社会治理现代化工作会议提出了推进市域社会治理现代化的总体思路&#xff0c;强调以城带乡、以点带面&#xff0c;明确了市域治理的方向…

[项目]文海泛舟测试报告

目录 一、项目背景 二、项目功能 三、功能测试 1. 测试用例&#xff1a; 2. 实际测试的部分&#xff08;含截图&#xff09; 1. 正常登录 2. 文章列表页显示/登录用户信息显示 3. 文章详情页内容显示/文章作者信息显示 4. 编辑功能 1. 点击“更新博客”按钮前 2. 点击…