简介:本文主要介绍如何使用 AutoPilot 对作业自动调优,解决 Flink 作业开发和运维的两大难题。

作者 | 吕文龙(龙三),阿里巴巴高级技术专家

摘要:本文由阿里巴巴高级技术专家吕文龙(龙三)分享,主要介绍如何使用 AutoPilot 对作业自动调优。内容将通过以下四个部分来介绍:

  1. AutoPilot简介
  2. AutoPilot实操演示
  3. 如何选择AutoPilot策略
  4. AutoPilot使用注意事项

一、AutoPilot简介

1.AutoPilot解决的难题

AutoPilot的主要目标是解决 Flink 作业开发和运维的两大难题。

  • 第一、作业调优难,开发和运维成本高的问题。

Flink作业通常需要很长时间运行,数据和作业的流量也会随着时间不断变化,因此作业资源也会随着时间不断变化。通常,我们需要随着时间变化对作业不断调优,才能保证作业长时间稳定运行。

Flink SQL的引入大大简化了作业的开发的难度,但是加大了作业的调优的难度。因为SQL的用户通常对底层的具体实现不了解,这就导致作业的调优难度会变大。

  • 第二、作业资源利用率低、执行资源成本高的问题。

造成这个问题的原因是因为作业在没有动态资源优化的时候,通常都需要以最高峰时期的资源需求进行配置,在长时间运行中,非高峰时期的资源利用率就会比较低,这就会导致作业运行的成本偏高。

总体来说AutoPilot的目标是希望通过自动化的、自适应的资源调优来降低 Flink 的使用的门槛,同时降低 Flink 的使用的成本。

2.AutoPilot的系统架构

AutoPilot属于 Flink 管控服务的一部分,主要包括异常检测跟异常解决两个部分。AutoPilot异常检测主要通过实时订阅 Flink 作业的事件信息进行统计分析,识别因为资源问题导致的异常状态。当出现异常时,会触发资源自动调优来解决。AutoPilot异常解决主要通过动态更新作业资源配置的参数来实现的。作业配置参数更新后,管控服务的另外一个服务,也就是APP Manager就会自动重启 Flink 的作业,来实现最新的配置上限,从而实现作业配置的更新。

目前AutoPilot主要支持三个功能:

  • 根据作业的实际负载动态调整作业的并发度,同时对应的调整TM的个数,这样就可以保证作业的资源随着流量的变化而变化,实现动态的调整;
  • 根据TM的内存利用率,动态调整TM的资源,这样可以保证单个TM内存的资源处于一个合理的状态;
  • 自动识别作业因为资源问题导致的异常,动态调整TM的资源,保证作业处于一个稳定的状态。

二、AutoPilot实操演示

1.如何为作业配置AutoPilot

AutoPilot支持为每个作业独立配置,可以动态更新AutoPilot的配置,不影响作业的正常运行。

AutoPilot提供了三种模式

  • 默认的Disabled模式:即AutoPilot不会进行作业状态的监控;
  • Active模式:AutoPilot启动作业状态监控,并再必要的时候自动更新作业参数配置;
  • Monitoring模式: 启动作业状态监控,在识别到作业异常时,提供配置更新建议,但是需要用户确认,手动触发更新作业配置。

AutoPilot提供了五种策略

  • Cpu-based策略:主要基于TM的CPU实际利用率来动态调整并发度,这是一个典型的弹性计算伸缩策略。当CPU利用率高的时候,说明作业比较繁忙,这时候AutoPilot就会扩大作业的并发度,来减少单个TM的负载。当CPU利用率低的时候,说明 TM比较空闲,这时候就可以反过来减少作业的并发度,来释放多余的资源;

  • Source-delay-based策略:主要根据source的delay metrics来判断是否需要进行并发度调整。这个策略目前只支持sls和datahub两种source。正在社区推进metrics标准化即FLIP-33,完成以后,这个策略会支持更多的 source;

  • Slot-utilization-based策略:主要根据task的slot利用率判断是否需要调小并发度。和CPU的利用率不同的而是,如果task里有io wait或者sleep的逻辑也会被计算在内,利用率的计算会更加准确。但这个策略依赖对source节点的利用率的统计,会依赖FLIP-27,因此也需要等到FLIP-27完全完成后才能实际生效;

  • Memory-utilization-based策略:主要基于TM实际内存的利用率以及GC metrics信息来判断是否需要调整 TM内存大小。当TM整体内存利用率低,而且没有GC严重的时候,可以调整内存的大小;当TM内存利用率已经偏高,或者说GC严重的时候,可以调大单个TM的内存,来保证上面跑的task处于比较健康的状态;

  • Job-exception-based策略:主要是自动识别因为资源异常所产生的作业的异常。当识别到这种异常的时候,AutoPilot会自动调大单个TM内存的大小来解决这种资源的异常,保证作业处于稳定的状态。

AutoPilot的冷却时间

