面向电信应急系统的Spark性能预测与参数调优方法探究

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

0引言
大数据是近几年广受关注的一个概念,大数据技术的应用覆盖了生产生活的各个领域。

其中,电信数据具有设备量大、采集指标多、采集频次高的特点。

单个运营商往往就有多达十万个左右的基站,这些设备每隔几分钟就要进行一次数据采集,产生的数据不仅量大且频繁,这就对数据处理的效率提出了较高的要求。

Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。

在MapReduce中,计算结果需要保存在磁盘中,对处理数据的速度造成了较大影响,而Spark把中间数据存放在内存之中,并且支持DAG图(有向无环图)的分布式并行计算的编程框架,提高了运行效率。

除此之外,Spark支持实时流计算,能够适应电信数据的采集频繁的特点,因此Spark很适合用于处理电信数据。

Spark的性能预测为本文的主要研究内容,其对于Spark调优以及故障监控具有重要指导作用。

Spark有多种调优手段。

其中,Spark资源参数调优主要是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使用的效率,从而提升Spark作业的执行性能。

相关实验表明,选择合适的参数配置能够极大地提升程序性能。

然而每个参数具体的选择受很多因素影响,例如集群计算能力、负载特点,以及输入文件大小等等。

因此Spark的参数配置并没有十分明确的准则,多数时候是基于经验手动调参的。

但这样做不仅效率低下,而且不一定能够得到最优配置。

近年来,不少学者开始研究Spark的性能预测方法。

若能根据参数配置等信息准确地估计出Spark任务运行时间,那么接下来在参数空间中进行搜索,便可得到性能最优的参数配置。

然而,影响Spark执行时间的因素很多,并且各个因素之间往往相互影响,因此如何建立一个好的性能模型对于研究者来说是一个难题。

1相关工作与研究现状
影响Spark执行时间的因素有很多。

特定工作条件下的参数配置不仅与集群计算能力相关,也与具体的作业内容、待处理的数据类型和数据大小有关。

参数配置的合理与否对于程序运行结果有着较大的影响。

合理配置参数可以使运行效率成倍提升,而不合理的参数配置不仅仅会导致运行效率下降和集群资源的浪费,还可能会导致节点异常甚至任务执行失败。

在Hadoop中,可以采用基于代价的性能模型进行调参。

但由于Spark系统的内部特征较为复杂,其底层实现机制与Hadoop差异较大,因此该方法
面向电信应急系统的Spark性能预测与参数调优方法探究
林子孟,葛欣竹,曹若麟
(1.电信科学技术第一研究所有限公司,上海市200032;
2.迪爱斯信息技术股份有限公司,上海市200032)
摘要在众多大数据处理平台中,Spark以其运算速度快,操作方便等特有的优势脱颖
而出。

然而在实际应用中,Spark还存在一定的优化空间。

针对Spark的参数配置优化,基
于随机森林回归算法提出一种可行性较高的Spark性能预测的方法,并将该方法应用到
电信数据处理任务中。

实验证实,该性能预测方法不仅易于实现,且通过该方法得到的参
数配置对于Spark任务性能有较好的提升。

关键词大数据;Spark;性能预测;参数调优;电信数据
并不适用于Spark。

目前主流的两大方法是基于系统行为建模和机器学习建模,然而这两个方法各有不足之处。

对Spark系统行为建模需要对该框架有很深的理解,并且很难周全地考虑到所有影响因素。

一般的机器学习方法不需要对Spark内部原理有太多的了解,但需要搜集大量的历史运行数据用于训练模型,在训练数据不足的情况下模型的准确性会大大下降。

由于每个集群的节点个数,节点性能等条件不同,其他集群的历史运行数据不适合用作训练。

而通过在同一集群多次运行作业来收集数据是十分耗时的。

使用机器学习方法进行性能预测的基本思路如下。

a)确定模型参数。

b)在集群上运行Spark程序并收集历史运行数据,用来训练模型。

c)对模型的准确度进行评估分析。

一般来说,在集群性能较为稳定的情况下,只要训练数据足够多且涵盖的范围足够全面,同时选择的算法较为合适,那么通过机器学习的方法可以得到一个较为准确的性能模型。

由于Spark中可调整的参数较多,因此在建模之前,首先应该理清楚Spark的工作原理并筛选出影响较大的几个关键参数,这样做可以减少训练所需的数据,从而减少一些不必要的工作。

2
2.1特点分析
由于不同负载具有不同的特性,使用机器学习建模的一种常见思路是先对Spark任务进行分类,并对每一个类别的任务分别训练性能模型。

得到新任务后,先对任务进行相似性判断后再归类,然后使用其对应的模型进行性能预测。

使用该方案的前提是有足够多不同类型负载的运行记录用来训练模型。

若训练样本数不够多,则可能导致模型效果不理想的情况。

在实际应用中,数据和作业的类型往往具有一定的行业特征。

处理电信数据常用的一些程序虽然在具体功能上各不相同,执行时间上也有很大区别,但这些作业具有一些共性。

