SPARK里的shuffle

定义


  • shuffle中文一般称为 数据混洗
  • shuffle的官方定义是,它是spark的一种让数据重新分布以使得某些数据被放在同一分区里的一种机制。

例子


比如reduceByKey操作。
有时,同一个key的value并没有分布在同一个partition里,甚至没有分布在同一台机器里,而是存放在集群里的某一个其他地方。这时,Spark就会搜集所有的data,并把这些值集合在一起再进行reduce。这就是一次shuffle。
shuffle后,如果需要对数据进行排序等,也可以以下操作:

  • mapPartitions
  • repartitionAndSortWithinPartitions
  • sortBy

能引起shuffle的操作有:

  1. repartition and coalesce (repartion操作)
  2. groupByKey and reduceByKey (对Key操作)
  3. cogroup and join (join操作)

性能影响


  • shuffle操作涉及到网络传输数据,可能还有序列化的问题。它通过map来组织数据,通过reduce来聚集,(这里的mapreduce只是作为Hadoop的mapreduce意义的一种引申)
  • shuffle操作会占用堆内存,当内存不够用时,就会把数据放到磁盘上。
  • shuffle操作会在磁盘上产生大量的中间文件,这些文件只有在相关的RDD不再使用并被回收后,才会被删除。这样做的目的是多次shuffle的时候,不用重复进行计算。所以,长时间运行Spark的任务必定消耗巨大的磁盘空间。临时文件的目录可以通过spark.local.dir进行设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值