MapperReduce的shuffle

shuffle阶段划分

Map阶段和Reduce阶段

任务

MapTask和ReduceTask

shuffle过程

Map阶段shuffle:分区->排序->合并

①数据从环形缓冲区溢写到磁盘前,需要先进行分区,然后区内排序

②环形缓存区数据到达阈值(80%),会以小文件的形式溢写到磁盘,此过程可以开启combiner

③将溢写的小文件按照相同分区进行merge

Reduce阶段shuffle:拷贝数据->排序->合并

①一个ReduceTask负责一个分区数据,需从多个MapTask的同一个分区拷贝数据到机器。

②将拷贝过来的数据优先存储在内存,次之磁盘,然后排序,合并做到数据分区内有序

shffle的意义:只有存在reduce才有shuffle,shuffle的意义就是给reduce提供服务。

Spark的shuffle

介绍

①spark的某些算子会触发shuffle,出现shuffle的目的是在不同分区间重新分配数据。

②shuffle过程数据是跨机器传输的,消耗大量的网络io和序列化,消耗性能。

③shuffle后不能保证新的分区的数据是有序的。区别于MR ( MR的shuffle后区内的数据是有序的 )

但是可以调用排序的算子,使得数据区内有序。

④产生shuffle的算子都是分两步执行,mapTask组织数据(shuffle write), reduceTask(shuffle read)

⑤spark的mapTask优先将数据写入内存,内存不足,将数据区内有序,溢写到磁盘

会产生shuffle的算子

①repartition 和 coalesce 重新计算分区的算子。

②??ByKey:除了countByKey,都会产线shuffle

③cogroup 和 join

性能的影响

shuffle就是将数据在不同分区间进行聚合分配,集群的多节点的数据交换,会涉及到磁盘I/O,序列化,网络I/O,很消耗性能。

总结

spark中的shuffle耗时,消耗性能,应该尽量避免!

spark中的shuffle和MapReduce的shuffle的功能一致,跨机器传输数据,细节略有不同。

最新文章

  1. 2014 39th ACM-ICPC 北京赛区 总结
  2. 原生JS:Number对象详解
  3. 软件测试Lab2
  4. Winform禁止容器内控件获得焦点时改变容器显示范围坐标
  5. C# 虚方法 抽象方法 接口
  6. 研究 UIActivityViewController
  7. Windows上安装Xampp后通过命令行进入MariaDB
  8. Oracle EBS 如何月结、对账[Z]
  9. 通过SMTP协议来发送邮件
  10. 1.2 Python开发环境
  11. PC机Win10声音问题两例处理办法
  12. APIO2018 铜滚记
  13. tomcat溢出
  14. Forward团队-爬虫豆瓣top250项目-设计文档
  15. Unity Frame Debugger连接Android真机调试
  16. java第四节 类的继承/抽象/接口/多态性
  17. jmeter聚合报告导出时乱码的解决
  18. 统计字符串中每个字符出现的次数(Python)
  19. Python cookielib 模块
  20. CentOS7使用yum安装LNMP环境以后无法打开php页面

热门文章

  1. 二进制小数 牛客网 程序员面试金典 C++ Python
  2. F. Mattress Run 题解
  3. 这一次,解决Flutter Dialog的各种痛点!
  4. 绚丽的色彩从何而来_LOTO示波器实测WS2812B系LED光源
  5. Trap (陷入/中断) 源码解析
  6. 稳了!我准备了1个晚上的CMS垃圾收集器
  7. 大爽Python入门教程 总目录
  8. bat批处理命令及解释
  9. [noi39]子图
  10. [51nod1587]半现串