Spark Shuffle机制
Spark Shuffle
一.HashShuffle
普通机制:产生磁盘小文件的数量为:M(map task number)*R(reduce task number)
过程:
1.map task处理完数据之后,写到buffer缓冲区,buffer的大小为32k,个数与reduce task个数一致
2. 每个buffer缓存区满32k后会溢写磁盘,每个buffer最终对应一个磁盘小文件
3.reduce task拉取数据
问题:
1.shuffle write,read 频繁
2.占用内存过多,容易造成gc以及出现OOM
3.磁盘小文件多,会造成频繁I/O,效率降低
合并机制:产生磁盘小文件的数量为:C(core number)*R(reduce task number)
过程:
1.map task处理完数据之后,写到buffer缓冲区,buffer的大小为32k,个数与reduce task个数一致
2.Executor中每个core中的task共用一份buffer缓冲区
3.每个buffer缓存区满32k后会溢写磁盘,每个buffer最终对应一个磁盘小文件
4.reduce task拉取数据
二.SortShuffle
普通机制:产生磁盘小文件数量:2*M(map task number)
步骤:
1.map task处理完数据之后,首先写入一个5M的数据结构
2.sortShuffle有不定期估算机制,来估算这个内存结构的大小,当估算超过真实的大小,会申请内存:2*估算大小-当前大小
3.申请到内存继续写入内存数据结构,申请不到会溢写磁盘
4.溢写磁盘过程中有排序,每批1万条数据溢写,最终对应两个磁盘文件:一个索引文件,一个数据文件
5.reduce task拉取数据首先读取索引文件,再拉取数据
bypass机制:产生磁盘小文件数量:2*M(map task number)
步骤:
1.map task处理完数据之后,首先写入一个5M的数据结构
2.sortShuffle有不定期估算机制,来估算这个内存结构的大小,当估算超过真实的大小,会申请内存:2*估算大小-当前大小
3.申请到内存继续写入内存数据结构,申请不到会溢写磁盘
4.溢写磁盘过程中没有排序,每批1万条数据溢写,最终对应两个磁盘文件:一个索引文件,一个数据文件
5.reduce task拉取数据首先读取索引文件,再拉取数据
Spark Shuffle机制的更多相关文章
- Spark Shuffle机制详细源码解析
Shuffle过程主要分为Shuffle write和Shuffle read两个阶段,2.0版本之后hash shuffle被删除,只保留sort shuffle,下面结合代码分析: 1.Shuff ...
- spark shuffle 机制
spark shuffle 分为两种 1.byPassSortShuffle 发生条件分区数<=200:无排序及聚合操作 主要是直接按照分区号写文件,有多少分区写多少文件 不做任何排序,简单直接 ...
- 【Spark】Spark的Shuffle机制
MapReduce中的Shuffle 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性 ...
- 【Spark篇】---Spark中Shuffle机制,SparkShuffle和SortShuffle
一.前述 Spark中Shuffle的机制可以分为HashShuffle,SortShuffle. SparkShuffle概念 reduceByKey会将上一个RDD中的每一个key对应的所有val ...
- spark的shuffle机制
对于大数据计算框架而言,Shuffle阶段的设计优劣是决定性能好坏的关键因素之一.本文将介绍目前Spark的shuffle实现,并将之与MapReduce进行简单对比.本文的介绍顺序是:shuffle ...
- 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学习】Apache Spark安全机制
Spark版本:1.1.1 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4135808.html 目录 W ...
- Spark工作机制简述
Spark工作机制 主要模块 调度与任务分配 I/O模块 通信控制模块 容错模块 Shuffle模块 调度层次 应用 作业 Stage Task 调度算法 FIFO FAIR(公平调度) Spark应 ...
随机推荐
- 解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList的问题
一.背景 最近闲来无事,想自己搭建一套Spring+SpringMVC+Mybatis+Mysql的环境(搭建步骤会在以后博客中给出),结果运行程序时,适用@ResponseBody注解进行返回Lis ...
- GitHub Gist 指南
Github作为代码分享平台在开发者中非常流行.此平台托管了包括游戏.书籍以至于字体在内的一千两百多万个项目(现在更多),这使其成为互联网上最大的代码库. Github还提供另一个非常有用的功能,就是 ...
- 详解Maven用户的配置settings.xml
Maven用户设置 作者其他技术文章 1)Oracle性能优化之查询语句通用原则 2)Redis常用命令 3) SpringCloud入门之常用的配置文件 application.yml和 boots ...
- DocumentFragment对象
一般动态创建html元素都是创建好了直接appendChild()上去,但是如果要添加大量的元素还用这个方法的话就会导致大量的重绘以及回流,所以需要一个'缓存区'来保存创建的节点,然后再一次性添加到父 ...
- 【原创】使用golang访问windows telnet服务器
本篇博客记录本次使用golang语言tcp方式进行telnet服务器访问 环境: 1.win7系统telnet服务器,使用地址:192.168.8.189 2.python使用telnetlib库对t ...
- python按引用赋值和深、浅拷贝
按引用赋值而不是拷贝副本 在python中,无论是直接的变量赋值,还是参数传递,都是按照引用进行赋值的. 在计算机语言中,有两种赋值方式:按引用赋值.按值赋值.其中按引用赋值也常称为按指针传值(当然, ...
- MVC学习之路(1) EF 增删查改合集
首先再Model中创建一个类[WMBlogDB] public class WMBlogDB : DbContext { //连接字符串. public WMBlogDB() : base(" ...
- [转]Rancher 快速上手指南操作(1)
本文转自:http://www.cppblog.com/zhiyewang/archive/2016/03/17/213053.aspx Rancher 快速上手指南操作(1)该指南知道用户如何快速的 ...
- ls 指令的介绍
每个文件在linux下面都会记录许多的时间参数, 其实是有三个主要的变动时间,那么三个时间的意义是什么呢? modification time (mtime) : 当该文件的“内容数据”变更时,就会更 ...
- [android] 代码注册广播接收者&利用广播调用服务的方法
利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光 主界面里面 在界面创建的时候开启一下服务普通的startService()方法 发送一条广播出去 获取Intent ...