当AutoPilot处于Active或者Monitoring状态时,需要配置 AutoPilot的冷却时间。冷却时间是指两次rescale的最小时间间隔。因为AutoPilot触发的时候,作业需要重启,重启过程中需要进行作业状态的初始化以及预热,因此需要把这段时间排除掉,才能避免AutoPilot的策略做出错误判断。通常来说state越大,作业的初始化和预热的时间会越长,因此这时候冷却时间通常也要配的大一点才能保证AutoPilot正常的运行。

AutoPilot自定义参数

可以通过自定义的参数来个性化的控制AutoPilot的策略行为,以适配一些特殊的作业的要求。比如IO操作特别多的作业,如果开启了cpu-based,就需要把 cpu-based触发的阈值调低,这样才能适配作业实际cpu使用场景。

实操演示

针对这个提前创建好的作业,当需要对它做AutoPilot配置时,需要在作业详情页面上选择AutoPilot的tab页。默认状况AutoPilot是不会启动的,当需要启动的时候,需要在tab页上把AutoPilot的模式从disable转换成 Active或者Monitoring。

选择好模式后,需要选择所需的策略以及冷却的时间,自定义配置位置填上自定义的参数。然后保存,这样就可以开启AutoPilot, 对这个作业状态的进行监控以及资源的自动调优。

当需要关闭一个作业的AutoPilot的时候,同样也只需在配置页面,把模式切换成disable并保存就可以了,这样AutoPilot的状态又回到了未启动。无论怎样操作AutoPilot都不会影响作业的正常运行。

2.如何查看AutoPilot运行状态

当AutoPilot启动的时候,可以在自动调优的状态页面查看当前AutoPilot运行的状态。状态信息主要包含两部分:

  • 第一是最新推荐的作业配置。当AutoPilot处于Monitoring状态下面,如果有新的配置推荐产生,就会在这个页面进行展示。同时可以手动在这个页面触发配置的更新。
  • 第二是看到每个AutoPilot启动策略所监控到的作业的状态信息。这些状态信息一方面可以解释目前AutoPilot为什么要进行配置的更新,同时也可以用根据一些状态信息来辅助进行手动作业的调优或者代码的优化。

3.如何查看AutoPilot历史信息

AutoPilot在运行过程中,一旦对作业的配置进行了修改,这些修改都会被作为事件保存下来,让用户可以在后期进行AutoPilot行为的review,以及作业流量的分析。事件信息的查看,可以在“运行事件”里,将AutoPilot类型的事件过滤出来并进行查看。

三、如何选择AutoPilot策略

1.一般场景作业

推荐大家使用默认参数,也就是cpu-based + memory-utilization-based + job-exception-base的组合策略。在这个默认策略下面,当TM的CPU利用率长期比较高的的时候就会触发并发度的调整;TM的内存的使用率偏高或者偏低的时候,就会触发单个TM的内存调整;当作业出现资源相关的异常的时候,也会及时的触发TM资源的调整。整个配置跟常见的弹性计算的自动调优配置是基本保持一样的,因此比较简单易懂。

2.高优先级、延迟敏感的作业

推荐不要开启AutoPilot的Active模式,而是使用Monitoring模式。因为这种类型的作业一旦触发AutoPilot的调优,就会导致作业重启,可能会影响业务效果。通过Monitoring模式,可以人工的定时的去review,检查是否有需要优化的配置,可以在适当的时机进行手动更新。

3.使用sls或者datahub的作业

推荐使用source-delay-based + slot-utilization-based + memory-utilization-based + job-exception-based 策略。这样对作业并发度的调优效果会更好,整个算法的收敛的速度会更快。

四、AutoPilot使用注意事项

首先,AutoPilot修改并发度是通过默认的并发度来实现的,因此作业代码中不能显示设置并发度,否则就无法实现动态调节。

其次,AutoPilot触发更新以后,控制台会自动重启作业,这会导致作业短暂的停止处理数据,对于抖动敏感的作业推荐使用Monitoring模式,避免对业务产生影响。

第三,是AutoPilot策略对作业的数据模型有一定假设:

  • 作业的流量需要是流量平滑变化的,不能有数据倾斜,这样可以根据当前时间之前一小段时间作业的运行统计数据来预估作业所需资源;
  • 作业的数据不能有数据倾斜,每个算子的吞吐能力会随着并发度线性扩展,这样才可以根据当前作业的吞吐能力去预估并发度调整后作业的吞吐能力,从而决定作业需要调整多少并发度;

当作业的pattern严重偏离这几个假设时,可能会存在作业异常, AutoPilot没有触发自动调整,或者说AutoPilot触发了自动的调整,但是算法可能会出现无法收敛,这时作业会持续的处于异常状态,并且不断的重启等等。此时需要关闭AutoPilot,进行手动的作业调优,才能保证作业处于健康的状态。

原文链接:https://developer.aliyun.com/article/781173?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

