CC00038.spark——|Hadoop&Spark.V12|——|Spark.v12|sparkcore|RDD编程高阶&spark原理初探|

一、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共用此广播变量,
~~~     这样就节约了网络及内存资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值