- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Spark功能优化实战手册.pdf
在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范围与前景格外广泛。
然而,通过Spark开发出高功能的大数据计算作业,并不是那么简约的。假如没有对Spark作业进行合理的调优,Spark作业的执行速度可能会很慢,这样就完全体现不出Spark作为一种快速大数据计算引擎的优势来。因而,想要用好Spark,就必需对其进行合理的功能优化。
Spark的功能调优实际上是由很多部分组成的,不是调整几个参数就可以立竿见影提升作业功能的。我们需要依据不同的业务场景以及数据情况,对Spark作业进行综合性的分析,然后进行多个方面的调整和优化,才能获得最佳功能。
笔者依据之前的Spark作业开发阅历以及实践积累,总结出了一套Spark作业的功能优化方案。整套方案次要分为开发调优、资源调优、数据倾斜调优、shuffle调优几个部分。开发调优和资源调优是全部Spark作业都需要留意和遵照的一些基本准绳,是高功能Spark作业的基础;数据倾斜调优,次要讲解了一套完整的用来处理Spark作业数据倾斜的处理方案;shuffle调优,面对的是对Spark的原理有较深层次把握和争辩的同学,次要讲解了如何对Spark作业的shuffle运转过程以及细节进行调优。
本文作为Spark功能优化指南的基础篇,次要讲解开发调优以及资源调优。
开发调优 Spark功能优化的第一步,就是要在开发Spark作业的过程中留意和应用一些功能优化的基本准绳。开发调优,就是要让大家了解以下一些Spark基本开发准绳,包括:RDD lineage设计、算子的合理使用、特殊操作的优化等。在开发过程中,时时辰刻都应当留意以上准绳,并将这些准绳依据具体的业务以及实际的应用场景,机警地运用到本人的Spark作业中。
准绳一:避开创建反复的RDD
通常来说,我们在开发一个Spark作业时,首先是基于某个数据源(比如Hive表或HDFS文件)创建一个初始的RDD;接着对这个RDD执行某个算子操作,然后得到下一个RDD;以此类推,循环往复,直到计算出最终我们需要的结果。在这个过程中,多个RDD会通过不同的算子操作(比如map、reduce等)串起来,这个“RDD串”,就是RDD lineage,也就是“RDD的血缘关系链”。我们在开发过程中要留意:对于同一份数据,只应当创建一个RDD,不能创建多个RDD来代表同一份数据。一些Spark初学者在刚开头开发Spark作业时,或者是有阅历的工程师在开发RDD lineage极其冗长的Spark作业时,可能会忘了本人之前对于某一份数据已经创建过一个RDD了,从而导致对于同一份数据,创建了多个RDD。这就意味着,我们的Spark作业会进行多次反复计算来创建多个代表相同数据的RDD,进而添加了作业的功能开销。
一个简约的例子
需要对名为“hello.txt”的HDFS文件进行一次map操作,再进行一次reduce操作
//也就是说,需要对一份数据执行两次算子操作。
//错误的做法:对于同一份数据执行多次算子操作时,创建多个RDD。
//这里执行了两次textFile方法,针对同一个HDFS文件,创建了两个RDD出来,
//然后分别对每个RDD都执行了一个算子操作。
//这种情况下,Spark需要从HDFS上两次加载hello.txt文件的内容,并创建两个单独的RDD;
//其次次加载HDFS文件以及创建RDD的功能开销,很明显是白白铺张掉的。
val rdd1 = sc.textFile([hdfs://192.168.0.1:9000/hello.txt](hdfs://192.168.0.1:9000/hello.txt))
rdd1.map(...)
val rdd2 = sc.textFile([hdfs://192.168.0.1:9000/hello.txt](hdfs://192.168.0.1:9000/hello.txt))
rdd2.reduce(...)
//正确的用法:对于一份数据执行多次算子操作时,只使用一个RDD。
//这种写法很明显比上一种写法要好多了,由于我们对于同一份数据只创建了一个RDD,
//然后对这一个RDD执行了多次算子操作。
//但是要留意到这里为止优化还没有结束,由于rdd1被执行了两次算子操作,其次次执行reduce操作的时候,
//还会再次从源头处重新计算一次rdd1的数据,因而还是会有反复计算的功能开销。
//要彻底处理这个问题,必需结合“准绳三:对多次使用的RDD进行长久化”,
//才能保证一个RDD被多次使用时只被计算一
您可能关注的文档
- Java中的方法引用.docx
- Java生鲜电商平台SpringCloud微服务架构中分布式事务解决方案.docx
- JetBrains出品,一款好用到爆的数据库工具,惊艳到了!!!.docx
- Kafka 降本实用指南.docx
- Kafka 灵魂伴侣之运维管控–集群运维.docx
- kafka生产者消息投递分区?消费者选择分区?.docx
- Kafka的灵魂伴侣LogiKafkaManger()之运维管控集群列表.docx
- Kafka的灵魂伴侣LogiKafkaManger(一),滴滴开源项目.docx
- MySql删除重复记录并且只保留一条.docx
- RabbitMQ如何动态创建队列和监听.docx
- Spring Boot 无侵入式 实现API接口统一JSON格式返回.docx
- Spring Boot 最流行的 条实践解读,值得收藏!.docx
- SpringBoot 源码解析——SpringBoot 中的日志基础服务.docx
- SpringBoot 源码解析——源码模块功能分析.docx
- SpringBoot中的全局异常处理.docx
- SpringBoot源码解析——BeanDefinitionLoader 源码分析.docx
- “” 是如何支撑百万 QPS 的?.docx
- 一口气说出 种 IO 模型,蒙圈了!.docx
- 万字好文,电商秒杀系统架构分析与实战.docx
- 万字详解本地缓存之王 Caffeine.docx
文档评论(0)