Spark Shuffle大揭秘
什么是Shuffle:
Shuffle中文翻译为“洗牌”,需要Shuffle的关键原因是某种具有共同特征的数据需要最终汇聚到一个计算节点上进行计算。
Shuffle面临的问题:
1. 数据量非常大;
2 数据如何分类,及如何Partition,Hash、Sort、钨丝计划
3. 负载均衡(数据倾斜)
4. 网络传输效率,需要在压缩和解压缩做出权衡,序列化和反序列化也是需要考虑的问题。
Hash Shuffle:
1. Key不能是Array
2. Hash Shuffle不需要排序,从理论上就节省了Hadoop MapReduce中进行Shuffle需要排序时候的时间浪费,因为实际生产环境有大量不要排序的Shuffle类型。
思考:不要排序的Hash Shuffle是否一定比不需要排序的Sort额度 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等问题。
为了改善上述问题(同时打开太多文件导致Write Handler内存使用过大以及过多文件导致大量的随机读写带来的效率低下的磁盘IO操作),后来推出了Consalidate机制,来把小文件合并,此时Shuffle时产生的文件数量为cores*R,对于ShuffleMapTask的数量明显多于同时可用的并行cores的数量的情况下,Shuffle产生的文件大幅减少,会极大减低OOM的可能。
为此Spark推出了Shuffle Pluggable开发框架,方便系统升级的时候定制Shuffle功能模块,业方面第三方系统改造人员根据实际的业务场景来开发具体最佳的Shuffle模块;核心接口ShuffleManager,具体默认的实现由HashShuffleManager、SortShuffleManager等,Spark1.6.0中具体的配置如下:
为什么需要Sort-Based Shuffle?
1. Shuffle一般包含两个阶段任务:第一部分,产生Shuffle数据的阶段(Map阶段,额外的补充,需要实现ShuffleManager中getWriter来写数据(数据可以以BlockManager写到Memory、Disk、Tachyon等,例如像非常快的Shuffle,此时可以考虑把数据写在内存中,但是内存不稳定,建议采用MEMOrY_AND_DISK方式)),第二部分,使用Shuffle数据的阶段(Reduce阶段,额外的补充,需要实现ShuffleManager的getReader,Reader会向Driver去获取上一个Stage产生的Shuffle数据)。
2.Spark的Job会被划分成很多Stage:
如果只有一个Stage,则这个Job就相当于只有一个Mapper阶段,当然不会产生Shuffle,适合于简单的ETL;
如果不止一个Stage,则最后一个Stage就是最终的Reducer,最左侧的第一个Stage就仅仅是整个Job的Mapper,中间所有的任意一个Stage是其父Stage的Reducer且是其子Stage的Mapper。
3.Spark Shuffle在最开始的时候只支持Hash-base Shuffle:默认Mappper阶段会为Reducer阶段的每一个Task单独创建一个文件来保存该Task中要使用的数据,但是在一些情况下(例如数据量非常大的情况)会造成大量文件(M*R,其中M代表Mapper中的所有的并行任务的数量,R代表)
3.
Spark Shuffle大揭秘的更多相关文章
- Hadoop MapReduce概念学习系列之shuffle大揭秘(十九)
shuffle是非常重要!一定要深入理解和多实践. 缓存,分组,排序,转发,这些都是mr的shuffle. Soga 我想得到按流量来排序,而且还是倒序,怎么达到实现呢?这就牵扯到排序的的问题 默认是 ...
- Spark Streaming揭秘 Day3-运行基石(JobScheduler)大揭秘
Spark Streaming揭秘 Day3 运行基石(JobScheduler)大揭秘 引子 作为一个非常强大框架,Spark Streaming兼具了流处理和批处理的特点.还记得第一天的谜团么,众 ...
- Spark Shuffle原理、Shuffle操作问题解决和参数调优
摘要: 1 shuffle原理 1.1 mapreduce的shuffle原理 1.1.1 map task端操作 1.1.2 reduce task端操作 1.2 spark现在的SortShuff ...
- Spark Shuffle数据处理过程与部分调优(源码阅读七)
shuffle...相当重要,为什么咩,因为shuffle的性能优劣直接决定了整个计算引擎的性能和吞吐量.相比于Hadoop的MapReduce,可以看到Spark提供多种计算结果处理方式,对shuf ...
- Spark shuffle详细过程
有许多场景下,我们需要进行跨服务器的数据整合,比如两个表之间,通过Id进行join操作,你必须确保所有具有相同id的数据整合到相同的块文件中.那么我们先说一下mapreduce的shuffle过程. ...
- MapReduce Shuffle原理 与 Spark Shuffle原理
MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一 ...
- Spark Shuffle实现
Apache Spark探秘:Spark Shuffle实现 http://dongxicheng.org/framework-on-yarn/apache-spark-shuffle-details ...
- 大数据实时处理-基于Spark的大数据实时处理及应用技术培训
随着互联网.移动互联网和物联网的发展,我们已经切实地迎来了一个大数据 的时代.大数据是指无法在一定时间内用常规软件工具对其内容进行抓取.管理和处理的数据集合,对大数据的分析已经成为一个非常重要且紧迫的 ...
- [Spark性能调优] 第四章 : Spark Shuffle 中 JVM 内存使用及配置内幕详情
本课主题 JVM 內存使用架构剖析 Spark 1.6.x 和 Spark 2.x 的 JVM 剖析 Spark 1.6.x 以前 on Yarn 计算内存使用案例 Spark Unified Mem ...
随机推荐
- FAT和EXFAT文件系统
文件系统 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构:即在磁盘上组织文件的方法.在移动存储设备上比较常用的有FAT文件系统和ExFAT文件系统. FAT分区依据FAT表中每个簇链的所 ...
- PMON使用手册
转:http://www.docin.com/p-1949877603.html
- iOS_AutoLayout自动布局
目录: 一.什么是AutoLayout? 二.创建autoLayout的方法 三.VFL语言 一.什么是AutoLayout? Autolayout是一种“自动布局”技术,专门用来布局UI界面 ...
- INSPIRED启示录 读书笔记 - 第34章 恐惧、贪婪、欲望
消费者购买产品大多源于情感需求 企业级消费者出于恐惧和贪婪购买产品:如果不买这款产品,竞争对手会超过我,黑客会攻破我的防火墙,客户将弃我而去:如果买了,会赚得更多,省得更多 大众消费者购买产品的原因更 ...
- Openfire部署和配置说明
一.程序部署 1.1 程序和脚本 将文件拷贝到对应目录下,文件包括:Openfire.tar和setup.sh脚本.Openfire.tar为可执行文件库.配置等的压缩包,setup.sh为解压和部署 ...
- Centos6.5安装apache
1:下载 官网: http://www.apache.org/ 官网下载很慢,从别的地方下载 2:安装 tar -zxvf /usr/local/httpd-2.2.9.tar.gz cd /usr/ ...
- Centos6.5下Hbase安装
下载 http://mirror.bit.edu.cn/apache/hbase/hbase-0.94.26/hbase-0.94.26.tar.gz 2. 解压 tar -zxvf hbase-0 ...
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)
http://blog.csdn.net/yinjiabin/article/details/7489563 根文件系统一般包括: 1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/pro ...
- 修改SpringBoot 默认的小叶子图标
Springboot 项目,在浏览器中访问时,浏览器上导航栏的图标是一片绿色的叶子,我们可以修改它. 将格式为.ico的图片放入以下任一项目文件夹即可.但,图片命名必须为favicon.ico 1.类 ...
- JMeter-Window10系统下设置环境变量
首先我们右击此电脑(我的电脑),点击属性 接下来我们就可以进入到控制面板主页,点击[高级系统设置] 在系统属性里面,点击[环境变量]按钮 在环境变量里面,点击[新建]按钮 接下来我们输 ...