在spark新版本中,引入了 consolidation 机制,也就是说提出了ShuffleGroup的概念。一个 ShuffleMapTask 将数据写入 ResultTask 数量的本地文本,这个不会变。但是,当下一个 ShuffleMapTask 运行的时候,可以直接将数据写入之前的 ShuffleMapTask 的本地文件。相当于是,对多个 ShuffleMapTask 输出做了合并,从而大大减少了本地磁盘的数量。

  假设一台机器上有两个 cpu ,也就是说,4个 ShuffleMapTask,有2个ShuffleMapTask是可以并行执行的。并行执行的 ShuffleMapTask ,写入的文件,一定是不同的。当一批并行执行的 ShuffleMapTask 运行完之后,那么新的一批 ShuffleMapTask 启动起来并执行的时候,优化机制就开始发挥作用了(consolidation机制)。这个东西,就可以称作为一组 ShuffleGroup。那么每个文件中,都存储了多个 ShuffleMapTask 的数据,每个 ShuffleMapTask 的数据 ,叫做一个 segment,此外,会通过一些索引,来标记每个 ShuffleMapTask 的输出在 ShuffleBlockFlie 中的索引,以及偏移量等,来进行不同 ShuffleMapTask 的数据的区分。

  开启了 consolidation  机制之后的 shuffle write 操作,它的优化点在哪里?效果在哪里?

  开启了 consolidation  机制之后,那么每个节点上的磁盘文件,数量是不是变成了 cpu core 数量* ResultTask数量,比如每个节点有2个 cpu,有100个 ResultTask,那么每个节点上总共才200 个磁盘文件呀!但是按照普通的 shuffle 操作来说,那么第一个节点上面,比如每个节点有2个 cpu,有100个 ShuffleMapTask,那么此时就会产生100*100个磁盘文件,就是1000个。

  优化之后的 shuffle 操作,主要通过在 SparkConf 中设置一个参数即可。

Spark- 优化后的 shuffle 操作原理剖析的更多相关文章

  1. Spark优化一则 - 减少Shuffle

    Spark优化一则 - 减少Shuffle 看了Spark Summit 2014的A Deeper Understanding of Spark Internals,视频(要***)详细讲解了Spa ...

  2. 21、Shuffle原理剖析与源码分析

    一.普通shuffle原理 1.图解 假设有一个节点上面运行了4个 ShuffleMapTask,然后这个节点上只有2个 cpu core.假如有另外一台节点,上面也运行了4个ResultTask,现 ...

  3. 47、Spark SQL核心源码深度剖析(DataFrame lazy特性、Optimizer优化策略等)

    一.源码分析 1. ###入口org.apache.spark.sql/SQLContext.scala sql()方法: /** * 使用Spark执行一条SQL查询语句,将结果作为DataFram ...

  4. 【Spark调优】Shuffle原理理解与参数调优

    [生产实践经验] 生产实践中的切身体会是:影响Spark性能的大BOSS就是shuffle,抓住并解决shuffle这个主要原因,事半功倍. [Shuffle原理学习笔记] 1.未经优化的HashSh ...

  5. Spark源码分析 – Shuffle

    参考详细探究Spark的shuffle实现, 写的很清楚, 当前设计的来龙去脉 Hadoop Hadoop的思路是, 在mapper端每次当memory buffer中的数据快满的时候, 先将memo ...

  6. 小记---------spark优化之更优分配资源

      spark优化:在一定范围之内,增加资源与性能的提升是成正比的. 因此,       一个cpu core  执行一个task线程. task数: 若有 cpu core 2个.num-execu ...

  7. spark优化项

    一.Shuffle优化项 1.Shuffle优化配置 - spark.shuffle.file.buffer 默认值:32k 参数说明:该参数用于设置shuffle write task的Buffer ...

  8. topo排序 + 用邻接表优化后的

    输入数据: 4 61 21 32 33 42 44 2 4 61 21 32 33 42 41 2 topo排序为偏序: #include<stdio.h> #include<que ...

  9. Tomcat 7优化前及优化后的性能对比

    Tomcat 7在我们日常开发.测试.生产环境都会使用到,但对于大部分开发人员来说,对其性能还是没有多大了解.本文就对它做一次性能测试,对比优化前后的性能区别. 一.运行环境 CPU: Intel(R ...

随机推荐

  1. 在jfinal的Controller中接受json数据

    JFinal中接收URL中的参数或者model中的参数是很方便的,但是对于web2.0的网站来说,经常会以json方式提交比较复杂的数据,比如一个查询,包含了各种过滤条件和排序分页,前端脚本可能提交的 ...

  2. 机器学习13—PCA学习笔记

     主成分分析PCA 机器学习实战之PCA test13.py #-*- coding:utf-8 import sys sys.path.append("pca.py") impo ...

  3. HDFS源码分析数据块校验之DataBlockScanner

    DataBlockScanner是运行在数据节点DataNode上的一个后台线程.它为所有的块池管理块扫描.针对每个块池,一个BlockPoolSliceScanner对象将会被创建,其运行在一个单独 ...

  4. flex弹性盒模型

    flex 意思是弹性布局,用来给盒模型提供最大的灵活度,指定容器中的项目为弹性布局,类似于float:left; 比float的好处是容器没有设置高度,会根据项目来自适应高度,我们都知道,设置floa ...

  5. 手机测试常见的BUG解析

    今天总结之前学习到关于在手机软件测试过程中经常出现的一些现象,这些现象都是什么原因导致的,我们应该如何去抓取LOG,抓取的LOG的路径在哪里 下边我们来看 1. 手机遇到   “应用无响应” 有两个原 ...

  6. Idiomatic Phrases Game(图论最短路)

    Idiomatic Phrases Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  7. Idea 使用的技巧和设置

    1.自动提示时候,忽绿大小写, setting---->sensitive 2:IntelliJ IDEA报错class is never used 图中的unused declaration选 ...

  8. iostat命令简单使用

    1.iostat使用范围 iostat命令可以生成3种类型的报告: (1)CPU使用情况的报告 (2)设备使用情况的报告 (3)网络文件系统(NFS)使用情况的报告 2.每种报告的格式说明 关于CPU ...

  9. iOS和Android后台机制对比

    转自:http://blog.csdn.net/zsch591488385/article/details/27232881 一.iOS的“伪后台”程序 首先,先了解一下ios 中所谓的「后台进程」到 ...

  10. 我的Android进阶之旅------>Android系统设置默认来电铃声、闹钟铃声、通知铃声

    首先了解Android系统本身提供的默认铃声文件,这些文件都放在  /system/media/audio  目录下. /system/media/audio/ringtones   系统来电铃声 / ...