Flink并行度优先级_集群操作常用指令_运行组件_任务提交流程_数据流图变化过程

Flink并行度优先级(从高到低)

sum(1).setParallelism(1) 
env.setParallelism(1)
ApacheFlinkDashboard任务添加并行度配置
flink-conf.yaml并行度配置
注: 处理输入输出时, 并行度默认为 1

Flink集群常用指令

提交任务
run: 代表执行; c: 指定入口类; p: 并行度; host, post: 主机地址端口
flink run -c com.test.StreamWordCount -p 1 /home/Project/Flink/target/FlinkStudy-1.0-SNASHOT.jar --host localhost --port 7777取消任务
flink cancel jobId列出所有 jobId
flink list

Flink部署

  1. Standalone 模式: TaskManager固定, 所有任务共享 Dispatcher 和 ResourceManager, 当任务满了, 剩余任务只能阻塞等待.
  2. Yarn 模式:
    a. Session 模式: 与Standalone模式一样, 不同点在于 TaskManager 进行动态分配, 提高集群扩展能力.
    b. Job 模式: 每个提交的任务单独有一份 Dispatcher, ResourceManager, 适用于特别大的任务, 且每个任务执行耗时很长. 注: job模式下, 不用启动 yarn-session, 直接 flink run -m yarn-cluster -c提交.
  3. Kubernetes 模式
    此处具体部署方式, 未贴出, 详情可见官网说明.

Flink运行组件

  1. JobManager: 作业管理器, 负责作业管理
    控制提交的 job 执行, JobManager 向 ResourceManager 请求 TaskManager 上的 slot, 获取到足够资源, 将该任务的执行图分发到运行的 TaskManager 上, 运行中, JobManager 负责所有需要中央协调的操作(例: checkpoints 协调, 存盘, 故障检测)

  2. TaskManager: 任务管理器, 负责干活
    Flink 中会有多个 TaskManager 执行, 且每个 TaskManager 都包含一定数量的 slot, slot 限制了 TaskManager 能够执行的任务数量.
    TaskManager启动后, 向 ResourceManager 注册 slot, 根据 ResourceManager 调配, 将 slot 提供给 JobManager 调用, JobManager 想 slot 分配任务执行.
    任务在各个执行阶段执行可能使用不同的 slot 执行, 在同一任务下, 不同的 TaskManager 可进行数据交换.

  3. ResourceManager: 资源管理器, 分发资源, 调配 slot
    管理 TaskManager 的 slot.
    在不同的环境下(Yarn, K8s, Standalone), 提供不同的 ResourceManager.
    JobManager 申请资源, ResourceManager 将空闲的 slot 分配给 JobManager, 若 slot 不足, 向资源提供平台发起会话, 提供满足的容器

  4. Dispatcher: 分发器
    为应用提交提供一个 REST 接口, 也会启动一个 webUI 便于展示提交的任务, 该组件在架构中可以是非必需的. 任务被提交时, 将给任务移交给 JobManager

任务提交流程

  1. 抽象模式的任务提交流程
    任务提交流程
  2. Yarn模型下的任务提交
    在这里插入图片描述

任务调度原理

任务调度流程:
在这里插入图片描述
并行度(Parallelism): 执行算子的子任务个数; 所有算子中最大并行度就是整个 Stream 并行度.

TaskManager, Slots的任务调度: Flink 允许子任务共享 slot(不同任务的子任务也能共享), 由于可以共享, 一个 slot 可保存整个作业流程.
子任务不共享, 如下图:
在这里插入图片描述
子任务共享 slot, 一个 slot 保存一个工作流程, 如下图, 这种情况可极大提高任务并行度
在这里插入图片描述
代码设置不同子任务共享一个 slot, 代码如下, 此时 有 2 个 slot, default 和 A, default 处理输入流, A 处理 flatMap 和 sum

