Spark调优、编码之奇技淫巧!

1.正确使用转换操作,明确何时应该减少shuffle,何时应该增加shuffle。

2.恰当的资源配置,资源配置不当会严重影响作业性能,哪怕你代码上无懈可击。

以上是粗略的小结,具体请看Cloudera的两篇关于Spark调优的博客, How-to: Tune Your Apache Spark Jobs (Part 1)


————————————————————————————————————————————————————————————————————


spark作为一个将大部分中间数据扔在内存里做中间辗转地的分布式框架,为人所熟知的是它优秀灵活的计算能力,但越是灵活的东西越需要一些奇技淫巧。

这里说一些在处理大量数据时一些提速以及安全的方式╮(╯▽╰)╭。

1.join操作。不要用join操作*10086。如果一定需要join完成操作,请用group后再map模拟join操作。这样不仅安全可靠,而且速度有很大提升。distinct同理。

2.这个有人提到了,spark的速度和你设置executor数目和任务细分数相关。由于shuffle操作会将stage切成两段,一个shuffle之前的任务全部结束前后面的任务不会开始,调节一个恰当的executor(可以或略大于被任务整除的数目)数目可以显著提高效率。

3.cache方法和persist方法在对中间数据很大时资源浪费比较大,如果可以建议用save把中间rdd放到hdfs硬盘上。

4.少用shuffle操作,优化的时候尤其注意UI上shuffle write数据量过大的操作,它是导致任务缓慢的最大原因。

5.在可以用reduce解决问题的时候,不要用group。因为reduce会先处理当前节点的所有分片同key进行合并再对不同节点同样的key进行合并,而group会将所有相同的key整合后再处理。对内存的消耗显而易见。

6.注意!由于在用flatmap输出的出参是list。如果list里面放同一个对象非原始类型的多次引用,那么在下一步rdd处理时,它们之间会相互影响,像你在单机内存里一样!即使它们被分到了不同节点!

这个小特性可以完成一些微妙的操作,具体就看使用者了。

————————————————————————————————————————————————————————————————————

在使用Java/Scala的一些“工具类”之前,一定要确认工具类是否是线程安全的。

比如SimpleDateFormat

默认配置通常不理想。设置恰当的worker数量和内存可以减少总体时间。

TOP 5 MISTAKES WHEN WRITING SPARK APPLICATIONS

 
https://spark-summit.org/2016/events/top-5-mistakes-when-writing-spark-applications/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值