功能以查询为主,使用的Spark算子种类集中于一个小范围,程序逻辑相对简单不会过于复杂,并且各个stage的任务往往是顺序执行的,较少出现并行执行的情况。

除此之外,电信数据在格式上是统一的,不同的数据对实验影响相对较小。

后续实验证实,在相同数据大小的不同电信数据上分别运行同一程序时,任务的执行时间基本相同。

基于以上内容可以提出一个假设:无需对任务进行分类,也可能建立准确的Spark性能模型。

即使不对任务进行分类,不同任务的差异性带来的影响依然是不容忽视的。

为了体现不同类型任务对Spark执行时间的影响,我们需要从这些任务中提取几个特征,并将这些特征作为参数加入到机器学习模型中去。

Spark作业的DAG图可以准确地刻画任务的动态特征,从DAG图中我们可以得知一个任务的stage数目,使用的Spark算子以及RDD(弹性分布式数据集)之间的依赖关系等等。

但DAG图由于其独特的拓扑结构,很难通过降维的方式直接把图中信息转化为特征参数,加入到机器学习模型中去。

尽管如此,可以明确的是,在其他条件不变的情况下,一般原始RDD较大,stage数目较多,shuffle操作较多的Spark程序执行时间较长,反之则该程序执行时间较短。

本文使用两个参数描述任务特征,Shuffle类操作权值总和、其余RDD操作权值总和。

仅使用两个参数描述Spark任务看似过于简单,但后续实验证实,这样做不仅可以取得不错的预测效果,而且大大减少了训练模型时对于历史任务样本量的需求。

2.2参数选择
Spark的配置参数有很多,应当选择对执行时间影响最大的一些参数进行调整,其余对于任务运行影响不大的参数使用默认配置即可。

同时,了解各个参数的意义以及影响有助于减少配置的成本。

比如:每个节点启用单个executor时可达到最高运行效率。

当参数num-executors小于节点数时,部分节点将不被分配任务,从而导致运行速率下降。

而将该参数设置高于节点数时,运行效率没有明显变化。

因此,可将num-executors值固定为节
图1不同配置下体现模型相对准确性的一个案

表1
某负载在不同参数配置下的数次运行结果
配置配置1
配置2
配置3
配置4
配置5
配置6
配置7
时间/s
78684646474651
点数,无需再做调整。

2.3性能预测的相对准确性
对于一个待调优的负载,若要通过性能模型搜
索最优配置,最简单的方法就是直接遍历所有可能的配置组合,估计这些配置下的任务执行时间,当估计值达到最小的时候,记录相应的配置即可。

为了防止搜索时间过长,对每个参数需要设置搜索间隔。

例如在本实验中,对于配置范围在512~1612MB 的
Executor-memory 参数,搜索的间隔设置为50MB 。

针对不同负载特性不同的特点,目前已有的大部分研究是基于资源利用率特征或是DAG 图等对负载进行分类,并对每一类负载分别建立性能模型。

本文中提出的方法则是不进行分类,直接将负载特征加入到机器学习模型中。

但无论是本文中提出的建模方法,还是对任务进行分类的方法,从原理上都不能完全精确地描述任务特征,会存在一定的系统误差。

并且,即使是用DAG 图完全相同的两个程序对同一个数据集进行数据处理,其执行时间也可能会有较大差异。

例如,对同样的父RDD 使用filter 操作后得到的子RDD 大小可能不同。

这与filter 算子具体筛选的字段有关,显然当该字段在父RDD 中出现的频率较高时生成的子RDD 较大,而子RDD
的大小不同会导致后续任务的执行时间不同。

因此,绝对误差是无法避免的。

所以,我们提出相对准确性这一概念:在借助性能模型对Spark 参数进行配置时,即便模型估计时间与实际执行时间有差异,但只要能保证通过该模型找到的配置为最优配置,那么同样可以认为这个模型是完全准确的。

不同配置下体现模型相对准确性的一个案例如图1所示。

使用训练好的模型对一个未经训练的负载进行性能预测,预测结果与实际执行时间有较大偏差。

但进一步观察可以发现,模型给出的预测结果由小到大的顺序为:配置3<配置2<配置1<配置
4,这个排序与最终运行的结果是一致的。

那么在实
际应用中,我们若根据预测结果选择配置3,最终是可以达到优化执行时间的目的。

因此,可以认为此次预测结果是有效的。

在后续实验中发现,一个负载的最优配置并不是唯一的。

某负载在不同参数配置下的数次运行结果见表1。

该实验结果表明配置3到配置6皆为该负载的最优配置。

通过模型搜索出的参数配置的实际运行效果如果不比这几个配置差,就可以认为推荐配置
也同样是最优的。

2.4模型建立
用λ1到λn 表示每一个RDD 操作的权值,则操
作权值总和可以表示为:∑λn 。

收集表格中的信息作为特征,并将每一次任务执行时间作为标签,即可构建机器学习模型。

由于涉及到的参数并不是很多,取值范围也有限,因此在参数空间中使用暴力法搜索便可以得到通过该模型计算出的最优配置。

实验参数信息见表2。

