Spark shuffle原理和详细图解

shuffle 中Map任务产生的结果会根据所设置的partitioner算法填充到当前执行任务所在机器的每个桶中。

  •  Reduce任务启动时时,会根据任务的ID,所依赖的Map任务ID以及MapStatus从远端或本地的BlockManager获取相应的数据作为输入进行处理。
  • Shuffle数据必须持久化磁盘,不能缓存在内存。

Hash方式:

  1. shuffle不排序,效率高。
  2. 生成MXR个shuffle中间文件,一个分片一个文件。
  3. 产生和生成这些中间文件会产生大量的随机IO,磁盘效率低。
  4. shuffle时需要全部数据都放在内存,对内存消耗大。
  5. 适合数据量能全部放到内存,reduce操作不需要排序的场景。

Sort方式:

  1. shuffle需要排序。
  2. 生成M个shuffle中间数据文件,一个Map所有分片放到一个数据文件中,外加一个索引文件记录每个分片在数据文件中的偏移量。
  3. shuffle能够借助磁盘(外部排序)处理庞大的数据集。
  4.  数据量大于内存时只能使用Sort方式,也适用于Reduce操作需要排序的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值