您当前的位置: 首页 >  ar

段智华

暂无认证

  • 0浏览

    0关注

    1232博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

第22课:Spark性能调优之使用更高性能算子及其源码剖析

段智华 发布时间:2017-05-19 22:07:14 ,浏览量:0

第22课:Spark性能调优之使用更高性能算子及其源码剖析

Spark性能调优之使用更高性能算子的重要性在于同样的情况下,如果使用更高性能的算子,从算子级别给我们带来更高的效率。Spark现在主推的是DataSet这个API接口,越来越多的算子可以基于DataSet去做,DataSet基于天然自带的优化引擎,理论上讲比RDD的性能更高,DataSet弱点是无法自定义很多功能。平时使用来讲,使用的最基本是Shuffle的算子。Shuffle分为2部分:Mapper端和Reducer端。性能调优的准则是尽量不使用Shuffle类的算子,尽量避免Shuffle。在进行Shuffle的时候,将多个节点的同一个Key的数据汇聚到同样一个节点进行Shuffle的操作,基本思路是将数据放入内存中,内存中放不下的话就放入磁盘中。

如果要避免Shuffle,所有的分布式计算框架是产生Map端的Join,2个RDD进行操作,先把RDD的数据收集过来,然后通过SparkContext进行BroadCast广播出去,假设原先是RDD1、RDD2,我们把RDD2广播出去,原来是进行Join,Join的过程肯定是进行某种计算,此时RDD2其实已经不是RDD了,就是一个数据结构体包裹着数据本身,对RDD1进行Join操作,就是一条条遍历数据跟另一个集合里的数据产生某种算法操作。

如果不能避免Shuffle,我们退而求其次,需要更多的机器承担Shuffle的工作,充分利用Mapper端和Reducer端机器的计算资源,尽量让Mapper端承担聚合的任务。如果在Mapper端进行Aggregate的操作,在Mapper端的进程中就会把相同的Key进行合并。

(1)reduceByKe

关注
打赏
1659361485
查看更多评论
立即登录/注册

微信扫码登录

0.0634s