暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

VLDB 2023 | Online-Tune: 通用高效的Spark在线调优框架

时空实验室 2024-02-29
243
分布式数据分析系统Spark广泛应用于处理大规模数据,通过参数调优以达到更高的性能对任务的执行有重要影响。近些年研究者们尝试使用自动调优技术来解决这个问题,但传统的调优方法存在三个问题:功能受限、高开销和搜索效率低下。本次为大家带来数据库领域顶级会议VLDB的论文:《Towards General and Efficient Online Tuning for Spark》
一.背景
随着电子商务、社交媒体等应用的迅速增长,每天产生着海量的原始数据。为此,许多分布式大数据处理平台(例如Hadoop MapReduce、Spark、Flink)被广泛应用。Spark是其中一种代表性的系统,它通过内存集群计算使得大型数据集的处理和分析成为可能。
Spark作业的性能高度依赖于Spark配置参数的选择,错误的配置可能导致性能不佳(运行时间长、资源争用和资源利用率低)。对于定期作业来说,调优的优势更加显著,因为它们在生产中占据着大量Spark作业的比例。这篇文章主要专注于调优定期的Spark作业。
为了保证定期任务更接近最优性能,用户需要确定大量关键参数,然而,手动调整Spark任务的配置参数非常困难,通常耗时耗力,且无法扩展到数据平台的其他任务中。而传统自动调的方法存在三个问题:1)功能有限:许多方法旨在最小化执行时间,忽略执行成本等其他实际的应用需求。2)高开销:许多调优框架属于离线调优范式,需要在非生产集群上收集训练样本并训练模型,过程非常耗时,且可能会带来数据安全问题。3)搜索低效:随着参数维度的增加,学习模型所需的样本数量呈指数增长。此外,这个调优任务本质上是黑盒优化问题,在搜索时面临冷启动问题。    
这篇文章提出了一个通用且高效的Spark参数调优框架Online-Tune。Online-Tune引入通用调优目标,并以贝叶斯优化为基础,支持多目标带约束复杂问题求解;在周期性任务的实际执行过程中执行在线参数调优,避免额外开销,并提出了一个安全采集函数,以确保在线调优的性能稳定性;提出自适应子空间生成、近似梯度下降、迁移学习三种方法,进一步加速调优过程。
二.方法介绍
2.1 总体框架
图1展示了在线Spark调优的工作流程。该框架包含五个组件:
(1)OnlineTune控制器,负责协调整个配置调优过程,并与数据平台和最终用户进行交互。
(2)多目标代理模型,用于学习配置与目标指标或性能约束之间的复杂关系。
(3)高效安全的配置生成器,用于为调优任务推荐一个有希望的配置进行评估。
(4)元知识学习器,利用先前任务的调优历史进一步加速配置的搜索。
(5)数据仓库,用于存储与调优相关的数据,包括运行历史、工作负载指标等。    
图1 在线Spark调优工作流程
用户首先指定他们想要优化的目标和约束条件,并设置整体的优化预算。然后,进行迭代式的调优工作。在周期性作业开始执行之前,OnlineTune控制器为此次执行传递一个新的配置。作业执行完成后,将执行结果提交给控制器。当调优停止时,控制器返回在调优过程中找到的最佳配置。
一旦OnlineTune控制器接收到来自数据平台的配置请求,它就开始在与当前任务相关的运行历史上训练代理模型。然后,配置生成器在一个选择的参数子空间上选择下一个配置。最后,将配置作为对数据平台配置请求的响应发送给OnlineTune控制器。作业配备配置后完成后,控制器接收其执行结果并将其存储在数据仓库中。在这个过程中,元知识学习器通过利用存储在数据仓库中的先前任务调优历史的辅助知识,帮助减少运行次数以找到接近最优的配置。
2.2 优化问题通用表示
给定一个调优任务,优化的目标是找到最优或接近最优的Spark配置,以最小化目标函数并满足性能/安全要求。形式上,使用T(x)来表示调优任务的运行时间函数。运行时间取决于配置向量x,其中包括资源配置和其他与执行相关的配置。P(x)表示配置x中所使用的所有计算资源的成本,为了简化问题,使用资源函数R(x)来代替P(x),它表示使用配置x运行作业所使用的资源量。问题形式化定义如下:    
其中,f(x)是Spark配置x对应的目标结果,TmaxRmax是最大容忍运行时间和资源使用量,β是一个用于控制调优目标的常数。资源函数R(x)表示运行作业时所使用的资源,通常可以直接根据与资源相关的参数值(如spark.executor.instances、spark.executor.cores、spark.executor.memory)获得。
2.3 基于贝叶斯优化的框架
贝叶斯优化(BO)是解决黑箱问题的一种框架,经典BO中的典型循环包含以下步骤:(1)基于观察到的结果拟合一个代理模型M;(2)选择下一个有前景的配置xn,使得,其中为采集函数,被设计用于平衡探索(exploration)和利用(exploitation);(3)评估所选的配置xn以获得其性能,其中ε是噪声;(4)将新获得的结果添加到观察集合中。伪代码如下所示:
图2 贝叶斯优化伪代码
此外,在在线调优过程中,工作负载可能会发生变化,特别是数据大小可能会改变。由于相同的工作负载可能会因不同的输入数据大小而获得不同的结果,数据大小的变化可能会影响调优结果。为了适应这一情况,文中考虑将数据大小与配置一起,对目标值进行建模。具体而言,配置xi包含配置值和数据集大小。    
2.4 配置子空间生成
由于完整的配置空间非常庞大,极大地限制了配置搜索的效率。一个直观的想法是使用一个包含最有影响力参数的较小配置子空间来代替。通过敏感参数调优可以带来显著的性能改进,并避免在对性能影响不大的参数上浪费精力。此外,子空间的大小至关重要:一个大的子空间导致配置搜索的速度较慢,但更有可能找到最佳配置;BO调优框架可以在较小的子空间上快速找到局部最优配置,但这个子空间可能不包括全局最佳的配置。因此,当处理高维空间时,需要解决两个问题:1) 如何衡量Spark参数的重要性,以及2) 如何自适应地决定/调整子空间的大小以同时追求效率和有效性。
参数重要性评估:考虑到单个参数以及各参数之间相互作用的重要性,采用FANOVA来评估参数的重要性。这是一个线性时间算法,用于计算随机森林预测的边缘,并利用这些预测来量化单个参数和参数之间相互作用程度的重要性。根据任务的调优历史记录,参数重要性分析模块可以根据其重要性对参数进行排序。在优化过程中,可以根据每个任务的调优历史获得参数的重要性得分,并通过对这些任务的平均得分来获得最终得分,并选择前K个得分最高的参数域作为选择的子空间。
子空间的改进策略:与现有方法使用固定子空间不同,文章进一步提出自动调整子空间大小,即K。在调优过程开始时,先将子空间的大小K初始化为一个小常数Kinit,然后在一定周期内,迭代更新K的值。空间大小的范围为KminKmax,其中Kmax是整个空间中Spark参数的数量。子空间应该足够大以包含良好的配置,同时它也需要确保 BO 在此子空间内的准确性和效率。当 BO 优化器“取得进展“时,扩展子空间;而当优化器出现停滞时收缩。根据这个机制,子空间可以自适应地调整,以实现高效率同时获得良好的收敛结果。
2.5 近似梯度下降(AGD)   
在 Spark 调优中,优化的目标被视为一个黑盒函数。然而,目标函数并非所有部分都是黑盒的。虽然运行时间与Spark参数之间的关系很复杂,但资源函数可以分解为:𝑅(𝒙) = #cpu_cores(𝒙) +c * #mem(𝒙),它们直接由参数值决定,例如spark.executor.instances,spark.executor.cores和spark.executor.memory。当观察结果近似目标函数 𝑓(𝒙) 时,可以估计导数信息。然而,由于近似梯度下降很容易陷入局部配置中,结合两种方法的优点,交替应用近似梯度下降和贝叶斯优化来选择下一个配置。
图3 配置生成伪代码
图3为配置生成的伪代码。在 BO 的每次迭代中,根据当前的观察结果训练了多个代理,包括目标、运行时间、其他约束和资源(第1行)。每隔 𝑁AGD次迭代,可以通过AGD选择下一个配置(第4行)。否则,通过求解子空间和每个约束的安全区域的交集,得到候选区域(第6-7行)。然后,在候选区域上通过最大化EIC采集函数选择配置(第8行)。最后,返回推荐的配置(第10行)。
2.6 基于元学习的加速
任务特征化与相似性学习:文章从SparkEventLog中提取调优任务的特征向量。元特征总结stage和task两个级别的信息。Stage信息包含使用的Spark操作和转换,描述了作业执行期间进行的Spark核心函数调用。Task信息描述了整体上任务是读取密集型、写入密集型、CPU 密集型等。最终的元特征包括总共75个特征,其中11个来自stage信息,64 个来自task信息。此时,最直观的度量相似性的方法是计算对应任务的两个元特征之间的欧氏距离。然而,每个元特征的类型和规模是异构的,这极大地降低了欧氏距离的有效性。此外,每个元特征对相似性学习都产生了不同的影响。为了解决这些问题,文章建议使用监督学习方法来学习给定两个任务的相似性。具体地,给定两个输入任务的元特征:𝒗1 和 𝒗2,回归模型 M𝑟𝑒𝑔 :(𝒗1, 𝒗2)→𝑑 预测它们之间的距离 𝑑 [0, 1]。较小的距离 𝑑 表示这两个任务更相似。    
初始化设计与热启动:通过利用任务之间的相似性,给定一个新的调优任务,可以获得新任务与之前任务之间的相似性结果。使用元学习器 M𝑟𝑒𝑔 的预测对先前的任务进行排序,并选择相似性最高的前三个任务。然后,从这三个任务中选择找到的最佳 Spark 配置,并在开始贝叶斯优化循环之前将它们设置为初始配置。
三.实验
3.1 实验设置
Benchmark:除了真实世界的生产任务,还从HiBench中选择了6个代表性任务:Bayes、KMeans、NWeight、WordCount、PageRank 和 TeraSort。在元学习实验中使用了包含16个任务的更大的任务集。
实验环境:在线作业执行是在腾讯数据平台分配给customers的资源组上进行的。每个customer拥有一个包含100个计算单元的资源组,其中每个单元对应20个 Intel(R) Xeon(R) Platinum 8255C CPU 核,2.50GHz,50GB 内存。HiBench任务在一个由四个节点组成的小型x86集群上执行。每台服务器配备有2个AMD EPYC 7K62 2.80GHz的48核处理器和512GB PC4 内存。    
对比方法:(1)随机搜索。(2)RFHOC:为每个任务训练几个随机森林,并利用生成的模型和遗传算法来探索配置空间。(3)DAC:一种数据大小感知的自动调优方法,利用层次回归树模型和遗传算法来高效地识别接近最优的配置。(4)CherryPick:使用贝叶斯优化(BO)来找到Spark应用程序的最佳配置。(5)Tuneful:利用BO来在线调整内存集群计算系统的配置。(6)LOCAT:一种基于 BO 的在线方法。
优化目标:实验中考虑了两个调优目标:(1)Spark 作业的运行时间,即令𝛽=1。(2)Spark 作业的执行成本,即令𝛽=0.5。
度量标准:(1)最佳配置的执行时间相对于随机搜索的执行时间的加速比。(2)第𝑖次迭代的成本。(3)执行成本减少量。
3.2 实际生产任务调优结果
图4 25K个Spark任务的内存使用量、CPU使用量和执行成本的减少结果
文章使用Online-Tune来调整腾讯业务场景中约 25K个生产中的 Spark 任务,包括广告、营销和社交网络,这些任务每小时执行一次。图4(a)和(b)表明,与手动配置相比,优化后的配置的平均内存和 CPU 减少分别为57.00%和34.93%。在图4(c)绘制了在这25K个任务上优化期间找到的最佳配置的平均执行成本减少比例。在早期迭代中,调优目标显著降低,在仅 9 次迭代内就降低了 52.44%,前3次迭代中使用的元学习的热启动技术带来了巨大的改善。    
图5 广告相关的八个生产任务的手动配置与调优配置的详细比较
文章对八个不同的在线Spark任务进行了详细评估,如图5。这些任务都来自腾讯的广告业务,其中前四个传统的Spark任务每天执行一次,而另外四个Spark SQL任务每小时执行一次。与手动调整的配置相比,Online-Tune平均减少了62.22%的执行成本。与此同时,平均内存使用量和 CPU 使用量的目标值分别降低了76.52%和56.29%。
3.3 Public Benchmark测试结果
图 6 相对于随机搜索在6个HiBench任务上的加速比
图6表明,基于机器学习的方法,RFHOC和DAC,由于需要大量的训练样本,在迭代次数较少时难以获得较好的结果。(2)基于贝叶斯优化的方法,CherryPick,Tuneful,LOCAT和Online-Tune在有限的预算下获得了更好的结果。其中CherryPick在训练代理模型时没有减少搜索空间的维度,因此无法很好地处理大规模任务。Tuneful和LOCAT需要在缩小搜索空间之前进行10到20次执行,它们的排名不稳定。
图 7 相对于随机搜索在6个HiBench任务上的成本减少量    
图7表明相对于随机搜索,Online-Tune实现了71.22%-88.97%的成本减少,并且与Tuneful和LOCAT相比,平均实现了38.43%和45.20%的成本减少。
3.4 元学习实验结果
图8热启动方法找到的前三个配置的执行成本
图8表明即使在最初的3次试验中,评估成本也可以大大降低,热启动模块相对于默认和手动配置设置,使评估成本在三次迭代中分别降低了66.03%-95.19%和25.44%-55.93%。
图 9 是否使用元学习调优WordCount和TeraSort任务的结果
图9表明,在前10次迭代中,使用元学习的方法平均成本明显低于普通BO。具体而言,为了达到同样的优化效果,使用元学习的BO需要的迭代次数显著少于普通BO。
四.总结
本文提出了一种适用于Spark的通用高效的在线调优框架,可以在满足应用程序约束的同时进多目标调优。为了解决通用调优问题并保证安全性,文章设计了基于贝叶斯优化的解决方案,并设计了自适应子空间生成、近似梯度下降和基于元学习的知识转移三种方法以进一步加速配置搜索。最后,此框架应用于腾讯的数据平台,对广泛的基准测试和生产任务的实验结果表明其具有优越性能。 
   
-End-


本文作者

李佳俊

重庆大学计算机技术专业2023级硕士生,重庆大学START团队成员。主要研究方向:时空数据管理

重庆大学时空实验室(Spatio-TemporalArt Lab,简称Start Lab),旨在发挥企业和高校的优势,深入探索时空数据收集、存储、管理、挖掘、可视化相关技术,并积极推进学术成果在产业界的落地!年度有2~3名研究生名额,欢迎计算机、GIS等相关专业的学生报考!

         


               图文|李佳俊

               编辑|朱明辉

               审核|李瑞远

文章转载自时空实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论