//输入流未设置 slot 组, 使用 default.
DataStreamSource<String> source = env.socketTextStream("localhost", 7777);DataStream<Tuple2<String, Integer>> resultStream = source.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {public void flatMap(String value, Col	lector<Tuple2<String, Integer>> out) throws Exception {String[] words = value.split("\\W+");for (String s : words) {out.collect(new Tuple2<String, Integer>(s, 1));}}// flatMap 与 sum 求和共享一个 slot}).slotSharingGroup("A").keyBy(0).sum(1).slotSharingGroup("A");

数据流(DataFlow)

  1. 所有的 Flink 程序都由 3 部分组成: Source(数据读取), Transformation(数据加工), Sink(输出)
  2. Flink 上运行程序都会被映射为 DataFlow, 一个 DataFlow 由一个或多个 source 开始, sink 结束.
  3. 大部分情况, 程序中的 transformation 与 DataFlow 的 operator 一一对应.
  4. 数据流图变化过程
    StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图
    StreamGraph: 根据 Stream API 生成的程序拓扑结构.
    JobGraph: StreamGraph 优化得到(优化措施: 将多个符合条件的节点合并为一个节点), 提交给 JobManager 的数据结构.
    ExecutionGraph: JobManager 根据 JobGraph 生成 ExecutionGraph(JobGraph 的并行版本)
    物理执行图: JobManager 根据 ExecutionGraph 对 Job 进行调度, 在各个 TaskManager 上部署 Task 后形成的, 非具体数据结构.
    例如: 单词计数数据流执行图变化过程
    在这里插入图片描述

算子合并

数据传输形式

  1. 一个程序中, 不同算子存在不同并行度
  2. 算子之间传输数据模式: one-to-one, redistributing
    one-to-one: 不会打乱元素, 分区顺序, 例如: map, filter, flatMap
    redistributing: stream 分区会改变(数据下游存在多个并行分区, 轮询/随机方式往下游发送数据), 例如: keyBy 基于 hashCode 重分区, broadcast, rebalance 会随机重新分区.

任务链

  1. Flink 使用任务链将多个相同并行度的 one-to-one 操作合并, 使其构成一个 task, 之前的算子操作变为 subTask
  2. 并行度相同, one-to-one 操作, 且在同一个 slot 共享组, 三者是必须的.

注: 如果不想算子合并, 可调整算子间并行度, 设置重分区, 或在算子间添加 disableChaining()方法

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

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

相关文章

招银网络笔试java_最新!!招银网络科技Java面经,整理附答案

作者&#xff1a;榨汁机2号 链接&#xff1a;https://www.nowcoder.com/discuss/1640193月12号现场面试的&#xff0c; 感觉好像所有人有3面的样子。到目前也没有消息&#xff0c;有消息的吱一声&#xff0c;让我早点死了这个心…..一面 1 Java的八大基本类型byte、short、int、…

FlinkAPI_Environment_输入源_算子转化流程

Flink Environment getExecutionEnvironment() 根据当前平台, 获取对应的执行环境, 若未设置并行度, 使用 flink-conf.yaml 中的并行度配置, 默认 1. StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();createLocalEnviroment() 创建本地…

第2章 Linux内核模块

宏内核和微内核继续前面第一章的知识&#xff0c;虽然有点啰嗦&#xff0c;既然啰嗦了就继续啰嗦下去吧&#xff0c;也是给第一章的内容增加解释。我们知道内核如果按种类来划分的话&#xff0c;可以分为宏内核和微内核&#xff0c;微内核是一个比较先进的内核&#xff0c;我不…

的注册表怎么才能删干净_油烟净化器怎么清洗才能清理干净呢?

油烟机的净化器的主要功能是过滤厨房里的油烟&#xff0c;因为它总是处理油烟&#xff0c;所以清洗净化器很麻烦&#xff0c;那么如何清洗呢&#xff1f;经常清洗油烟净化器是很有必要的&#xff0c;但清洗起来很麻烦&#xff0c;清洗起来也不容易。今天&#xff0c;我想告诉大…

ado 字符串变量

这次变量主要针对 Mfc 的 Cstring 类型的变量&#xff08;前面VC 链接Access 数据库 插入变量到表&#xff09; 思路; 1 把cstring 类型 转为 string 2 string 转 char 数组 3 sprintf 写入数组 string 转 char 数组函数[cpp]view plaincopyprint?char* zhuanhuan(std::strin…

周立功先生和他的AWorks团队招聘

我之前写的一篇文章&#xff0c;介绍了周立功先生&#xff0c;我记得那篇文章的阅读量非常多&#xff0c;也让我迎来一段小高潮&#xff0c;随着时间的推移&#xff0c;慢慢的增加了我对周立功先生的了解&#xff0c;我们很多人&#xff0c;像我吧&#xff0c;工作的时候&#…

mongodb python 大于_Python中使用MongoDB详解

作者&#xff1a;Zarten知乎专栏&#xff1a;Python爬虫深入详解知乎ID&#xff1a; Zarten简介&#xff1a; 互联网一线工作者&#xff0c;尊重原创并欢迎评论留言指出不足之处&#xff0c;也希望多些关注和点赞是给作者最好的鼓励 &#xff01;介绍MongoDB是一种面向文档型的…

这不是商业互吹,是学习的宝藏

学习如逆水行舟&#xff0c;不进则退&#xff1b;只有坚持不断的学习,才能保持进步。今天给大家精心挑选的这几个优质的公众号&#xff0c;在行业深耕已久&#xff0c;相信大家一定会有所收获&#xff0c;感兴趣的可以关注一下。互联网架构师 号主985计算机硕士毕业&#xff…

关于这些那些

关于篮球先说下&#xff0c;我刚才已经写完文章了&#xff0c;但是因为没有保存&#xff0c;浏览器想着周末早点回去休息就闪退了&#xff0c;把写好的文章给闪退没有了&#xff0c;这个真是拿起自己的坑砸死了自己&#xff0c;那种赶脚只有自己能够明白&#xff0c;真的是太难…

mysqldump 定时备份数据(全量)

MYSQL 数据库备份有很多种(cp、tar、lvm2、mysqldump、xtarbackup)等等&#xff0c;具体使用哪一个还要看你的数据规模。下面给出一个表 #摘自《学会用各种姿态备份Mysql数据库》 备份方法备份速度恢复速度便捷性功能一般用于cp快快一般、灵活性低很弱少量数据备份mysqldump慢慢…

第3章 Linux内核调试手段之内核打印

开始前面说的话在我写代码的生涯里&#xff0c;我看到过很多大神炫耀自己的调试手段&#xff0c;也看到很多大神写过非常厉害的代码&#xff0c;我认为&#xff0c;相比于写代码&#xff0c;调试更加重要&#xff0c;而那些能在写代码的时候就加入了自己的调试信息的&#xff0…

电源管理 解析_智能电源控制箱

智能电源控制箱?智能电源控制箱又被称之为&#xff1a;智能监控箱、智能设备箱、智能运维箱&#xff0c;智能电源控制箱的作用主要就是为视频监控打造良好的运行环境&#xff0c;保障视频监控系统稳定的运行。说到视频监控&#xff0c;大家都知道视频监控的故障率是比较高的&a…

centos7 开机后进去了命令行_Linux系统管理:开机启动流程(二)

CentOS71.BIOS(开机自检)2.MBR ( Master Boot Record 主引导记录)3.GRUB2 Bootloader&#xff08;引导菜单&#xff09;4.Kernel&#xff08;内核引导&#xff09;5.Systemd &#xff08;不再使用init&#xff0c;改成了systemd&#xff09;6.Runlevel-Target &#xff08;运行…

一点小思考

我记得12年的时候&#xff0c;我就申请了微信公众号&#xff0c;那时候我的号主是TCL&#xff0c;是公司的同事用我的微信号申请公司的主体号&#xff0c;那时候我也有一点想法自己做个公众号写点文章&#xff0c;但是一直没有下决心&#xff0c;后来离职了&#xff0c;原来用我…

第3章 Linux内核调试手段之二

gdb 和 addr2line 调试内核模块内核模块插入内核链表的时候&#xff0c;会调用 init 里面的程序&#xff0c;我们上面给的那个例程的程序因为是经过多年风吹雨打的&#xff0c;但是如果你是一个萌新的码农&#xff0c;你能保证自己写的内核模块没有问题吗&#xff1f;所以就需要…

儿童手表怎么删除联系人_华为儿童手表4X体验:与你一起守护孩子的成长,带娃不再辛苦...

带娃是一件很辛苦的事情&#xff0c;从身体到精神的辛苦&#xff0c;相信各位家长都懂。对于照看正在成长期的孩子&#xff0c;更是让很多家长亲身感受"成长的烦恼"。孩子活泼好动的天性让很多家长都不放心&#xff0c;同时大部分家长又没有能力随时在身边守护&#…

Jmeter分布式测试过程中遇到的问题及摘抄前辈问题汇总

遇到的常见问题&#xff1a; 1、在Controller端上控制某台机器Run&#xff0c;提示"Bad call to remote host"。 解决方法&#xff1a;检查被控制机器上的jmeter-server有没有启动&#xff0c;或者JMeter.properties中remote_hosts的配置错误。2、Agent机器启动Jmete…

介绍一个我创业的朋友

大家好&#xff0c;今天给大家介绍一位跟我一样正在创业路上的朋友&#xff0c;不知道大家对我之前的文章还有没有印象&#xff0c;最近我在做一件特别有意思的事情&#xff0c;这件有意思的事情一直催促着我起床上班&#xff0c;每天都充满能量和动力&#xff0c;又累又充实的…

微信小程序装修解决方案ppt_装修公司微信小程序都有哪些功能?

传统装修行业存在收费不透明、消费者装修服务过程体验差等问题&#xff0c;传统装修已无法满足消费者的实际需求&#xff0c;面临无客量、无签约的困境。然而&#xff0c;随着移动互联网的发展&#xff0c;许多装饰企业利用微信小程序来帮助其疏导和推广。一个装修公司小程序能…

要用什么态度去面对生活?

最近&#xff0c;张扣扣的新闻铺天盖地&#xff0c;因为我非常喜欢逛知乎&#xff0c;刚好张扣扣的新闻这几天上了知乎热搜&#xff0c;所以我就关注上了&#xff0c;说实话&#xff0c;有点痛心&#xff0c;外人看起来很爽&#xff0c;忍辱负重好多年&#xff0c;终于把自己的…