• 大数据学习之MapReduce核心(Shuffle洗牌)12


    先来个原理图压压惊:

    温馨提示:如果看不清这个图,可以下载下来,在自己电脑上可以放大。

         或者直接放大浏览器。快捷键Ctrl+鼠标滑轮上即可放大。想恢复原来浏览器的默认大小,快键键:Ctrl+数字0

    一:概述shuffle

      Shuffle是mapreduce的核心,链接map与reduce的中间过程。

      Mapp负责过滤分发,而reduce则是归并整理,从mapp输出到reduce的输入的这个过程称为shuffle过程。


    二:map端的shuffle 

    1.map结果的输出

      map的处理结果首先存放在一个环形的缓冲区。

      这个缓冲区的内存是100M,是map存放结果的地方。如果数据量较大,超过了一定的量(默认80M),将会发生溢写过程。

      在mapred-site.xml中设置内存的大小

        <property>

          <name>mapreduce.task.io.sort.mb</name>

          <value>100</value>

        </property>

      在mapred-site.xml中设置内存溢写的阈值  

        <property>

          <name>mapreduce.task.io.sort.spill.percent</name>

          <value>0.8</value>

        </property>

       

    2.溢写过程  

      溢写是系统在后台单独开一个线程去操办。

      溢写过程包括:分区partion,排序sort,溢写spill to disk,合并merge。

      

    3.分区

      分区分的是80%的内存。

      因为reduce可能有不同的任务,所以会对80M的内存进行分区,将map的输出结果放入的对应的reduce分区中。

      

    4.排序

      默认是按照key排序。

      当分区完成之后,对每一个分区的数据进行排序。

    5.溢写

      排序之后,将内存的数据写入硬盘。留出内存方便map的新的输出结果。

    6.合并

      如果是第一次写入硬盘则不需要考虑合并问题,但是在大数据的情况下,前面已经存在大量的spill文件的时候,这时候需要将它们进行合并。

      将各个分区合并之后,对每一个分区的数据再进行一次排序

      使用归并的方式进行合并,归并算法。

      实现compara,进行比较。

      形成一个文件。

    三:reduce端的shuffle

    1.步骤

      对于reduce端的shuffle,大致分为复制,合并。

    2.复制

      当reduce开启任务后,不断的在各个节点复制需要的数据。

    3.合并(内含排序)

      复制数据的时候,把可以存放进内存的就把数据存放在内存中,当达到一定的时候,启动merge,将数据写进硬盘。

      如果map数据大于内存需要存放的限制,直接写入硬盘,当达到一定的数量后将其合并为一个文件。

      这时候,reduce开启任务需要的数据在内存中和在硬盘中,最终形成一个全局文件。

    4.分组

      《hadoop,1》

      《hadoop,1》

      《yarn,1》

      《hadoop,1》

      《hdfs,1》

      《yarn,1》

      将相同的key放在一起,使用comparable完成比较。

      结果为:

        《hadoop,list(1,1,1)》

        《yarn,list(1,1)》

        《hdfs,list(1)》

    再来个简易版的洗牌图吧!!!以便理解

  • 相关阅读:
    weblogic---- Remote远程调用
    weblogic的web.xml报错----Malformed UTF-8 char -- is an XML encoding declaration missing
    jar、war、ear
    weblogic报错----Received exception while creating connection for pool "TDMSKD": The Network Adapter could not establish the connection
    Weblogic java生成wlfullclient.jar
    Tomcat8-windows不能在本地计算机启动tomcat,有更多的信息,查阅系统事件日志。
    jdk历史各个版本下载
    分享一个很有意思的环境探针
    Spring+SpringMVC+MyBatis+easyUI整合进阶篇(七)一次线上Mysql数据库崩溃事故的记录
    说卸载英雄联盟的人真的不是矫情
  • 原文地址:https://www.cnblogs.com/hidamowang/p/10841922.html
Copyright © 2020-2023  润新知