论文部分内容阅读
Spark具有良好的容错性和扩展性,在业界已经得到了广泛的应用,但由于Spark平台底层实现技术对用户来说是透明的,而且性能优化需要综合考虑集群资源利用率、Spark负载执行效率等多种因素,使得不同类型的负载的分析优化变得十分复杂,经验不足的Spark用户常常无从入手。Spark的一个特点是支持如Amazon EMR等的云服务,这个特性对于需要处理大数据的中小企业有很大的益处。因此,在云服务上执行Spark程序已经成为了一些企业和科研机构的的弹性选择。Amazon EMR为需要运行Spark负载的用户提供了便利。然而为了高效地使用租赁服务,用户需要在满足应用需求的前提下,申请分配最优的集群资源,以降低租赁成本,然而服务提供商并不能满足这样的服务需求。如此一来,集群资源分配的优化完全成为了用户的责任,这对于Spark用户来说是一个很大的挑战,更是一个亟待解决的问题。本文针对以上问题,设计并实现了Spark集群细粒度监控工具,并在细粒度监控的基础上,完成了以下研究内容:(1)通过对Spark性能影响较大的因素的研究,结合集群资源和Spark历史运行数据的细粒度监控,针对不同类型的负载,对Spark的性能优化工作进行了研究,优化维度包括:数据序列化方式、Shuffle管理器、RDD的持久化、数据的压缩、资源调度、文件系统策略等,优化目标为提高集群的资源利用率、减少作业的执行时间。(2)通过对Spark负载进行性能建模,以用于预测作业的执行时间,进而优化Spark集群资源的分配,集群资源分配优化的指标为,在满足应用需求的前提下,申请分配最优的集群资源,以降低资源使用成本。本文通过实验对Spark负载的优化进行了分析研究,并详细验证了Spark资源分配优化模型的准确性。实验结果表明,模型适用于Spark上运行的多种类型的Spark负载(包括文本处理、机器学习、图计算),不仅有助于用户合理地申请集群资源,而且对服务提供商优化集群资源利用率也有很大的参考价值。