整个shuffle的流程图

 
Paste_Image.png

Map Shuffle的作用以及相应的设置

  1. partition

    • 过程:输入的<key,value>对经过map()处理后输出新的<key,value>对,它首先会被存储到环形缓冲区中(字节数组实现)。该环形缓冲区的大小默认为100MB。并且会对每个<key,value>对hash一个partition值,相同partition值为同一个分区。
    • 作用:由于map()处理后的数据量可能会非常大,所以如果由一个reduce()处理效率不高,为了解决这个问题可以用分布式的思想,一个reduce()解决不了,就用多个reduce节点。一般来说有几类分区就对应有几个reduce节点,把相同分区交给一个reduce节点处理。
    • 设置
      • 环形缓冲区大小:mapred-site.xml中设置mapreduce.task.io.sort.mb的值
      • 环形缓冲区溢写的阈值:mapred-site.xml中设置mapreduce.map.sort.spill.percent的值
      • partition:job.setPartitionerClass(cls)

         
        Paste_Image.png
  2. sort

    • 过程:把环形缓冲区中的数据根据partition值和key值两个关键字升序排序。同一partition内的按照key排序。
    • 作用:一般来讲mapreduce框架用来做各种排序操作,先在map端排序,减少reduce端排序的负担。
    • 设置:job.setSortComparatorClass(cls)
       
      Paste_Image.png
  • combiner

    • 过程:将sort后的数据进行combiner操作
    • 作用:可以理解为map端的预reduce操作,在数据量非常大的时候,这样的优化可以节省很多网络带宽和本地磁盘IO流的读写。
    • 设置:job.setCombinerClass(cls)
       
      Paste_Image.png
  1. compress

    • 过程:压缩combiner输出后的数据
    • 作用:减少本地磁盘的读写和减少reduce拷贝map端数据时的网络带宽
    • 设置
      1. Configuration对象用来解析XML文件,可以用set方法来设置属性值。

         
        Paste_Image.png
      2. 寻找要设置的相关属性

         
        compress.png
      3. 内置的三种压缩算法

         
        compresssuanfa.png
      4. 配置key,value

         
        peizhi.png
  2. spill

    • 过程:将排序后的内存数据spill到本地磁盘中
    • 作用:因为数据量非常大,全部存放在内存中不太现实,所以最后还是会存到本地磁盘中
  3. merge

    • 过程:因为可能会有几次spill,本身存放数据的out文件和存放数据偏移量索引index文件都会产生多个,把多个这样的文件合并。
    • 作用:方便reduce的一次性拷贝。
    • 设置:
       
      mapsort.png

Reduce Shuffle的作用以及相应的设置

  1. merge

    • 过程:reduce拷贝map()最终输出的磁盘数据,一个reduce应该拷贝每个map节点的相同partition的数据。
    • 作用:因为有多个map节点,拷贝后的数据文件不止一份,先进性合并操作,为后面的排序做准备。
  2. sort

    • 过程、作用:这里和map端的一样。
  3. group

    • 过程:将排序好的<key,value>对进行分组,分组规则默认的是将相同key的value放在一起。

       
      fenzu.png
    • 作用:为了reduce()更好的计算相同key值出现的次数。
    • 设置:job.setGroupingComparatorClass(cls);
       
      比较2.png

shuffle阶段中Comparator的理解和作用

  1. 被用来作为排序比较和分组比较的依据
  2. 排序比较和分组比较都是通过实现下图中的接口方法

     
    sort.png
     
    比较2.png
    • 其中b1为第一个字节数组,s1为开始的index,l1为b1比较的长度,b2为第二个字节数组,s2为开始的index,l2为b2比较的长度

       
      比较3.png
    • 底层用到了java.util.Comparator.compare(T o1, T o2)函数

       
      比较4.png

MapReduce执行过程中中间数据的压缩配置和其余的配置

  1. 压缩配置见map过程
  2. 设置reduce的数目
    job.setNumReduceTasks(tasks);其中tasks为int型整数。合理的设置reduce数目是一种性能调优,实际生产环境中最好用测试的方式来抉择较好的reduce数目

作者:心_的方向
链接:https://www.jianshu.com/p/fc36464f4c6d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

