编程语言
首页 > 编程语言> > |NO.Z.00038|——————————|BigDataEnd|——|Hadoop&Spark.V12|------------------------------------------|Spa

|NO.Z.00038|——————————|BigDataEnd|——|Hadoop&Spark.V12|------------------------------------------|Spa

作者:互联网



[BigDataHadoop:Hadoop&Spark.V12]                                        [BigDataHadoop.Spark内存级快速计算引擎][|章节二|Hadoop|spark|sparkcore:RDD编程高阶&spark原理初探&RDD编程优化|]








一、RDD编程优化
### --- RDD复用

~~~     避免创建重复的RDD。在开发过程中要注意:
~~~     对于同一份数据,只应该创建一个RDD,不要创建多个RDD来代表同一份数据。
### --- RDD缓存/持久化

~~~     当多次对同一个RDD执行算子操作时,每一次都会对这个RDD以之前的父RDD重新计算一次,
~~~     这种情况是必须要避免的,对同一个RDD的重复计算是对资源的极大浪费
~~~     对多次使用的RDD进行持久化,通过持久化将公共RDD的数据缓存到内存/磁盘中,
~~~     之后对于公共RDD的计算都会从内存/磁盘中直接获取RDD数据RDD的持久化是可以进行序列化的,
~~~     当内存无法将RDD的数据完整的进行存放的时候,
~~~     可以考虑使用序列化的方式减小数据体积,将数据完整存储在内存中
### --- 巧用 filter

~~~     尽可能早的执行filter操作,过滤无用数据
~~~     在filter过滤掉较多数据后,使用 coalesce 对数据进行重分区
### --- 使用高性能算子

~~~     避免使用groupByKey,根据场景选择使用高性能的聚合算子 reduceByKey、aggregateByKey
~~~     coalesce、repartition,在可能的情况下优先选择没有shuffle的操作
~~~     foreachPartition 优化输出操作
~~~     map、mapPartitions,选择合理的选择算子mapPartitions性能更好,但数据量大时容易导致OOM
~~~     用 repartitionAndSortWithinPartitions 替代 repartition + sort 操作
~~~     合理使用 cache、persist、checkpoint,选择合理的数据存储级别
~~~     filter的使用
~~~     减少对数据源的扫描(算法复杂了)
### --- 设置合理的并行度

~~~     Spark作业中的并行度指各个stage的task的数量
~~~     设置合理的并行度,让并行度与资源相匹配。
~~~     简单来说就是在资源允许的前提下,并行度要设置的尽可能大,达到可以充分利用集群资源。
~~~     合理的设置并行度,可以提升整个Spark作业的性能和运行速度
### --- 广播大变量

~~~     默认情况下,task中的算子中如果使用了外部变量,
~~~     每个task都会获取一份变量的复本,这会造多余的网络传输和内存消耗
~~~     使用广播变量,只会在每个Executor保存一个副本,Executor的所有task共用此广播变量,
~~~     这样就节约了网络及内存资源








===============================END===============================


Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart                                                                                                                                                   ——W.S.Landor



来自为知笔记(Wiz)

标签:编程,并行度,---,RDD,内存,Spark,###
来源: https://www.cnblogs.com/yanqivip/p/16134657.html