最新要闻
- 世界观天下!我的脑内恋碍选项第二季会出吗_我的脑内恋碍选项第二季
- 【天天报资讯】ChatGPT火出圈!人工智能工程师平均招聘月薪突破2.5万
- 环球热文:三星推出冰淇淋主题键鼠套装:薄荷配色如此清凉
- 集成ChatGPT威力显著:微软Bing日活跃首次破亿
- 每日快报!3月罕见!郑州今日冲上30°C高温:成北方首个30℃+省会级城市
- 世界球精选!RTX 50显卡有望使用 GDDR7显存验证方案来了:狂飙36Gbps
- 世界观焦点:英媒:多特蒙德中场贝林厄姆将决定自己的未来
- 观察:今年五一档已定档10部新片 王一博《长空之王》超65万人想看
- 天天热讯:海上巨无霸 我国自主研制的全球最大集装箱船今天交付
- 全球讯息:日本H3火箭首秀失败初步调查结果公布:电源系统异常
- 重获新“声”!清华开发出可穿戴人工喉咙:还原准确率超90%
- 天天热点评!美国一邮轮300多人患病呕吐腹泻:疑似感染诺如病毒
- 热资讯!说唱女歌手转行卖烧烤年入百万 直言:梦想和生活不矛盾
- 全球观察:索尼α7 IV发布2.00版本固件:增加Creators' App支持
- 全风化和强风化哪个硬?全风化和强风化的区别是什么?
- 牛转乾坤是什么意思?牛转乾坤放在家里哪个位置?
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
从5分钟到60秒,袋鼠云数栈在热重启技术上的提效探索之路
更好地提高效率一直以来是袋鼠云数栈产品的主要目标之一。当前数栈客户的实时任务都是基于 Per-Job 模式运行的,客户在进行一些任务参数的修改之后,只能先取消当前任务,再选择 CheckPoint 恢复或者重新运行,整个过程需要3-5分钟,比较浪费时间。为了达到提高效率的目的,我们针对 Per-Job 任务的整体流程分析,进行了相关探索。
(资料图)
下文和大家聊聊数栈在热重启技术方面的探索之路。
热重启是什么?
热重启技术旨在复用当前 Per-Job 集群的相关资源,减少重新创建集群以及申请资源的耗时,同时通过 CheckPoint 机制保障数据的正确性。
Flink 的 Per-Job 模式是指每个任务都会对应一个独立的 Flink 集群。在任务提交的时候,会创建一个 Flink 集群进行任务的运行,整个集群只为这一个任务进行服务。同时 Flink 集群不允许继续提交任务,导致任务修改之后,只能 Cancel 当前任务。重新提交修改后的任务,创建一个新的 Flink 集群进行运行。
经过分析,耗时主要是由于以下两部分原因造成:
• Client 需要在 Yarn 上启动一个 Flink 集群,这一部分是客户端耗时最多的部分,因为这一部分包括上传 jar,上传文件到Hdfs 上,申请资源启动 Flink 集群,都是比较耗时的步骤
• 集群运行的时候需要申请资源等操作也十分耗时
我们思考如果仅仅是一些任务参数或者 Sql 逻辑的修改,而不涉及代码上的修改,那么 PerJob 任务是否可以类似 Session 模式进行改造,支持 JobGraph 的重新提交,解决 Client 需要启动一个 Flink 集群的耗时问题,大大提高提交效率。
同时复用了整个 Flink 集群的资源,如果并行度改变,只需要申请新增加的资源,已有的资源不需要再重复向 Yarn 的 Resourcemanager 申请。
热重启改造后的流程
Flink 中 Per-Job 任务运行的整体流程大概如下所示:
客户端流程
• Client 端创建 JobGraph
• 上传 JobGraph 到 hdfs 里
• 通过 YarnClient 提交一个 YarnApplication,运行一个 Flink 任务
• 获取结果
Flink 集群流程
• 启动 Flink 集群,启动 WebMonitor,ResourceManager,Dispatcher 组件
• Client 端上传到远程文件服务里的 JobGraph 会被反序列出来由 DIspatcher 持有;
• DIspatcher 会根据此 JobGraph 创建 JobManagerRunner 对象进行运行;
• JobManagerRunner 会交由内部的 ScheduleNg 进行调度运行任务:
a.构建 ScheduleNg 时,会将 JobGraph 转为ExecutionGraph
b. ScheduleNg 根据 ExecutionGraph 进行调度,运行任务
• 任务运行,等待任务运行结束,进行相应的回调处理
从上图我们可以看出,一个 Per-Job 任务的运行主要包括两部分:一部分是客户端上传文件 jar 等操作后,直接上传任务到 Yarn 上进行 Flink 任务的启动,第二部分是Flink集群的启动,然后对客户端上传到远程文件的 JobGraph 进行处理。因此为了优化 Per-Job 下的效率,我们对这两部分进行了改造。
想法逻辑是,集群首先改造支持 JobGraph 的重新提交,然后 DIspatcher 处理 JobGraph 的时候,不会创建新的 JobMaster ,而是将当前现有的 JobGraph 里的一些信息填充到新的 JobGraph 里,比如当前任务的 CheckPoint 信息等。任务最终的调度运行是 JobMaster 里的 ScheduleNg 对象。因此我们认为只需要将 ScheduleNg 重新构建,其余的组件都可以复用。
下图即为我们热重启技术改造后的一个大致流程:
热重启技术改造后流程
• WebMonitor 支持任务的提交
• DIspatcher 将新的 JobGraph 缓存
• 取消当前任务,等待异步回调
• 返回结果给客户端
• 在任务取消的异步回调里主要是热重启的重点改造部分:
a.判断当前是否有新的 JobGraph 缓存,有的话进入热重启逻辑,无则走当前现有逻辑
b.获取取消任务的 CheckPoint 信息,填充到新的 JobGraph 里
c.将 jobGrap 更新到 JobMaster 里,清理以前 JobGraph 的缓存信息
d.把 JobMaster 里 SlotPool 管理的资源释放掉
e.JobMaster 重新创建 ScheduleNg 并调度运行,至此新的 JobGraph 就被成功调度运行了
热重启改造部分详解
JobGraph 介绍
在上述流程中,JobGraph 是整体流转的主要对象,后续的一切操作都是围绕着 JobGraph 进行处理,所以这里先对 JobGraph 进行介绍。
JobGraph 是 Flink 作业的内部表示,是一个有向无环图(DAG),主要是将一些可以优化的算子节点合并为一个节点。从下图可知,一个完整的 JobGraph 图包含了 Source Sink Transform 节点,以及节点的输出 IntermrdiateDataset 和输入边 JobEdge 。在除了 Application 模式外,其余的提交模式下,JobGraph 是在 Client 创建的,然后通过 Rest 请求提交给 Flink 集群进行处理。
看完 JobGraph 此类结构,可以得出以下这些信息:
· taskVertices:上图中的每个顶点对应一个 jobVertex,taskVertices 维护了 jobGraph 图里的各个 jobVertex
· snapshotSettings:checkponit 相关的配置信息,如 CheckPoint 的间隔时间等
· savepointRestoreSettings:任务恢复的 checkpoint 文件信息,热重启中,新的 jobGraph 会将上一个任务的 checkPoint 位点信息填充到这个参数里,新的任务会在 CheckPoint 位点处进行恢复运行
· jobConfiguration:整个 job 的相关配置信息
· userJars & calsspath:任务运行过程中需要的一些 jar 以及 classpath 相关信息
其中 JobVertex 是 jobGraph 里非常重要的对象,再看下此类结构:JobVertex 主要存储了JobEdge以及 IntermediateDataSet 和并行度等相关信息。对于一个 JobVertex 来说,IntermediateDataSet 是作为 JobVertex 的输出,而 JobEdge 是其输入。
WebMonitor 改造
WebMonitor 组件是 Flink 的 Web 端点,可以通过 Rest Api 进行 Flink 集群的状态、任务、指标等信息的查询,同时支持任务的提交、取消、触发 SavePoint 等操作。
Per-Job 模式下 Flink 集群是不支持客户端继续提交任务运行的,因此需要对 WebMonitor 进行改造,类似 Session 下支持同一个 Flink 集群能继续提交 JobGraph 并运行。
从下图可以看出 WebMonitor 组件启动时,其本质是 Netty 为核心的一个 Web 端点。启动时的主要流程如下:
• 创建 Router,管理 http 请求和处理器 handler 的映射关系
• initializeHandlers 初始化所有的 handler,不同的集群对应的 WebMonitor 提供的 API 功能不同,所以 handlers 也是不同的
• 将 handlers 注册到 router,完成 URL 以及请求方式(GET,POST,DELETE,PUT)和 Handler 的映射关系
• 创建一个 Netty 的 handler,包装下 router,然后注册到 Netty 的 pipeline 里
WebMonitor 支持的各种 Rest 请求其实最终是交给一个个的 handler 进行处理,通过 Router 对这些 handler 进行维护,其内部维护了一个 url 以及 Rest 请求方式与 handler 的映射关系。接收 Client 端的 Rest 请求之后,Router 找到对应的处理器 handler,交由 handler 进行最终的处理并返回结果。
因为 Per-job 集群是不支持 Client 端继续提交任务的,所以其 initializeHandlers 方法初始化出的 handlers 不包含处理任务提交的 handler,导致 router 找不到对应的 handler 报错,因此需要在 initializeHandlers 里将处理任务提交的 handler 注册进去 。
JobSubmitHandler 处理请求的主要逻辑如下图所示。核心是从 Rest 请求的 Body 里反序列化得到 JobGraph,反序列化获取的 Jobgraph 通过 DIspatcherGateway 发送给 Dispatcher 进行后续提交处理。
这样 Client 端只需要重新生成 JobGraph 然后提交即可,避免了重新上传 jar 到 hdfs,以及避免浪费重新向 yarn 集群申请资源启动 AppMaster 的时间。
Dispatcher 改造
DisPatcher 顾名思义是一个分发器,其主要功能是 Flink 集群接收到关于 Job 的提交、取消、触发 SavePoint 等操作,分发到对应的各个 JobMaster 进行处理,或者创建新的 JobMaster 进行任务的运行。
DisPatcher 处理任务提交的核心流程是根据 JobGraph 创建一个 JobManagerRunner 对象并启动,然后将其包装成一个 DispatcherJob 缓存在内部。任务的具体调度执行交由创建的 JobManagerRunner 进行异步处理。
JobManagerRunner 其内部的具体操作其实是 JobMasterService,主要实现类就是 JobMaster。JobMaster 内部有两个主要对象分别是:
· ScheduleNg: 负责 JobGraph 转为 ExecutionGraph,然后对 Job 进行调度运行
· SlotPool:负责 Slot 资源的申请以及管理
以上便是 Dispatcher 处理的主要流程。当前改造之后只是支持了任务的重新提交运行,但是新的任务仍然是对应一个新的 JobMaster,其实就是一个类似 Session 的处理,所以为了达到热重启的效果,需要进行以下的改造。
主流程的改造逻辑如下:
• 增加了一个 hotRestartJobGraph 字段,将新的 JobGraph 对象赋予此字段
• Dispatcher 将缓存的正在运行的任务 cancel,对异步返回结果进行回调处理
• 直接返回 Client 结果
因为 Flink 整体是异步处理的,源码里充满了大量的 CompletableFuture 回调的处理,主流程仅仅对提交的 JobGraph 进行了一个缓存处理,热重启的主要步骤在任务取消的回调里进行处理:
• 判断 hotRestartJobGraph 是否为空,如果不为空则进行热重启处理,为空则用以前的逻辑,整个 Per-job 集群关闭
• 获取取消任务的最后一个 CheckPoint 位点
• 将 CheckPoint 位点信息填充到新的 Jobgraph 里
• 反射将上一个 Jobgraph 生成的 JobManagerRunner 和 jobMaster 两个对象的JobGraph 字段用新的 JobGraph 替换掉
• jobMaster 对象根据 jobGraph 重新生成 scheduleNg 进行调度运行
• jobMaster 的 slotPool 在心跳周期内,会缓存已经释放掉的 slot,需要把这部分缓存清空
• MiniDispatcher 的 close 方法修改下,如果 hotRestartJobGraph 不为空则不进行集群的关闭
• hotRestartJobGraph 置空
注意上述只是主要的一些改造地方,其余一些边缘的细节处理就不再进行赘述。
所以在热重启中,DIspatcher 是不会对每一个 JobGraph 创建新的 JobMaster 对象。通过将新的 JobGraph 更新到 JobMaster 里,内部仅仅 ScheduleNg 进行了重新构建,其余的组件都进行了复用,比如 SlotPool。
ScheduleNg 之所以需要重新构建是因为 JobGraph 转为 ExecutionGraph 是需要 ScheduleNg 在构建的时候创建的,因此需要重新构建一个 ScheduleNg 进行任务的调度执行,这样达到了整个资源的复用性,大大提升了效率。
Slot 资源的复用
Flink 中对于资源的抽象主要是 Slot,其各个组件对 Slot 的管理是由不同的组件处理的:
· Flink 的 ResourceManager 里是 SlotManager 管理,主要是任务的资源申请以及管理
· JobMaster 里管理 Slot 是 SlotPool ,主要是对当前任务申请的 slot 进行管理
· TaskExecutor 里则是S lotTable 对 Slot 进行管理,维护 JobId 和 Slot 的关系
在热重启中,上一个任务取消之后,JobMaster 里 SlotPool 管理的 Slot 状态由已分配改为可用。这样在 JobMaster 通过新的 ScheduleNg 进行重新调度,会复用 SlotPool 里缓存的 Slot,这个时候其实是有问题的。在 TaskExecutor 接收到任务的时候会报错,在其内部的 JobTable 里找不到新任务的 JobId,因为此时 TaskExecutor 维护的 Jobid 还是上一个任务的。
所以 JobMaster 的 SlotPool 需要释放掉其内部缓存信息,注意只是清理内部缓存,此时 TaskManager 的 Slot 槽资源还没被释放,仍然被 Resourcemanager 的 SlotManager 管理着。这样 SlotPool 发现内部没可用的 Slot 槽就会和 ResourceManager 的 SlotManager 申请资源,SlotManager 就仍然复用了以前的 Slot 槽并且将新的 JobGraph 的 jobId 通过 rpc 请求注册进了 TaskExecutor。从而达到了 slot 槽资源的复用,减少了 Flink 集群的 ResourceManager 重新向 Yarn 的 ResourceManager 申请资源。
总结
数栈在 Per-job 模式下,为了尽快看到任务修改后的效果,在业务允许情况下,通过热重启技术复用相关资源,减少了大量时间,极大地提高了效率。在开发验证中,以前一个任务等待任务结束以及重新提交运行总流程超过4分钟,但是在热重启情况下控制在1分钟以内就已经可以进行调度执行。
未来我们将会把热重启的场景进一步丰富,支持更多场景下的热重启技术,如 jar 的代码修改,如何更新环境里的 jar,支持 k8s 场景等。
袋鼠云一直以来高度重视产品升级和用户体验,用诚心倾听用户需求,新的一年我们将继续保持产品升级节奏,以提效为目标满足不同行业用户的更多需求。为了更好的产品,更佳的用户体验,数栈一直在路上。《数据治理行业实践白皮书》下载地址:https://fs80.cn/380a4b
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szbky
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack
关键词:
-
焦点播报:Python常见面试题012. 可迭代对象和迭代器有啥区别?
012 可迭代对象和迭代器有啥区别?2者不是一回事(废话)比如fromcollections abcimportIterable,Iteratorprint(isinstance([1
来源: 焦点播报:Python常见面试题012. 可迭代对象和迭代器有啥区别?
从5分钟到60秒,袋鼠云数栈在热重启技术上的提效探索之路
世界观天下!我的脑内恋碍选项第二季会出吗_我的脑内恋碍选项第二季
【天天报资讯】ChatGPT火出圈!人工智能工程师平均招聘月薪突破2.5万
环球热文:三星推出冰淇淋主题键鼠套装:薄荷配色如此清凉
集成ChatGPT威力显著:微软Bing日活跃首次破亿
每日快报!3月罕见!郑州今日冲上30°C高温:成北方首个30℃+省会级城市
世界球精选!RTX 50显卡有望使用 GDDR7显存验证方案来了:狂飙36Gbps
无界生态发布会即将举办 焕新后的星纪魅族将带来哪些惊喜?
java代码审计-XSS
全球今日讯!vue中将base64流数据转成pdf文件可打印
环球速讯:1 MySql基础介绍
世界观焦点:英媒:多特蒙德中场贝林厄姆将决定自己的未来
观察:今年五一档已定档10部新片 王一博《长空之王》超65万人想看
天天热讯:海上巨无霸 我国自主研制的全球最大集装箱船今天交付
全球讯息:日本H3火箭首秀失败初步调查结果公布:电源系统异常
重获新“声”!清华开发出可穿戴人工喉咙:还原准确率超90%
天天热点评!美国一邮轮300多人患病呕吐腹泻:疑似感染诺如病毒
React Hooks源码深度解析
当前热文:虹科分享 | B站崩了怎么办?Redis企业版数据库多云战略分析
每日速读!Math.atan2求角度解析
快速打包、发布和管理应用——AppUploader工具介绍
星纪魅族集团宣布成立 全面推行新战略,新理念
热资讯!说唱女歌手转行卖烧烤年入百万 直言:梦想和生活不矛盾
全球观察:索尼α7 IV发布2.00版本固件:增加Creators' App支持
全风化和强风化哪个硬?全风化和强风化的区别是什么?
牛转乾坤是什么意思?牛转乾坤放在家里哪个位置?
离不开你是哪部电视剧主题曲?离不开你的原唱是谁?
惊艳世俗的名字有哪些?惊艳世俗的小说句子有哪些?
卧铺有充电的地方吗?卧铺补票怎么补怎么收费?
每日关注!C++笔记--数组、函数、预处理
索爱mk16i支持通话录音吗?索爱mk16i拍照效果怎么样?
双胡须造型着实罕见!腾势N7申报:首款激光雷达比亚迪来了
网易3A级赛车手游《巅峰极速》今日首测 全球超百款跑车正版授权
汽车和小孩被劫 定位要先续流量费!大众汽车宣布重大决定
讯息:股价涨停 中国上市公司永鼎回应美国室温超导技术:目前不可行
当前看点!财运好的男人手相 什么手相最有财运
IM通讯协议专题学习(六):手把手教你如何在Android上从零使用Protobuf
GO语言学习笔记-方法篇 Study for Go ! Chapter five - Method
每日看点!面试被问到了解哪些开发模型?看这一篇就够了!
热键是什么意思?热键冲突怎么解决?
微信怎么群发消息?微信怎么分组管理好友?
环球微资讯!绝无系统广告!蔚来手机真机曝光:神似索尼
每日看点!比亚迪F品牌越野SUV谍照曝光:对标奔驰大G 价格40万起
每天少睡一两个小时算熬夜?专家提醒:大脑会变笨
A4车主免费变成“A5”车主?奥迪做出重大决定
委员建议在农村淘汰老头乐!推广更好的新能源汽车
qq拍一拍怎么设置?qq拍一拍怎么撤回?
三星n7108d能升级到什么版本?三星N7108D手机参数
springboot~ConditionalOnProperty注解的使用
环球信息:给C#auto属性一个初始值的最佳方法是什么?
当前报道:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java解题)
【热闻】在2020年JD Power CSI墨西哥研究中 雪佛兰低于平均水平
每日动态!国内油价仍在上行区间 下一轮预计涨0.07-0.08元/升
每日短讯:世界最长寿女性去世 享年128岁:经历两次世界大战、全球大流行病
焦点速读:回头率爆表!闹市试驾哪吒S:20万级最吸引人的轿跑
报复性消费来了 2023年快递突破200亿件 百亿件仅28天
今日热搜:上大教授蔡传兵:室温超导距离实际应用还很遥远
世界头条:《洋葱》原唱_洋葱歌曲原唱
世界即时看!10Wqps评论中台,如何架构?B站是这么做的!!!
简讯:前端设计模式——中介者模式
全球今日报丨Typora语法
Linux 中如何开启端口
环球微资讯!多地或迎来30℃的“春天”:今夏是否会遭遇极端高温?专家回应
每日热讯!宜家储物柜竟成网红打卡地 上海宜家禁止在仓库拍照
每日消息!农民工大哥火车上用盆炫10袋泡面 饭量让网友惊叹:干活能吃更多
环球观焦点:海尔为何能反超格力
天天快消息!微软坚信Switch可原生运行《使命召唤》:没有理由不能优化
环球快播:Kubernetes 的 HPA 原理详解
世界热资讯!当我把ChatGPT拉进群聊里,我的朋友都玩疯了
NTP校时服务器(时钟服务器)在安防监控系统里的重要性
天天新动态:以宿主机用户身份运行Docker容器
环球讯息:配置中心 | .NET 集成 Nacos 配置中心
3月9日生意社DBP基准价为9475.00元/吨
环球今头条!中核首席专家:人造太阳有望在30年后实现供能 核聚变商用
【天天报资讯】有你在的城市吗?中国“民富”50城:沪京苏杭位列前4 长三角仍是最富庶地区
0.536秒!清华学子拍到中国空间站凌月 画面震撼:网友为中国航天点赞
每日讯息!15年耗费万亿日元 日本国产飞机梦碎:原型机被拆解
【全球新视野】夫妻200万造别墅找陌生人抱团养老 每月1500元 网友并不看好
世界观天下!湖北现购车狂潮 东风系最高降9万遭疯抢 乘联会:其他省份或效仿
全球播报:专家权威点评比亚迪CTB技术:刀片与车身完美结合 只能在比亚迪才能实现
天天亮点!促销潮蔓延 汽车全面降价已来临?比亚迪或是最大功臣!
前沿资讯!怎么做才能不丢消息?
世界快看:读Java性能权威指南(第2版)笔记11_堆内存上
当前时讯:新生儿史低 日本恐将不复存在:工业正在崩溃边缘
每日消息!湖北现购车狂潮:最高发9万元补贴 12万买合资B级车
云计算的历史演进
狗屁不通文章生成器在线网页版 (2023年最新)
当前时讯:1万元!TP-Link发布Wi-Fi 7挖矿路由器:比RTX 4090快得多
世界今热点:2岁娃总发烧咳嗽 一查肺里有个洞:8个月前嗑南瓜子 壳进入肺部
非洲部落活人献祭的食人树:真的存在吗?
热文:有人在《绝地求生》里把炸弹扔了2000米远!还没开挂
世界热门:《星空》确定延期至9月6日发售 直面会6月11日举行
四川雅安旅游景点 四川雅安有哪些好玩的地方
盐山县聚成管道防腐保温厂
青岛西海岸新区2023年第一批产权型人才住房项目配售条件
【世界新视野】认养大熊猫1年10万终身100万:成龙认养了2只
岚图CEO讽刺路虎汽车抄袭:我们鼓励原创
世界焦点!类魂游戏《卧龙:苍天陨落》10场最难BOSS战:吕布让玩家绝望
环球消息!0.vim常用命令