shuffle概览

shuffle过程概览

shuffle数据流概览

shuffle数据流

shuffle工作流程

在运行job时,spark是一个stage一个stage执行的。先把任务分成stage,在任务提交阶段会把任务形成taskset,在执行任务。 
spark的DAGScheduler根据RDD的ShuffleDependency来构建Stages:

  • 例如:ShuffleRDD/CoGroupedRDD有一个ShuffleDependency。
  • 很多操作通过钩子函数来创建ShuffleRDD

每个ShuffleDependency会map到spark的job的一个stage,然后会导致一个shuffle过程。

为什么shuffle过程代价很大

这是由于shuffle过程可能需要完成以下过程:

  • 重新进行数据分区
  • 数据传输
  • 数据压缩
  • 磁盘I/O

shuffle的体系结构

ShuffleManager接口

shuffleManager是spark的shuffle系统的可插拔接口。ShuffleManager将会在driver和每个executor上的SparkEnv中进行创建。可以通过参数spark.shuffle.manager进行设置。 
driver通过ShuffleManager来注册shuffle,并且executor通过它来读取和写入数据。

ShuffleWriter

控制shuffle数据输出逻辑。

ShuffleReader

获取shuffle过程中用于ShuffleRDD的数据。

ShuffleBlockManager

管理抽象的bucket和计算数据块之间的mapping过程。

基于sort的shuffle

sort-based的shuffle,会把输入的记录根据目标分区id(partition ids)进行排序。然后写入单个的map输出文件中。为了读取map的输出部分,Reducers获取此文件的连续区域 。当map输出的数据太大而内存无法存放时,输出的排序子集可以保存到磁盘,这些磁盘文件被合并后,生成最终的输出文件。 
sort shuffle有两个不同的输出路径来产生map的输出文件:

    • 序列化排序(Serialized sorting) 
      在使用序列化排序时,需要满足以下3个条件:

      • shuffle不指定聚合(aggregation)或输出排序方法。
      • shuffle的序列化程序支持序列化值的重定位(KryoSerializer和Spark SQL的自定义序列化程序目前支持此操作)。
      • shuffle产生小于16777216个输出分区。
    • 反序列化排序(Deserialized sorting) 
      用来处理所有其他情况。

Sort Shuffle Manager

Sort Shuffle Writer

  • 每个map任务都会产生一个shuffle数据文件,和一个Index文件

    • 通过外部排序类ExternalSorter对数据进行排序
  • 若map-side需要进行合并(combine)操作,数据将会按key和分区进行排序,若没有合并操作数据只会根据分区进行排序。

Spark-2.0原理分析-shuffle过程的更多相关文章

  1. Spark之Task原理分析

    在Spark中,一个应用程序要想被执行,肯定要经过以下的步骤:          从这个路线得知,最终一个job是依赖于分布在集群不同节点中的task,通过并行或者并发的运行来完成真正的工作.由此可见 ...

  2. 小记--------spark的worker原理分析及源码分析

     

  3. Struts1.2,struts2.0原理分析

    struts1原理: 1.首先我们表单提交到action 2.进入到web.xml 3.web.xml拦截*.do 4.交给ActionServlet 5.找到path属性,获得url 6.找到nam ...

  4. 小记--------spark内核架构原理分析

      首先会将jar包上传到机器(服务器上)     1.在这台机器上会产生一个Application(也就是自己的spark程序)     2.然后通过spark-submit(shell) 提交程序 ...

  5. 彻底搞懂spark的shuffle过程(shuffle write)

    什么时候需要 shuffle writer 假如我们有个 spark job 依赖关系如下 我们抽象出来其中的rdd和依赖关系: E <-------n------,              ...

  6. Spark Shuffle 过程

    本文参考:http://www.cnblogs.com/cenyuhai/p/3826227.html 在数据流动的整个过程中,最复杂最影响性能的环节,就是 Shuffle 过程,本文将参考大神的博客 ...

  7. Hadoop计算中的Shuffle过程(转)

    Hadoop计算中的Shuffle过程 作者:左坚 来源:清华万博 时间:2013-07-02 15:04:44.0 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解Ma ...

  8. spark的shuffle和原理分析

    概述     Shuffle就是对数据进行重组,由于分布式计算的特性和要求,在实现细节上更加繁琐和复杂.    在MapReduce框架,Shuffle是连接Map和Reduce之间的桥梁,Map阶段 ...

  9. Spark的RDD原理以及2.0特性的介绍

    转载自:http://www.tuicool.com/articles/7VNfyif 王联辉,曾在腾讯,Intel 等公司从事大数据相关的工作.2013 年 - 2016 年先后负责腾讯 Yarn ...

随机推荐

  1. 使用IBM SVC构建vSphere存储间集群

    使用IBM SVC构建vSphere存储间集群 本文目的 本文描述利用IBM SVC来构建Vsphere 存储间集群 解决方案 什么是vMSC? vShpere存储间集群是一个针对VmwarevSpe ...

  2. jTemplates

    jTemplates是一个基于JQuery的模板引擎插件,功能强大,有了他你就再不用为使用JS绑定数据集时发愁了. 首先送上jTtemplates的官网地址:http://jtemplates.tpy ...

  3. Esper学习之九:EPL语法(五)

    本篇的内容主要包括了Subquery(也就是子查询)和Join,内容不少,但是不难,基本上和sql差不太多. 1.Subquery EPL里的Subquery和sql的类似,是否比sql的用法更多我不 ...

  4. 在centos7 ubuntu15.04 上通过bosh-lite 搭建单机环境cloudfoundry

    Bosh-lite简介       bosh-lite 是一个单机部署cloudfoundry的实验性工具,用于开发人员做poc 验证.Bosh-lite目前支持仅MAC OS X和Linux系统.B ...

  5. 利用按钮打开tabBar页面

    场景:当tabBar上有个人中心的时候,这里假设需要登陆才可以看到个人中心A页面,在A页面onload中先判断是否登陆,如果没有登陆就跳转到登陆页面B,待输入用户名和密码,点击登陆按钮后再跳转到A页面 ...

  6. mybatis generator如何定制JavaTypeResolver,使smallint类型的数据库字段在po中的类型为Integer?

    一.问题概述 忙了一段时间的jenkins持续集成,又要开始开发任务了.这两天在用mybatis generator来逆向生成dao层工程. 其中一个问题在于,组长在设计表的时候,不少枚举使用了sma ...

  7. vue实现按需加载(懒加载)

    1.router文件中使用 export default new Router({ routes: [{ path: '/', name: 'Post', component: () => im ...

  8. vscode 修改(自定义)插件的快捷键

    简单的使用了一下vscode,已经感受到了它的强大. 修改插件的快捷键: 1.快捷键command+k 按完之后再按command+s,弹出一个快捷键列表(code->首选项->键盘快捷方 ...

  9. expect小工具,在postgresql中执行sql的shell脚本

    脚本内容: #!/usr/bin/expect set database [lindex $argv 0] set username [lindex $argv 1] set password [li ...

  10. jenkins或ansible启动应用不成功日志又不报错

    碰到ansible无法起停tomcat的时候,有3个点需要关注 1.环境变量,在startup.sh中添加source /etc/profile 2.后台运行,加上nohup...& 3.单独 ...