刘思宇+梁毅+陈诚
摘要:Spark是一种新型分布式海量数据处理平台,在应用执行过程中,Spark以任务作为最小执行单元。因此,任务执行时间预测是指导Spark进行性能分析、优化资源调度以及故障监控的基础。在Spark平台中,由于计算数据分布不均及网络资源的共享,导致同样计算逻辑的任务在不同计算节点上执行的时间可能产生很大差异,需根据实时运行环境进行动态预测。通过结合任务在不同节点所需数据量以及集群网络状况,对任务在不同节点的执行时间进行预测。实验表明,该方法对任务进行预估,误差可保证在19%以内,任务执行时间预估算法对Spark调优有一定的指导作用。
关键词:大数据;Spark;预测;分布式;任务
DOIDOI:10.11907/rjdk.171509
中图分类号:TP306
文献标识码:A 文章编号:1672-7800(2017)012-0019-03
Abstract:Spark is a new distributed big data processing platform. In the implementation of Spark, task is the minimum execution unit. Therefore, the prediction of the execution time of the task can guide Spark to perform performance analysis, optimize resource scheduling and fault monitoring. In Spark platform, due to the uneven distribution of computing data and the sharing of network resources, the task with same computing logic may have different execution time in different nodes, and it needs to be dynamically predicted according to the real time environment. Currently on the Spark platform, the prediction technology is rarely studied. This paper predicts the execution time of each task at different nodes by combing the amount of data required by different tasks in each node and the status of cluster network. Experiment show that the method can be used to estimate the tasks in the task set, the error can guarantee less than 19%. Therefore, the task execution time estimation algorithm proposed in this paper has some guiding effect on Spark tuning.
Key Words:big data; Spark; prediction; distributed; task
0 引言
大數据时代,新型海量数据处理平台大量涌现。其中,以Spark数据处理平台为典型代表的分布式内存计算平台得到广泛关注 [1]。Spark是继Hadoop之后提出的一种基于内存的分布式大数据处理平台,被誉为可以取代Map/Reduce的下一代大数据处理核心技术[2-3]。与Hadoop Map/Reduce相比,Spark基于内存的运算可提升100倍处理速度[4]。
任务是Spark的最小执行单元。由于不同任务所需数据可能存在于集群各节点上,且数据量不尽相同,导致同样计算逻辑任务在不同的计算节点上执行的时间产生很大差异,需要根据应用运行的实时环境进行动态预测[5]。对任务执行时间的有效预测可以指导Spark进行性能分析、优化资源调度以及监控平台故障。目前,在Spark平台还没有任务执行时间预估技术。
本文分析了Spark平台任务的拉取、执行过程,结合各任务在不同节点所需的数据量以及集群网络状况,对各任务执行时间进行预测,为优化资源调度、应用性能分析奠定基础。
1 相关技术
1.1 Spark系统模型
Spark 是由 UC Berkeley AMP 实验室开发的开源通用的海量数据处理平台,是对Map/Reduce型海量数据处理平台的创新与丰富,其构架如图1所示。
Spark平台采用Master/Slave结构,其中集群管理器作为Master端,负责平台中的应用与资源管理;计算节点作为Slave端,负责启动任务执行器Executor,由Executor负责任务的实际计算。在执行应用时,会在相应节点运行Driver进程,负责整个应用的执行和管理。
Spark大数据处理平台的计算模型使用有向无环图(Directed Acyclic Graph, DAG),描述复杂数据处理逻辑并提供更丰富的数据操作原语。Spark引入新的分布式数据集抽象表达模型——弹性分布式数据集(Resilient Distributed Datasets,RDDs)。RDD作为Spark平台的核心概念,用于描述分布存储于多个节点的海量数据集。
1.2 Spark任务执行模型
Spark计算模型中,依据数据操作类型,作业分为多个阶段(Stage),各阶段以一定的拓扑结构执行。在单个阶段内部,为了操作海量数据集,Spark会并行执行一组完全相同的任务来处理RDD的每一分片。任务执行完成后,输出结果会进行分区处理,具有相同分区值的元组会传给后继阶段中同一个任务进行相关计算。不同Stage之间的数据传输过程被称为混洗(Shuffle)。同一阶段任务启动时,会首先选择合适的节点,并拉取其它节点上属于该任务的数据进行计算。
执行任务时,Spark首先并行拉取远程数据,而后对拉取来的数据进行处理,Spark的任务执行模型如图2所示。
2 任务执行时间预测方法
本节介绍任务执行时间预测技术,主要是不同节点上各任务数据量获取及各任务执行时间计算。
2.1 各节点数据量获取
当新的Stage开始时,各任务需要根据上一阶段不同任务写入Spark既有模块MapStatus中的文件位置信息,寻找合适的启动位置,本方案拟定义新的方法对Map任务输出到各节点的数据量进行统计,核心算法如下:
2.3 系统实现
系统基于Spark 1.6平台实现,主要针对Spark平台中既有的各模块进行改造,并新增了数据采集模块和任务执行代价预测模块,图3为系统架构。
在Executor端,新增了用以获取Executor间网络通信状况以及Executor输出数据信息的ExecutorMonitor。
在Driver端,新增了PartitionSizeGetter组件以及TaskCostEstimator组件。其中PartitionSizeGetter模块负责在任务启动之前访问Spark既有的组件MapOutputTracker,统计出该任务在不同节点所需拉取的数据量,为任务执行代价估计模块做准备。TaskCostEstimator通过PartitionSizeGetter模块获取不同任务在不同节点上所需的数据量,以及在Driver上的网络通信状况,通过计算模型进行综合,对任务在不同位置的执行时间进行预估。
3 性能评估
3.1 实验环境及负载选择
本系统基于Apache Spark 1.6实现,所用操作系统为CentOS6.2,实验测试环境由 4台物理节点构成,每台节点的硬件配置、网络状况、操作系统以及JVM版本等如表1所示。在本测试环境中,1台节点作为提交节点,其余3台作为数据计算节点。
任务执行时间通过Spark提供的UI界面监控获得,选择BigDataBench中的标准负载WordCount进行实验。
3.2 预测结果分析
监测WordCount负载中执行Count操作的各任务所花费的时间,图4为任务执行时间预测值与实际值的对比情况。
使用本文方法对各任务的执行时间进行预测,所得到的预测曲线与实际曲线基本吻合,任务预测时间与实际执行时间的平均误差为13%,最大误差不超过19%。
4 结语
本文面向Spark海量数据处理平台,设计并实现了任务执行时间的预测模型,该模型充分考虑了任务的数据拉取代价与数据处理代价,对任务执行时间进行了综合预测。实验表明,本文预测方法可有效预测任务执行时间,最大误差不超过19%。
参考文献:
[1] AVAILABLE.Apache spark [EB/OL]. https://spark.apache.org.
[2] AVAILABLE.Apache hadoop [EB/OL]. http://hadoop.apache.org/.
[3] DEAN J, GHEMAWAT S. MapReduce: simplified data processing on large clusters[EB/OL]. http://blog.csdn.net/cnlht/article/details/6181799.
[4] KRISH K R, ANWAR A, BUTT A R. HatS: a heterogeneity-aware tiered storage for hadoop[C].Ieee/acm International Symposium on Cluster, Cloud and Grid Computing. IEEE,2014:502-511.
[5] ZAHARIA M, CHOWDHURY M, DAS T, et al. Resilient distributed datasets[C].A fault-tolerant abstraction for in-memory cluster computing,2014.
(責任编辑:杜能钢)