整个shuffle的流程图的更多相关文章

  1. shuffle 过程

    Shuffle描述着数据从map task输出到reduce task输入的这段过程(Shuffle的正常意思是洗牌或弄乱). 以下是官网的流程图: 从最基本的要求来说,我们对Shuffle过程的期望 ...

  2. [Spark内核] 第38课:BlockManager架构原理、运行流程图和源码解密

    本课主题 BlockManager 运行實例 BlockManager 原理流程图 BlockManager 源码解析 引言 BlockManager 是管理整个Spark运行时的数据读写的,当然也包 ...

  3. MapReduce(五) mapreduce的shuffle机制 与 Yarn

    一.shuffle机制 1.概述 (1)MapReduce 中, map 阶段处理的数据如何传递给 reduce 阶段,是 MapReduce 框架中最关键的一个流程,这个流程就叫 Shuffle:( ...

  4. Hadoop(17)-MapReduce框架原理-MapReduce流程,Shuffle机制,Partition分区

    MapReduce工作流程 1.准备待处理文件 2.job提交前生成一个处理规划 3.将切片信息job.split,配置信息job.xml和我们自己写的jar包交给yarn 4.yarn根据切片规划计 ...

  5. 开源一个WEB版本GEF,基于SVG的网页流程图框架

    8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...

  6. Spark Shuffle原理、Shuffle操作问题解决和参数调优

    摘要: 1 shuffle原理 1.1 mapreduce的shuffle原理 1.1.1 map task端操作 1.1.2 reduce task端操作 1.2 spark现在的SortShuff ...

  7. Collections.shuffle

    1.Collections.shuffler 最近有个需求是生成十万级至百万级的所有随机数,最简单的思路是一个个生成,生成新的时候排重,但是这样时间复杂度是o(n^2),网上看了几个博客的解决方法都不 ...

  8. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  9. [LeetCode] Shuffle an Array 数组洗牌

    Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. int[] n ...

随机推荐

  1. Rancher介绍安装以及对docker的管理

    原文:Rancher介绍安装以及对docker的管理 一.简介 Rancher是一个开源的企业级全栈化容器部署及管理平台.Rancher为容器提供一揽子基础架构服务:CNI兼容的网络服务.存储服务.主 ...

  2. 中国象棋程序的设计与实现(五)--回答CSDN读者的一些问题

    最近写了很多文章,同时,也上传了很多免积分的FansUnion原创的优质资源,有兴趣的同学可以看来我的CSDN博客瞧瞧 http://blog.csdn.net/FansUnion. 近期,收到了不少 ...

  3. HDU 4725 The Shortest Path in Nya Graph

    he Shortest Path in Nya Graph Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged o ...

  4. Eclipse集成Git插件及使用

    目录(?)[+] 1 Git插件安装 11 下载插件 2 Git提交代码 21 建git的本地仓库 第一种 第二种 项目创建本地仓库后 如图 22 提交本地仓库 23 提交远程仓库 3 Git下载代码 ...

  5. POJ 2828 线段树 逆序插入

    思路: 1.线段树 逆着插入就OK了 2.块状链表 (可是我并不会写) //By SiriusRen #include <cstdio> #include <cstring> ...

  6. C#篇(三)——函数传参之引用类型和值类型

    首先应该认清楚在C#中只有两种类型: 1.引用类型(任何称为"类"的类型) 2.值类型(结构或枚举) 先来认识一下引用类型和值类型的区别: 函数传参之引用类型: 1.先来一个简单的 ...

  7. 文件IO流总结

    文件在网络上或不同设备之间是怎么传输的,在Java程序中又是怎么来实现文件的传输,带着这两个问题,来了解一下Java中的IO流相关类及操作. 一.什么是流及流的用途 流是一组有顺序,有起点和终点的字节 ...

  8. JavaScript总结(2)

    <!--脚本部分-->06 <script type="text/javascript">07 date_object=new Date();08 what ...

  9. 【C#Windows 服务】 《三》Timer设置

    一.工具: VS2015+NET Framework4.5. 二.操作: 1.计时器设置: 2.日志代码: 三.代码: 1.日志代码: 1 /// <summary> 2 /// Wind ...

  10. 排序算法(Apex 语言)

    /* Code function : 冒泡排序算法 冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值 时间复杂度:O(n*n) 空间复杂度:1 */ List< ...