MapReduce应用的可扩展性能建模与评估
1. 状态空间爆炸问题与启发式方法
在大数据环境中,性能模型常常面临状态空间爆炸问题。在多类环境下,多个多阶段的Spark应用并行运行时,这个问题会更加严重。例如,某个SRN模型的解析求解时间超过了4天。
为了降低模型的复杂度,引入了一种启发式方法。其基本原理是,根据实验发现,单个阶段的任务会以波的形式运行。当任务数量大于核心数量时,在第i阶段开始时,所有C个核心会被分配给任务,剩下Ni - C个任务。一段时间后,正在运行的任务完成并释放资源。假设单个任务的运行时间与同一阶段的其他任务相近,那么接下来的C个任务会获取C个可用资源。一组C个任务被称为一个波。
通过建模波的执行而不是单个任务,可以减少任务的基数,从而提高模型的可扩展性。具体做法是将任务归并为波,并假设一个单一资源有⌈Ni/C⌉个波。虽然这个假设并不完全真实,会给结果带来一些误差,但实验表明误差仍然是可以接受的。
2. 多类模型
2.1 提出的模型
根据YARN调度器,不同类别的应用可以在多个队列中管理,每个队列有框架操作员指定的资源份额。当一个应用类别根据其份额资源不足,同时又请求资源时,YARN会给予该类别比其他类别更高的优先级。为了提高资源利用率,当剩余资源空闲且没有被其他资源不足的类别请求时,YARN也允许资源充足的类别获取比其份额更多的资源。
在每个队列中,应用类别的不同实例以FIFO(先进先出)的方式运行。多类环境的SRN模型可以通过复制单类SRN模型并让它们按照上述规则竞争资源来构建。以4个并行运行的MR应用类别为例,模型的详细结构和行为如下:
为了简化,这里考虑的MR应用每个只有Map和Reduce两个阶段。每个类别的子模型行为与单类模型类似,但主要区别在于瞬时转换tRi,j的启用方式。瞬时转换tRi,j负责第i类(1 ≤ i ≤ 4)和第j阶段(1 ≤ j ≤ 2)的资源获取,它根据保护函数gi,j启用,保护函数gi,j的公式如下:
gi,j =
⎧
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎨
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎩
1,
if (#PW i,j > 0) and (#PC > 0) and (
(∑2
j=1 #PRi,j < Si · C) or
for each class k and k ≠ i :
(∑2
j=1 #PW k,j = 0 or ∑2
j=1 #PRk,j ≥ Sk · C)
)
0,
otherwise
其中Si表示第i类的份额因子。该模型期望的性能指标是每个类别的每个作业的稳态平均执行时间,通过以下公式计算:
ri =
Ni
throughputtF i,2
−1
λT
其中throughputtF i,2可以通过以下公式计算:
throughputtF i,2 = P(#PF i,2 = Ni,2 − 1) · λRi,2
2.2 归并技术
具有多个用户运行多个应用类别的模型具有巨大的状态空间,随着每个阶段任务数量的增加,状态空间会变得更加难以处理。之前提出的将任务数量缩减为波数量的归并技术在这里也被应用,以使模型更易于分析。
假设为每个类别i分配了ci个容器,可以计算ci值的最大公约数cgcd。然后,将任务数量和容器数量都除以cgcd,模拟归并技术。例如,如果总共有240个容器,4个应用类别每个都有60个容器的份额,那么一个有300个任务的阶段大约会有5个波。虽然这个近似并不完全现实,因为应用有时会获得比其份额更多或更少的资源,但这个假设使模型在可接受的误差范围内可以进行解析求解。
3. 数值分析结果
与模拟结果相比,提出的SRN模型的数值分析解决方案更受青睐,因为模拟方法的运行时间可能会很长,并且通常缺乏可扩展性。因此,选择了SPNP工具及其稳态迭代求解器来分析提出的模型,因为SPNP是SRN模型解析求解的先进工具。
为了评估模型数值结果的准确性,在包括公共云到私有集群的真实世界平台上进行了多次实验,并定义了以下误差值:
θSRN = |τSRN − T
T
|
其中θSRN表示SRN模型与实验之间的相对误差,T是在实际测试系统上作业的执行时间,τSRN是数值求解得到的执行时间。
实验设置包括CINECA的PICO大数据集群(配置的核心数量从40到120,每个核心分配给一个单独的容器)和私有集群。IBM Power8(P8)私有集群包括4个虚拟机,每个虚拟机有11个核心和60GB的RAM。Spark执行器配置为使用2个核心和4GB的RAM,而Spark驱动程序使用8GB的RAM。配置的核心数量从6到44,执行器数量从3到22。
实验使用的数据集是由TPC - DS基准数据生成器生成的,这是数据仓库基准测试的行业标准。数据集以Hive查询的外部表形式存在,大小从250GB到1TB不等。不同的查询被作为MR或Spark应用在数据集上执行。
对于单类场景,选择了MR和Spark应用。查询Q1和Q2的Map和Reduce任务数量在不同配置下从1到151不等。从TPC - DS目录中选择的查询Q26和Q52用于Spark应用,阶段数量从4到8不等,每个阶段有1到1000个任务。对于多类场景,MR查询包括Q3到Q5,不同配置的查询Q1到Q5可以在4个队列中执行。每个队列中的用户数量从2到10不等,每个Map或Reduce阶段的任务数量从1到600不等。
单类应用的实验结果如下表所示:
|查询|用户|核心|规模[GB]|T [ms]|τSRN [ms]|ϑSRN [%]|
|----|----|----|----|----|----|----|
|Q1|1|60|250|80316|81285|1.21|
|Q2|1|60|250|84551|86624|2.45|
|Q1|3|20|250|1002160|1059403|5.71|
|Q1|3|40|250|340319|380881|11.92|
|Q2|3|20|250|95403|88982|6.73|
|Q2|3|40|250|86023|76936|10.56|
|Q1|5|20|250|1736949|1827978|5.24|
|Q1|5|40|250|636694|688759|8.18|
|Q2|5|20|250|145646|148453|1.93|
|Q2|5|40|250|90674|106200|17.12|
|Q26|1|24|250|178714|142446|20.29|
|Q26|1|32|250|168041|116364|30.75|
|Q52|1|24|250|181496|144862|20.18|
|Q52|1|32|250|162232|121392|25.17|
|Q52|1|48|750|279243|234573|16|
|Q52|1|48|1000|359987|312014|13.33|
|Q26|1|6|500|2532250|2720902|7.45|
|Q26|1|8|500|2071159|2179066|5.21|
|Q26|1|10|500|1778802|1878948|5.63|
为了估计求解SRN模型所需的阶段任务平均执行时间,进行了一个分析步骤。设计了一个使用最小规模集群的试点执行,并通过执行日志测量平均执行时间。获得的值随后用于其他集群和数据集大小。任务持续时间是20次运行的平均值,Map任务的执行时间更符合Erlang分布,而Reduce任务的执行时间符合指数分布。
单类MR和Spark应用的实验结果显示,平均误差为11.31%,这表明归并技术的性能是可以接受的。多类MR应用模型的准确性评估结果显示,平均误差为14.5%。尽管误差有所增加,但模型的运行时间从几天缩短到了几秒,归并技术显著提高了模型的可扩展性。
以下是一个简单的mermaid流程图,展示了多类应用资源分配的基本流程:
graph LR
A[应用请求资源] --> B{资源是否充足}
B -- 是 --> C[分配资源]
B -- 否 --> D{是否有空闲资源且其他类别资源充足}
D -- 是 --> C
D -- 否 --> E[等待资源]
E --> A
多类MR应用的实验结果如下表所示:
|配置|查询|用户|T [ms]|τSRN [ms]|ϑSRN [%]|
|----|----|----|----|----|----|----|
|1|Q2|5|118667|86094|27.45|
|1|Q5|5|120947|117429|2.91|
|2|Q1|4|206938|235267|13.69|
|2|Q3|2|258220|275443|6.67|
|2|Q4|2|246750|250426|1.49|
|3|Q2|10|252800|182187|27.93|
|3|Q5|10|246702|244860|0.75|
|4|Q1|10|436212|555341|27.31|
|4|Q3|5|599848|710399|18.43|
|4|Q4|5|584583|633454|8.36|
|5|Q1|5|264515|335193|26.72|
|5|Q2|5|998941|1163866|16.51|
|5|Q3|3|337716|356155|5.46|
|5|Q4|3|331327|338616|2.2|
|6|Q1|5|363047|469673|29.37|
|6|Q2|5|1479480|1814878|22.67|
|6|Q3|10|1003998|1064639|6.04|
|6|Q4|10|1015219|1053188|3.74|
|7|Q1|10|468085|601863|28.58|
|7|Q3|5|613296|658311|7.34|
|7|Q4|5|621132|675170|8.7|
|7|Q5|10|1060763|1317149|24.17|
|8|Q1|10|452974|522958|15.45|
|8|Q2|10|1870229|2316278|23.85|
|8|Q3|5|613190|718536|17.18|
|8|Q4|5|587453|598438|1.87|
MapReduce应用的可扩展性能建模与评估
4. 总结与展望
在大数据领域,为运行在集群中的应用预测执行时间是一项具有挑战性的任务。由于大数据集群配备了如Hadoop、YARN、Tez或Spark等一系列框架和工具,其参数集庞大,若没有一个准确有效的性能模型,很难对这些参数进行调整。
过去在该领域的研究主要集中在模拟、学习、实验和日志分析等方法上,但这些方法存在耗时、成本高、不够准确以及缺乏通用性等问题。因此,分析模型因其运行时间短、具有更广泛的适用性和较高的准确性而被选用。
新的框架如Spark支持多应用和多用户共享资源的环境,这使得性能模型的状态空间增大,容易出现状态空间爆炸问题。之前的分析模型虽然考虑了多用户和多阶段,但仅限于单类执行,也面临状态空间爆炸的困扰。而提出的模型具有可扩展性,能够在存在不同类作业的同时运行的应用环境中预测应用的执行时间。
具体而言,提出了分析性的随机回报网(SRN)模型来评估Hadoop和Spark这两种流行的大数据框架。与以往仅考虑单类执行的模型不同,提出了归并方法来解决状态空间爆炸问题,从而使模型能够评估多类执行的性能。通过SPNP工具及其稳态迭代求解器对SRN模型进行求解,该方法在运行时间和准确性方面表现出色。
与在CINECA超级计算机上进行的TPC - DS基准工作负载实验结果相比,单类和多类场景下的平均误差分别为11.3%和14.5%,这个误差范围足以支持容量规划决策和假设分析。
未来的工作将对模型进行扩展,以支持更多有意义的场景,具体如下:
-
支持故障节点的执行
:考虑在集群中存在故障节点的情况下,应用的执行情况和性能表现。
-
数据放置优化
:研究如何优化数据在集群中的放置,以提高应用的执行效率。
-
推测执行
:引入推测执行机制,当某个任务执行缓慢时,启动备份任务,以减少整体执行时间。
还可以进行敏感性分析,找出对应用执行时间影响最大的参数,优先对这些参数进行优化,以用最小的努力获得更好的性能提升。
以下是未来工作的一个简单列表:
1. 扩展模型以支持故障节点的执行。
2. 研究数据放置优化策略。
3. 引入推测执行机制到模型中。
4. 进行敏感性分析,确定关键参数。
为了更清晰地展示未来工作的步骤,下面是一个mermaid流程图:
graph LR
A[扩展模型] --> B[支持故障节点执行]
A --> C[数据放置优化]
A --> D[引入推测执行]
E[参数分析] --> F[敏感性分析]
F --> G[确定关键参数]
G --> H[优化关键参数]
综上所述,提出的可扩展性能模型在解决大数据集群中应用性能评估问题上取得了一定的成果,但仍有许多可以改进和扩展的地方,未来的研究将进一步提升模型的实用性和准确性。
超级会员免费看
23

被折叠的 条评论
为什么被折叠?



