码迷,mamicode.com
首页 > 其他好文 > 详细

整个shuffle的流程图

时间:2018-05-11 13:03:42      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:site   好的   adb   shu   file   ati   origin   产生   original   

整个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的流程图

标签:site   好的   adb   shu   file   ati   origin   产生   original   

原文地址:https://www.cnblogs.com/cenglinjinran/p/9023484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!