3
3.1
模型训练与实验环境
实验平台一共有3个节点,内存分别为16GB ,
8GB ,8GB 。

实验环境配置见表3。

本文通过python 提供的机器学习库scikit-learn 进行随机森林模型的构建。

使用分析电信数据常用的5个程序,在不同参数配置下的共120次运行结果作为训练数据。

3.2模型测试结果
分别使用已训练负载和未训练负载的运行结果
对模型进行验证。

在集群性能稳定未出现异常的情况下,对于已训练的负载,该模型对于任务执行时间估计的平均绝对百分比误差低于10%。

对于未经训练的负载则可能出现较大的绝对误差。

在执行Spark 任务之前,通过训练好的模型可以得出推荐的参数配置,参数配置优化前后对比如图2所示。

部分参数配置见表4。

可以看出,即便是未经训练的负载,也能通过该模型得到较好的参数配置,使用推荐配置后执行速度有明显的提升。

其中wordcount 作为一种常用的
表2
实验参数信息
Parameter 取值范围
输入数据大小
0~6GB
Executor-memory 512~1612MB
Executor-num 3Executor-cores 2~8
Default-parallelism 设置为executor-cores 值的6倍
Driver-cores 1~4Driver-memory 1~3GB Shuffle 类操作总权值/非shuffle 类操作总权值
/Spark.memory.fraction
0.4~0.8
表3
实验环境配置
软件名称版本号
操作系统
CentOS 7JDK jdk1.8.0_222Hadoop Hadoop-3.0.0Spark Spark-2.11.12处理器
Intel Core i5-7400
图2参数配置优化前后对比
"
"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
!!!!!!!!!!!!!!!!!"
近来,有人冒用本刊名义在网上公然征稿,收取各种费用,更有甚者建立网站,在各大论坛发布信息。

对此,本刊编辑部特作如下声明:
1.本刊网址:
2.本刊投稿邮箱:**************;
*************************.cn 3.本刊联系电话:************;
************-2266
4.本刊通信地址:上海市平江路48号(200032)
5.凡在本刊发表的文章已被《中国学术期刊网络
出版总库》及CNKI 系列数据库、维普资讯、北京万方数据股份有限公司和万方数据电子出版社全文收录,作者可在以下网站搜索到文章:

此外任何以本刊名义发布的征稿及组稿信息均系假冒。

本刊对一切假冒和侵权行为保留法律追究的权利。

望广大读者相互转告,不要上当受骗。

《电信快报》编辑部
严正声明
表4
部分参数配置
负载类型推荐配置的
Executor-memory/MB
推荐配置的
Executor-cores
负载110627负载28125负载37125负载45625负载56626负载6
812
5
Spark 测试程序,一般并不用于处理分析电信数据,
模型中也未对其有训练,但通过该方法依然能够得到较好的优化效果(优化配置后执行速度是默认配置下的2.93倍),说明本文提出的方法具有一定的通用性。

4本文提出了一种基于随机森林回归模型的
Spark 性能预测与参数调优方法。

对于待调优的Spark 任务,只需要知道该任务程序所使用的RDD
算子的类型与数目以及输入数据大小,即可给出相应的最优配置。

该方法简单易行,在建模时只需要少量训练数据的同时取得了可观的优化效果,很适用于特定行业背景下,工作内容相对单一的Spark 参数调优工作。

虽然该模型对于估计Spark 任务执行时间存在一定的系统误差,但通过该模型依然可以得到最优参数配置。

不足之处在于,该实验环境中的
spark 集群节点数较少,处理的数据类型较为单一,
对于更加复杂的集群和其他不同类型的spark 任务,该方法的适用性还有待验证。

参考文献
1陈侨安,李峰,曹越,等.基于运行数据分析的Spark 任务参数优化[J ].计算机工程与科学,2016,38(1):11-19.2尉耀稳,余彬,李豪帅,等.基于Spark 平台的参数优化研究现状[J ].电脑知识与技术,2019,15(1):11-13.3康海蒙.基于细粒度监控的Spark 优化研究[D ].哈尔滨:哈尔滨工业大学,2016.
4王婷.成本最小的Spark 作业配置优化算法研究[D ].北京:北京邮电大学,2019.
5华幸成.面向大数据处理的应用性能优化方法研究[D ].杭州:浙江大学,2019.
6
KARAU H ,KONWINSKI A ,WENDELL P ,et al.Spark 快
速大数据分析[M ].王道远,译.北京:人民邮电出版社,
2016.
7
WHITE T.Hadoop 权威指南:大数据的存储与分析(第4
版)[M ].王海,华东,刘喻,等译.北京:清华大学出版社,
2017.
8
王利,王晶,张伟功,等.Linux 内核参数对Spark 负载性能影响的研究[J ].计算机工程与科学,2017,39(7):
1219-1226.
9吴宽欣.基于SRFRP 模型的Spark 性能预测与优化[D ].哈尔滨:哈尔滨工业大学,2017.
林子孟(1994—),男,硕士研究生,主要研究方向为大数据技术。

收稿日期:2020-08-04。

相关文档
最新文档