Spark性能优化指南(基础篇).doc

Spark性能优化指南(基础篇).doc

ID:56281085

大小:1.28 MB

页数:19页

时间:2020-06-05

Spark性能优化指南(基础篇).doc_第1页
Spark性能优化指南(基础篇).doc_第2页
Spark性能优化指南(基础篇).doc_第3页
Spark性能优化指南(基础篇).doc_第4页
Spark性能优化指南(基础篇).doc_第5页
资源描述:

《Spark性能优化指南(基础篇).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Spark性能优化指南—基础篇前言在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范围与前景非常广泛。在美团•大众点评,已经有很多同学在各种项目中尝试使用Spark。大多数同学(包括笔者在内),最初开始尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快、性能更高。然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的。如果没有对Spark作业进行合理的调优,Spark作业的

2、执行速度可能会很慢,这样就完全体现不出Spark作为一种快速大数据计算引擎的优势来。因此,想要用好Spark,就必须对其进行合理的性能优化。Spark的性能调优实际上是由很多部分组成的,不是调节几个参数就可以立竿见影提升作业性能的。我们需要根据不同的业务场景以及数据情况,对Spark作业进行综合性的分析,然后进行多个方面的调节和优化,才能获得最佳性能。笔者根据之前的Spark作业开发经验以及实践积累,总结出了一套Spark作业的性能优化方案。整套方案主要分为开发调优、资源调优、数据倾斜调优、shuffle调优几个部分。开发调优和资源调优是所有Spark作业都

3、需要注意和遵循的一些基本原则,是高性能Spark作业的基础;数据倾斜调优,主要讲解了一套完整的用来解决Spark作业数据倾斜的解决方案;shuffle调优,面向的是对Spark的原理有较深层次掌握和研究的同学,主要讲解了如何对Spark作业的shuffle运行过程以及细节进行调优。本文作为Spark性能优化指南的基础篇,主要讲解开发调优以及资源调优。开发调优调优概述Spark性能优化的第一步,就是要在开发Spark作业的过程中注意和应用一些性能优化的基本原则。开发调优,就是要让大家了解以下一些Spark基本开发原则,包括:RDDlineage设计、算子的合理

4、使用、特殊操作的优化等。在开发过程中,时时刻刻都应该注意以上原则,并将这些原则根据具体的业务以及实际的应用场景,灵活地运用到自己的Spark作业中。原则一:避免创建重复的RDD通常来说,我们在开发一个Spark作业时,首先是基于某个数据源(比如Hive表或HDFS文件)创建一个初始的RDD;接着对这个RDD执行某个算子操作,然后得到下一个RDD;以此类推,循环往复,直到计算出最终我们需要的结果。在这个过程中,多个RDD会通过不同的算子操作(比如map、reduce等)串起来,这个“RDD串”,就是RDDlineage,也就是“RDD的血缘关系链”。我们在开发

5、过程中要注意:对于同一份数据,只应该创建一个RDD,不能创建多个RDD来代表同一份数据。一些Spark初学者在刚开始开发Spark作业时,或者是有经验的工程师在开发RDDlineage极其冗长的Spark作业时,可能会忘了自己之前对于某一份数据已经创建过一个RDD了,从而导致对于同一份数据,创建了多个RDD。这就意味着,我们的Spark作业会进行多次重复计算来创建多个代表相同数据的RDD,进而增加了作业的性能开销。一个简单的例子[java]viewplaincopy1.// 需要对名为“hello.txt”的HDFS文件进行一次map操作,再进行一次redu

6、ce操作。也就是说,需要对一份数据执行两次算子操作。  2.  3.// 错误的做法:对于同一份数据执行多次算子操作时,创建多个RDD。  4.// 这里执行了两次textFile方法,针对同一个HDFS文件,创建了两个RDD出来,然后分别对每个RDD都执行了一个算子操作。  5.// 这种情况下,Spark需要从HDFS上两次加载hello.txt文件的内容,并创建两个单独的RDD;第二次加载HDFS文件以及创建RDD的性能开销,很明显是白白浪费掉的。  6.val rdd1 = sc.textFile("hdfs://192.168.0.1:9000/h

7、ello.txt")  7.rdd1.map(...)  8.val rdd2 = sc.textFile("hdfs://192.168.0.1:9000/hello.txt")  1.rdd2.reduce(...)  2.  3.// 正确的用法:对于一份数据执行多次算子操作时,只使用一个RDD。  4.// 这种写法很明显比上一种写法要好多了,因为我们对于同一份数据只创建了一个RDD,然后对这一个RDD执行了多次算子操作。  5.// 但是要注意到这里为止优化还没有结束,由于rdd1被执行了两次算子操作,第二次执行reduce操作的时候,还会再次从源

8、头处重新计算一次rdd1的数据,因此还是会有重复计算

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。