2. 四川大学 网络空间安全研究院,四川 成都 610065;
3. 四川大学 计算机学院,四川 成都 610065
2. Cyber Security Research Inst., Sichuan Univ., Chengdu 610065, China;
3. College of Computer, Sichuan Univ., Chengdu 610065, China
Spark是广泛使用的开源大数据计算框架[1],利用弹性分布式数据集RDD[2],可以基于内存高效处理数据流。然而,使用Spark进行大数据处理需要预先设定作业的配置参数,参数配置不当,会降低Spark作业的运行性能。而靠传统人工对配置参数进行优化则存在一定的困难。首先,Spark有近200个配置参数,调参时不仅需要清楚每个配置参数的含义,还要明确配置参数与作业负载特征、作业数据规模的关系;其次,部分配置参数存在互相影响的情况;最为困难的一点是配置参数取值搜索空间大,假设只调整3个配置参数,每个配置参数取值有10种可能,则总共有1 000种组合,靠传统优化根本难以完成。
作业运行性能的提升在大数据领域一直被颇为关注。早期在MapReduce提出时就有许多学者针对MapReduce作业研究性能提升[3-5],可分为白盒性能模型和黑盒性能模型两种方法。白盒性能模型关注系统内部运行原理;而黑盒性能模型将系统内部的复杂细节进行屏蔽,更关注系统参数与作业运行性能之间的关系。尽管已有部分研究以白盒性能模型的方式提升Spark作业运行性能[6-7],但白盒性能模型与系统内部高度耦合,不仅构建成本高,而且灵活性差。
因此,本研究的关注点主要集中在黑盒性能模型上,通过研究Spark配置参数与作业运行性能之间的关系为作业推荐最优配置,然而目前Spark在配置参数优化方面的研究成果较少。Petridis等[8]提出了一种通过配置参数进行性能调优的试错方法,说明了作业运行性能与配置参数之间的关系。然而Spark配置参数众多,参数的合理选择也是一个需要考虑的问题。Li等[9]研究了并行度参数对作业运行性能的影响。Chao等[10]对作业运行期间的不同stage分别建立回归模型,再基于每个stage的预测时间建立回归模型以预测作业的总体运行时间,但由于每个stage的预测时间存在误差,基于误差数据再进行回归会增加作业总体运行时间的预测误差。陈侨安等[11]通过近邻搜索算法在历史数据库中寻找同类作业,将同类作业的配置推荐给当前作业。然而该方法对同类作业的刻画存在缺陷,且过于依赖历史数据库中的已有配置[12]。Wang等[13]将配置参数优化问题转化为一个分类问题,以配置参数的默认值作为基准,根据作业性能的不同提升程度对配置参数的不同取值进行分类,然而分类模型并不能对作业的性能做出有效预测。
针对以上问题,本文首先从Spark的近200个配置参数中筛选出对作业运行性能有较大影响的关键配置参数,并构建典型的Spark作业运行数据集,基于支持向量回归算法建立Spark作业性能预测模型,刻画出数据规模、配置参数与作业运行性能之间的函数关系。然后,比较分析了基于爬山算法、模拟退火算法、递归随机搜索算法以及粒子群算法的配置参数优化算法,选择了稳定性最好、适应性最强的递归随机搜索算法,与作业性能预测模型共同构成了本文的Spark作业配置参数智能优化方法。该方法不仅能够有效预测作业的运行时间,而且能够探索配置参数空间的未知领域,为作业寻找到一个合适的最优配置。
1 配置参数智能优化方法Spark作业配置参数智能优化方法由两部分组成:一是,作业性能预测模型;二是,配置参数优化算法。两者的关系如图1所示。在作业类型和数据规模已知的前提下为作业提供推荐配置。配置参数优化算法将参数空间中采样得到的新配置输入到作业性能预测模型,作业性能预测模型返回预测结果以指导配置参数优化算法,该过程持续进行,直至收敛到最优配置。
![]() |
图1 配置参数智能优化方法 Fig. 1 Smart optimization of configuration parameters |
2 作业性能预测模型 2.1 作业性能模型
Spark作业性能的形式化表达[12]如式(1)所示:
$Per\!f = F(p,d,r,c)$ | (1) |
式中:Perf 代表作业的运行性能,本文指Spark作业的运行时间;p为某个作业本身;d为作业待处理的数据规模;r为集群可用的硬件资源;c为作业提交时的配置参数。本文主要探讨对于某个作业p,在硬件资源r充分的条件下,待处理的数据规模d和配置参数c对作业运行性能的影响。
2.2 作业配置参数选择Spark中有上百个配置参数,选择所有配置参数建立作业性能预测模型显得不切实际。一方面,参数过多会提高模型建立的复杂度,引起维度灾难;另一方面,盲目选择过多非显著影响的配置参数反而会降低模型预测性能。本文在选择配置参数时考虑以下原则。
1)所选配置参数能够决定Spark作业运行期间可使用的资源情况。原因在于资源对作业的运行性能有举足轻重的影响。
2)所选配置参数能够影响作业运行时的并行度。原因在于即使在资源充分的情况下,过低的并行度会导致作业无法充分利用已有资源,同样会导致较低的运行性能。
3)参考已有的相关文献[8,14]研究所验证的重要配置参数。
基于以上原则,本文选择的Spark作业配置参数如下:
1)spark.driver.cores:指定分配给driver进程的CPU核数,影响作业可使用的资源。
2)spark.driver.memory:指定分配给driver进程的内存总量,影响作业可使用的资源。
3)spark.executor.instances:指定executor的实例个数,影响作业可使用的资源和并行度。
4)spark.executor.cores:指定每个executor可使用的CPU核数,影响作业可使用的资源。
5)spark.executor.memory:指定每个executor可使用的内存总量,影响作业可使用的资源。
6)spark.default.parallelism:指定每个stage的默认task数量,影响作业的并行度。
2.3 作业采集与预处理本文使用BigDataBench[15]生成待处理的数据集,在配置参数空间采样,基于Spark on Yarn平台提交作业,建立典型的Spark作业运行数据集。图2(a)中展示了Spark作业采集与预处理的主要过程。
![]() |
图2 Spark作业性能预测模型建立过程 Fig. 2 Process of establishing Spark jobs’ performance prediction model |
由于Spark各配置参数的取值范围不统一,在建模前需要对每个配置参数的数值进行归一化处理,如式(2)所示:
${C_j} = \frac{{{C_{j,{\rm ori}}} - {C_{j,\min }}}}{{{C_{j,{\rm max}}} - {C_{j,\min }}}}$ | (2) |
式中,
本文采用支持向量回归算法建立Spark作业性能预测模型,自变量为Spark作业的配置参数和数据规模组成的向量,因变量为Spark作业的运行时间向量。选择径向基函数
$K({x_i},x) = \exp \left( - {\frac{{||{x_i} - x||}}{{2{\sigma ^2}}}^2}\right)$ | (3) |
径向基函数可将低维空间映射至高维空间,对非线性数据的效果较好。
图2(b)中展示Spark作业性能预测模型的建立过程。首先对经过预处理的原始数据集进行划分,将原始数据集中80%的数据划分为训练集,另外20%的数据划分为测试集。为了避免模型过拟合,采用十折交叉验证,对训练集进行不重复抽样,将其划分为10份规模相同的子集,依次选其中1份作为验证集,其余9份作为训练集,最后选择交叉验证误差最小的模型。
Spark作业性能预测模型的主要评估指标有:
1)R-square(
$ {R^2}{\rm{ = }}1 - \frac{{\displaystyle \sum\limits_{i = 1}^n {{{({y_i} - {f_i})}^2}} }}{{\displaystyle \sum\limits_{i = 1}^n {{{({y_i} - \bar y)}^2}} }} $ | (4) |
2)均方根误差(RMSE)。RMSE值越小表示作业性能预测模型的精确度越高。RMSE是误差平方和的均值再开方,即:
${\rm RMSE} = \sqrt {\frac{1}{n}\sum\limits_{i = 1}^n {{{({y_i} - {f_i})}^2}} } $ | (5) |
3)平均绝对误差(MAE)。即绝对误差的平均值:
${\rm MAE} = \frac{1}{n}\sum\limits_{i = 1}^n {|{y_i} - {f_i}|} $ | (6) |
基于第2节中建立的Spark作业性能预测模型设计Spark作业配置参数优化算法,获取具有较好作业适应性的配置参数,提升作业运行性能。
作业的配置参数空间可以用一个2维矩阵表示,每个配置参数用该矩阵的一行表示,即向量
邻域[16]:假设D为整个参数空间,共有N个配置参数,参数空间D中第i个配置参数的上下限为
$ {N_{D,p}}({ s}) = \left\{ {{\textit{z}} \in D{ \Big| \Big. } |{{\textit{z}}_i} - {s_i}| < {p^{\frac{1}{n}}} \cdot ({u_i} - {l_i})} \right\} $ | (7) |
邻居解:当前解的相邻解。若当前解向量
$\begin{aligned}[b] U({ s}) =& \{ [{C_{{\rm{1,}}x \pm {q_1}}},{C_{{\rm{2,}}y}},{C_{{\rm{3,}}{\textit{z}}}}, \cdots ,{C_{N,\alpha }}], \\ & [{C_{{\rm{1,}}x}},{C_{{\rm{2,}}y \pm {q_2}}},{C_{{\rm{3,}}{\textit{z}}}}, \cdots ,{C_{N,\alpha }}], \cdots ,\;\\ & [{C_{{\rm{1,}}x}},{C_{{\rm{2,}}y}},{C_{{\rm{3,}}{\textit{z}}}}, \cdots ,{C_{N,\alpha \pm {q_N}}}]\} \end{aligned} $ | (8) |
式中,
适应值:根据输入解计算得到的输出结果,本文中指作业性能预测模型输出的预测时间值。
3.2 优化算法最优配置参数的求解过程本质上是对解空间进行搜索,为了提高搜索效率,本文基于以下启发式算法求解最优配置参数。
爬山算法(HC)[17]:该算法随机选择一个采样点作为初始解开始迭代,迭代过程中比较初始解与其所有的邻居解,如果邻居解更优则进行替换,直至满足收敛条件。为避免算法求解过程中陷入局部最优,本文在实现中将算法分为局部搜索和全局搜索两部分。局部搜索中使用更优的邻居解替代当前解,获取局部最优解;再通过全局搜索得到目标最优解。
模拟退火算法(SA)[18]:该算法通过模拟热力学中粒子系统的降温过程求解优化问题。本文在实现中将算法分为内外两层循环,内循环终止条件由循环次数决定,外循环终止条件由终止温度及温度下降速率决定。求解过程中,如果新解比当前解更优,则接受当前解;如果新解比当前解更差,则以Metropolis准则[18]接受当前解。
递归随机搜索算法(RRS)[16]:该算法仅对可能包含最优解的期望样本空间进行递归随机搜索以获取最优解。本文在参数空间随机采样一定样本以构成期望样本空间。从该期望样本空间中选取最优样本,并对该最优样本的邻域进行递归随机搜索,以发现更好的样本。如果连续搜索到一定次数未发现更优样本,则缩小邻域,直至邻域小于某个阈值,则退出该期望样本空间的局部搜索并重复上述过程。
粒子群算法(PSO)[19]:该算法通过群体中个体之间的协作和信息共享寻找最优解。本文在实现中首先初始化粒子群,每个粒子的初速度为零,位置向量代表配置参数的一个可行解,在配置参数空间采样生成,根据位置向量计算每个粒子的适应值,并将粒子的自身历史最优位置初始化为粒子的当前位置。在迭代过程中,粒子根据历史经验信息更新自身的速度向量及位置向量逼近最优解。
4 实验结果与分析本文的实验环境是由4个节点组成的“一主三从”的Spark on Yarn架构集群,Spark版本2.2.0,Yarn版本2.6.5。各节点资源配置为操作系统CentOS Linux release 7.4.1708、CPU可用核数17、内存50 GB。实验主要包含:
1)作业性能预测模型评估。主要对性能预测模型的有效性和准确性进行评估。
2)配置参数优化算法对比分析。主要比较基于4种算法实现本文的配置参数优化算法对于最优解的求解质量。
3)配置参数智能优化方法开销评估。主要评估方法的时间开销。
4)作业性能优化对比。主要比较基于本文的智能优化配置和经验优化配置的作业运行性能。
根据作业运行期间对资源的占用情况将作业分为IO密集型、CPU密集型、混合负载型,本文选择典型的3类作业Sort、WordCount、K-Means,以下实验均基于这3类作业完成。
4.1 作业性能预测模型评估分别在集群上运行Sort、WordCount、K-Means这3类作业,采集运行时间的平均值,与模型的预测结果进行对比,如图3所示。
![]() |
图3 预测值与真实值对比 Fig. 3 Comparison between the predicted value and the real value |
从图3中可以看出,模型预测结果和实际运行时间存在一定误差,但是从整体趋势上看,两者较为贴合。实验结果说明了Spark作业性能预测模型的有效性。
通常情况下,训练数据集规模越大,模型的准确性也会越高。3类典型作业下,通过改变训练数据集的规模观察评估指标
表1 作业性能预测模型评估指标 Tab. 1 Evaluation index of jobs’ performance prediction model |
![]() |
从表1中可以看出:训练数据集规模从40%增加到80%时,WordCount回归模型的平均绝对误差MAE下降了约1.6%,K-Means回归模型的平均绝对误差MAE下降了3.3%左右,二者回归模型的拟合效果均有不同程度的提升。而Sort回归模型的误差有轻微增加,但
爬山算法(HC)、粒子群算法(PSO)、递归随机搜索算法(RRS)以及模拟退火算法(SA)等启发式算法本质上是基于贪心策略的思想求解最优值。为避免求解过程陷入局部最优,在求解过程中引入随机性,意味着收敛结果具备不确定性。因此,对基于上述4种算法实现本文配置参数优化算法的求解质量进行对比分析。
求解质量主要包含以下两方面:
1)收敛结果平均值。平均值越小表示算法收敛结果越好。
2)收敛结果标准差。标准差越小表示算法稳定性越好。
将以上4种算法分别在不同的作业上运行500次,计算收敛结果平均值与标准差,结果如图4所示,图4中,误差线代表收敛结果的标准差。
![]() |
图4 配置参数优化算法求解质量比较 Fig. 4 Quality comparison of optimization algorithm for configuration parameters |
由图4可知:从收敛结果来看,爬山算法、递归随机搜索算法以及模拟退火算法在3类作业上表现无太大差异,而粒子群算法在作业K-Means上的收敛结果最差。从算法稳定性来看,模拟退火算法在作业WordCount和作业K-Means上的稳定性很好,标准差几乎为零,但是其在作业Sort上表现较差。只有递归随机搜索算法在以上3类作业上的标准差都较小。
综上而言,相比其他3种算法,递归随机搜索算法在3类作业上的求解质量最好,对不同作业的适应性较强。
4.3 配置参数智能优化方法开销评估基于第4.2节结论,本文最终的Spark作业配置参数智能优化方法由作业性能预测模型和基于递归随机搜索算法的配置参数优化算法构成。将本文的配置参数智能优化方法应用到Sort、WordCount、K-Means这3类作业上,每类作业执行500次最优配置参数求解,计算得到平均每次运行的时间开销见表2。
表2 配置参数智能优化方法时间开销 Tab. 2 Time cost of smart optimization method for configuration parameters |
![]() |
从表2中可以看出,配置参数智能优化方法的时间开销都在毫秒级,表明可以在秒级时间内为作业寻找到最优的配置参数。
4.4 作业性能优化对比经验优化配置是指专业人员基于调优规则[12]以及业务经验为作业设置的参数值。基于本文的智能优化配置和基于经验优化配置的作业运行性能对比结果,如图5所示。
![]() |
图5 智能优化配置与经验优化配置的作业性能对比 Fig. 5 Jobs’ performance comparison between smart optimization and experienced optimization |
与经验优化配置相比,智能优化配置为3类作业分别带来了4%、15%、22%的平均性能提升,说明智能优化配置总体优化效果较好。此外,智能优化过程速度更快、效率更高,解决了传统调优效率低下的问题。
5 结束语利用支持向量回归算法对典型Spark作业运行数据集构建作业性能预测模型,基于该模型设计并实现了配置参数智能优化算法,进而达到Spark作业性能优化的目的。实验结果表明与传统优化配置方法相比,智能优化配置对Spark作业性能有更好的提升效果。在下一步研究中,将考虑影响作业性能的其他因素,如磁盘的IO速度等,并关注多个作业之间存在资源竞争时如何为每个作业推荐合适的配置。
[1] |
Zaharia M,Chowdhury M,Franklin M J,et al. Spark:Cluster computing with working sets[J]. HotCloud, 2010, 10(10): 95. |
[2] |
Zaharia M,Chowdhury M,Das T,et al.Resilient distributed datasets:A fault-tolerant abstraction for in-memory cluster computing[C]//Proceedings of the Usenix Conference on Networked Systems Design and Implementation.Berkeley:USENIX Association,2012:15–28.
|
[3] |
Herodotou H,Lim H,Luo G,et al.Starfish:A self-tuning system for big data analytics[C]//Proceedings of the CIDR 2011 5th Biennial Conference on Innovative Data Systems Research.Asilomar:CIDR,2011:261–272.
|
[4] |
Yigitbasi N,Willke T L,Liao G D,et al.Towards machine learning-based auto-tuning of MapReduce[C]//Proceedings of the 2013 IEEE 21st International Symposium on Modelling,Analysis and Simulation of Computer and Telecommunication Systems.San Francisco:IEEE,2013:11–20.
|
[5] |
Zhou Shilong,Chen Xingshu,Luo Yonggang. Hadoop MapReduce job performance analysis and prediction based on grey-box model[J]. Journal of Sichuan University(Engineering Science Edition), 2014, 46(Supp1): 146-154. [周世龙,陈兴蜀,罗永刚. 基于灰盒模型的Hadoop MapReduce job参数性能分析与预测[J]. 四川大学学报(工程科学版), 2014, 46(增刊1): 146-154. DOI:10.15961/j.jsuese.2014.s1.025] |
[6] |
Chen Yingzhi.Analysis and optimization of memory scheduling algorithm of Spark shuffle[D].Hangzhou:Zhejiang University,2016. 陈英芝.Spark Shuffle的内存调度算法分析及优化[D].杭州:浙江大学,2016. |
[7] |
Zhang H,Liu Z X,Wang L Q.Tuning performance of Spark programs[C]//Proceedings of the 2018 IEEE International Conference on Cloud Engineering (IC2E).Orlando:IEEE,2018:282–285.
|
[8] |
Petridis P,Gounaris A,Torres J.Spark parameter tuning via trial-and-error[M]//Advances in Big Data.Cham:Springer International Publishing,2016:226–237.
|
[9] |
Li M,Tan J,Wang Y D,et al.SparkBench:A comprehensive benchmarking suite for in memory data analytic platform Spark[C]//Proceedings of the 12th ACM International Conference on Computing Frontiers—CF’15.New York:ACM,2015:53.
|
[10] |
Chao Z M,Shi S F,Gao H,et al. A gray-box performance model for Apache Spark[J]. Future Generation Computer Systems, 2018, 89: 58-67. DOI:10.1016/j.future.2018.06.032 |
[11] |
Chen Qiao’an,Li Feng,Cao Yue,et al. Parameter optimization for Spark jobs based on runtime data analysis[J]. Computer Engineering & Science, 2016, 38(1): 11-19. [陈侨安,李峰,曹越,等. 基于运行数据分析的Spark任务参数优化[J]. 计算机工程与科学, 2016, 38(1): 11-19. DOI:10.3969/j.issn.1007-130X.2016.01.002] |
[12] |
Liao Husheng,Huang Shanshan,Xu Jungang,et al. Survey on performance optimization technologies for Spark[J]. Computer Science, 2018, 45(7): 7-15. [廖湖声,黄珊珊,徐俊刚,等. Spark性能优化技术研究综述[J]. 计算机科学, 2018, 45(7): 7-15. DOI:10.11986/j.issn.1002-137X.2018.07.002] |
[13] |
Wang G L,Xu J G,He B.A novel method for tuning configuration parameters of Spark based on machine learning[C]//Proceedings of the 2016 IEEE 18th International Conference on High Performance Computing and Communications; IEEE 14th International Conference on Smart City; IEEE 2nd International Conference on Data Science and Systems (HPCC/SmartCity/DSS).Sydney:IEEE,2016:586–593.
|
[14] |
Zhao Y,Hu F,Chen H P.An adaptive tuning strategy on Spark based on in-memory computation characteristics[C]// Proceedings of the 2016 18th International Conference on Advanced Communication Technology (ICACT).Pyeongchang:IEEE,2016:484–488.
|
[15] |
Gao W,Zhu Y,Jia Z,et al.Bigdatabench:A big data benchmark suite from web search engines[EB/OL].(2013–07–01)[2019–03–20].https://arxiv.org/pdf/1307.0320.pdf.
|
[16] |
Ye T,Kalyanaraman S. A recursive random search algorithm for network parameter optimization[J]. ACM SIGMETRICS Performance Evaluation Review, 2004, 32(3): 44-53. DOI:10.1145/1052305.1052306 |
[17] |
Boyan J,Moore A W. Learning evaluation functions to improve optimization by local search[J]. Journal of Machine Learning Research, 2000, 1: 77-112. |
[18] |
van Laarhoven P J M,Aarts E H L.Simulated annealing[M]//Simulated Annealing:Theory and Applications.Dordrecht:Springer Netherlands,1987:7–15.
|
[19] |
Shi Y,Eberhart R C.Empirical study of particle swarm optimization[C]//Proceedings of the 1999 Congress on Evolutionary Computation—CEC99(Cat.No.99TH8406).Washington:IEEE,1999:1945–1950.
|