Spark 性能调优 shuffle调优第一篇

一些会触发shuffle的算子

groupByKey

把分布在集群各个节点上的数据中的同一个key,对应的values,都给集中到一块儿,集中到集群中同一个节点上,更严密一点说,就是集中到一个节点的一个executor的一个task中。然后呢,集中一个key对应的values之后,才能交给我们来进行处理

reduceByKey

函数对values集合进行reduce操作,最后变成一个value

countByKey

需要在一个task中 获取到一个key对应的所有value,然后计数, 统计多少个value

join

RDD<key, value>RDD<key, value>,只要是两个RDD中,key相同对应的2value,都能到一个节点的executortask

reduceByKey shuffle聚合示意图

 

reduceByKey(_+_)  ,同一个单词,比如说(hello,1),可能都是散落在不同的节点上;如果对每个单词进行累加计数,就必须让所有单词都跑到一个节点的一个task中,给一个task来处理。

shuffle stage划分

shuffle stage一定是划分为两个部分;因为这是个逆向过程,不是stage决定shuffle,是shuffle决定stage

shuffle算子,在某个action触发job的时候,DAGScheduler,会负责划分job多个stage。划分依据就是,如果发现有触发shuffle操作算子,就比如reduceByKey ,就会将这个操作的前半部分,以及之前所有的RDD和transformation 操作,划分为一个stage,

shuffle操作的后半部分,以及后面的,直到action为止的RDD和transformation操作,划分为另外一个stage.

 

shuffle 前后两部分 task任务

shuffle前半部分(属于stage0)

每一个shuffle的前半部分task,都会创建下一个stage的task数量相同的文件,比如下一个stage会有100个task,那么当前stage每个task都会创建100份文件;会将同一个key对应的values,写入同一个文件中(先入磁盘文件前,会先写入内存缓冲,内存缓冲满溢以后,再Spill溢写到磁盘文件中);不同节点上的task,也一定会将同一个key对应的values,写入同一个key对应的values,写入下一个stage,同一个task对应的文件中

shuffle后半部分(属于stage1)

shuffle的后半部分stage的task,每个task都会从各个节点上的task 所写的那份属于自己的那份文件中,拉取key,value值;然后task会有一个内存缓冲区,用hashMap,进行key,values的汇聚,(key,values)

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值