如何使用 AutoPilot 对作业自动调优?相关推荐

  1. mysql limit acs_Oracle Acs资深顾问罗敏 老罗技术核心感悟:牛! 11g的自动调优和

    作者为:? SHOUG成员 – ORACLE ACS高级顾问罗敏 多年前的一段往事 记得多年以前在一个10g平台的数据仓库项目上遇到一个非常难优化的SQL语句,当时即便我采集了统计信息.甚至在语句中增 ...

  2. 【Oracle】undo 自动调优

      Oracle 10gr2的后续版本中添加了UNDO信息最短保留时间段自动调优的特性,不再仅仅依据参数UNDO_RETENTION的设定,其调优原则如下: 1 当UNDO TABLESPACE为 f ...

  3. undo自动调优介绍

    Oracle 10gr2的后续版本中添加了撤销(UNDO)信息最短保留时间段自动调优的特性,不再仅仅依据参数UNDO_RETENTION的设定,其调优原则如下: l  当撤销表空间(UNDO TABL ...

  4. SpMV矩阵格式自动调优

    SpMV的自动调优和矩阵格式和kernal实现都有关系,在这样的调研中,我们主要关注具体的建模和模型训练手段. 1. Adaptive SpMV/SpMSpV on GPUs for Input Ve ...

  5. (三)大话深度学习编译器中的自动调优·Empirical Search

    前面的第一篇"(一)大话深度学习编译器中的自动调优·前言"与第二篇"(二)大话深度学习编译器中的自动调优·DSL与IR"分别介绍了背景与一些相关概念,这第三篇我 ...

  6. BOLT:弥合自动调优和硬件原生性能之间的差距

    本文介绍的BOLT基于TVM框架,在GPU平台上进行了进一步的图优化和算子优化,最终将常见的卷积神经网络模型的推理速度提升了2.5倍,搜索时间大大缩减,可以实现20分钟内完成自动搜索调优.下面对BOL ...

  7. 通过大规模机器学习自动调优数据库参数

    目录 1. 引言 2. 挑战 3. 系统概览 3.1 举例 3.2 假设和限制 4. 工作负载识别 4.1 统计收集 4.2 修剪冗余监控指标 5. 识别重要的参数 5.1 使用Lasso进行特征选择 ...

  8. SQL Tuning Advisor 使用11G的自动调优建议

    先给监控用户授权  grant advisor to  DBA_MONITER; 可以在PL/SQL DEVELOPER 命令窗口执行 SQL_ID方式 DECLARE my_task_name VA ...

  9. 【Spark深入学习 -14】Spark应用经验与程序调优

    ----本节内容------- 1.遗留问题解答 2.Spark调优初体验 2.1 利用WebUI分析程序瓶颈 2.2 设置合适的资源 2.3 调整任务的并发度 2.4 修改存储格式 3.Spark调 ...

最新文章

  1. linux加入windows域之完美方案
  2. phpcms数据库操作
  3. c语言每瓶啤酒2元答案,【原创源码】C语言 一个喝啤酒小游戏的编程实现(菜鸟级)...
  4. mysql 代替intersect_mysql替代INTERSECT
  5. Cloudera Manager 和CDH6.0.1安装,卸载,各步骤截图(此博文为笔者辛苦劳作最终生成的,使用了3个熬到凌晨2~4点的夜晚,外加一个周末完成,请转载时记录转载之处,谢谢)
  6. AndroidService 深度分析(2)
  7. vue 各组件 使用 Demo
  8. 《Python语言程序设计》二级教程课后编程题及答案
  9. x230 linux驱动程序,佳能 ThinkPad X230 Tablet 驱动程序下载-更新佳能软件(平板电脑)...
  10. Golang中如何处理tcp粘包
  11. CUDA Occupancy Calculator中计算占用率
  12. longhorn介绍
  13. c语言阿基米德螺旋线编程,阿基米德螺旋线进刀凸轮外轮廓铣削的编程技巧
  14. 关于电瓶车管理的思考
  15. java获取当前时间的前一个小时
  16. 将ADS(Advanced Design system)中的版图导入到AD(Altium Designer)中编辑
  17. PWM开发SG90舵机
  18. 《人类简史》——一场引人入胜的人类征途
  19. Lisp语言:列表(List)
  20. 嵌入式系统主要应用哪些行业?

热门文章

  1. mysql事务提交模式
  2. 九、探索性数据分析的应用
  3. 数据分析师被老板问住了——场面一度非常尴尬。
  4. python秒杀商品 多线程_Python——多线程
  5. 如何用c语言实现贪吃蛇登录界面,c语言贪吃蛇UI界面版.docx
  6. GIT的基本操作(建立自己的git远程仓库)
  7. 深度学习:优化器工厂,各种优化器介绍,numpy实现深度学习(一)
  8. java-四则运算,自动出题(4)
  9. java中商业数据计算时用到的类BigDecimal和DecimalFormat
  10. 金融业(互联网金融)创新---我的实地考察和见解