Spark Shuffle原理解析

一:到底什么是Shuffle?

Shuffle中文翻译为“洗牌”,需要Shuffle的关键性原因是某种具有共同特征的数据需要最终汇聚到一个计算节点上进行计算。

二:Shuffle可能面临的问题?运行Task的时候才会产生Shuffle(Shuffle已经融化在Spark的算子中了)。

1, 数据量非常大;

2, 数据如何分类,即如何Partition,Hash、Sort、钨丝计算;

3, 负载均衡(数据倾斜);

4, 网络传输效率,需要在压缩和解压缩之间做出权衡,序列化和反序列也是要考虑的问题;

说明:具体的Task进行计算的时候尽一切最大可能使得数据具备Process Locality的特性;退而求次是增加数据分片,减少每个Task处理的数据量。

三:Hash Shuffle

1, key不能是Array;

2, Hash Shuffle不需要排序,此时从理论上讲就节省了Hadoop MapReduce中进行Shuffle需要排序时候的时间浪费,因为实际生产环境有大量的不需要排序的Shuffle类型;

思考:不需要排序的Hash Shuffle是否一定比需要排序的Sorted Shuffle速度更快?不一定!如果数据规模比较小的情形下,Hash Shuffle会比Sorted Shuffle速度快(很多)!但是如果数据量大,此时Sorted Shuffle一般都会比Hash Shuffle快(很多)

3,每个ShuffleMapTask会根据key的哈希值计算出当前的key需要写入的Partition,然后把决定后的结果写入当单独的文件,此时会导致每个Task产生R(指下一个Stage的并行度)个文件,如果当前的Stage中有M个ShuffleMapTask,则会M*R个文件!!!

注意:Shuffle操作绝大多数情况下都要通过网络,如果Mapper和Reducer在同一台机器上,此时只需要读取本地磁盘即可。

Hash Shuffle的两大死穴:第一:Shuffle前会产生海量的小文件于磁盘之上,此时会产生大量耗时低效的IO操作;第二:内存不共用!!!由于内存中需要保存海量的文件操作句柄和临时缓存信息,如果数据处理规模比较庞大的话,内存不可承受,出现OOM等问题!

四:Sorted Shuffle:

为了改善上述的问题(同时打开过多文件导致Writer Handler内存使用过大以及产生过度文件导致大量的随机读写带来的效率极为低下的磁盘IO操作),Spark后来推出了Consalidate机制,来把小文件合并,此时Shuffle时文件产生的数量为cores*R,对于ShuffleMapTask的数量明显多于同时可用的并行Cores的数量的情况下,Shuffle产生的文件会大幅度减少,会极大降低OOM的可能;

为此Spark推出了Shuffle Pluggable开放框架,方便系统升级的时候定制Shuffle功能模块,也方便第三方系统改造人员根据实际的业务场景来开放具体最佳的Shuffle模块;核心接口ShuffleManager,具体默认实现有HashShuffleManager、SortShuffleManager等,Spark 1.6.0中具体的配置如下:

valshortShuffleMgrNames = Map(
"hash" ->"org.apache.spark.shuffle.hash.HashShuffleManager",
"sort" ->"org.apache.spark.shuffle.sort.SortShuffleManager",
"tungsten-sort" ->"org.apache.spark.shuffle.sort.SortShuffleManager")

转载于:https://www.cnblogs.com/yjd_hycf_space/p/7650277.html

Spark Shuffle原理解析相关推荐

  1. spark启动的worker节点是localhost_Spark大数据在线培训:Spark运行原理解析

    在大数据技术框架当中,Spark是继Hadoop之后的又一代表性框架,也是学习大数据当中必学的重点技术框架.在这些年的发展当中,Spark所占据的市场地位,也在不断拓展.今天的Spark大数据在线培训 ...

  2. Spark进阶之shuffle深入解析

    第37课:Spark中Shuffle详解及作业 http://www.blog.csdn.net/zhumr/article/details/52540994 Spark Shuffle原理.Shuf ...

  3. Spark Shuffle 解析

    5.Spark Shuffle 解析 5.1 Shuffle 的核心要点 5.1.1 ShuffleMapStage 与 FinalStage 在划分 stage 时,最后一个 stage 称为 Fi ...

  4. Spark内核解析之五:Spark Shuffle解析

    Shuffle的核心要点 1. ShuffleMapStage与ResultStage 在划分stage时,最后一个stage称为finalStage,它本质上是一个ResultStage对象,前面的 ...

  5. spark源码-shuffle原理分析-1-ShuffleWriter

    ShuffleWriter 1.概述 2.ShuffleHandle注册 2.1.注册时间点 2.2.向shuffleManager注册shuffle 2.2.1.BypassMergeSortShu ...

  6. spark原理解析和spark core

    spark原理解析 解析一:resilient distributed dataset (RDD) resilient distributed dataset (RDD):弹性分布式数据集,有容错机制 ...

  7. Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理)

    Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理) 参考文章: (1)Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理) (2)https://ww ...

  8. Spark 系列——Spark的Shuffle原理

    目录 一.基本介绍 1.1 Lineage 1.2 窄依赖 1.3 宽依赖 二.Spark Shuffle的原理 2.1 ShuffleManager 2.2 ShuffleWriter 2.2.1 ...

  9. Spark shuffle机制演进史及原理说明(sort-based/hash-based/bypassShuffleManager)

    spark shuffle 演进的历史 Spark 0.8及以前 Hash Based Shuffle Spark 0.8.1 为Hash Based Shuffle引入File Consolidat ...

最新文章

  1. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
  2. VirtualBox虚拟机中启用usb3.0却无法显示u盘的解决方法
  3. 美团外卖美食知识图谱的迭代及应用
  4. python在长字符串中寻找重复子串_Python 入门到精通
  5. day09_读写分离_Atlas小记
  6. Java删除指定值结点[递归]图解
  7. 做手好菜,骗个好女孩做女朋友(一)
  8. csv数据去重 python_数据去重_Python数据分析实战应用_数据挖掘与分析视频-51CTO学院...
  9. Labview实现画板
  10. 微信小程序实现输入车牌号码的功能(附效果图)
  11. 七宗罪----人性本恶
  12. 新计算机安装系统后鼠标键盘都无反应处理
  13. Unity-Photon Pun2个人总结
  14. MMORPG游戏服务器 - 技能系统设计【上篇】
  15. 推荐系统学习笔记-FNN
  16. win10配置apache
  17. c++中引用变量的使用
  18. HTML实例1 _网页文章
  19. 关于mysql国庆头三天近一周的数据查询题目
  20. 网页抓取/数据抽取/信息提取软件工具包MetaSeeker

热门文章

  1. C语言程序设计 细节总结(第10-11章 文件、预处理命令)
  2. mysql8导入 psc 没有数据_新特性解读 | MySQL 8.0.22 任意格式数据导入
  3. 单片机音频节奏灯_用C51写的单片机音乐彩灯程序
  4. python实现洗牌算法_为什么渔民耶茨最有用的洗牌算法?
  5. barmanager 不显示_广州13.3寸广告液晶显示屏品牌排行榜
  6. 删除空值_空白单元格行,如何快速批量删除?简单方法,效率飞升
  7. C语言条件语句(就做个笔记,云储存一下)
  8. 核爆rpg手机版_好嗨游戏:不玩吃亏 ,20款全世界最佳移动RPG角色扮演游戏(上)...
  9. mysql substr 中文乱码_刚碰到的MySql乱码的问题
  10. github javaguide_GitHub上收获Star数排名前10的Java项目