zoukankan      html  css  js  c++  java
  • Hadoop Mapreduce的shuffle过程详解

    1、map task读取数据时默认调用TextInputFormat的成员RecoreReader,RecoreReader调用自己的read()方法,进行逐行读取,返回一个key、value;

    2、返回的key、value交给自定义的map方法,输出的context.write(key,value),再交给内部的OutputCollecter会不断写入一个环形缓冲区

      (就是一个数组,内存空间默认100M);

    3、随着不断的写入,一般只占默认内存的80%,剩下的空间需要在溢出之前进行分区以及根据key进行快速排序,spiller就是负责将分过区并排好序的数据

      写入本地文件,溢出一次就会产生一个文件,这些文件存放于map task的工作目录,在溢出前可以使用combiner对数据进行合并,combiner会提高整体的

      运算速度,但是有可能会对最终结果造成影响,所以使用时需考虑清楚;

    4、map task在本地产生的多个文件需要进行归并排序成一个大文件,也就是map task的最终文件,这个合并的过程称为merge,这个合并过程也可以使用combiner;

    5、reduce task会将各个map task产生的相应分区的数据下载到本地磁盘工作目录,合并文件并对这些数据进行归并排序;

    6、通过调用GroupingComparaor(key,nextk)识别出key相同的一组数据;

    7、然后一组相同的key调用一次reduce方法,context.write(k,v)通过OutputFormat写入最终的文件。

    以上从第三步到第六步就是shuffle的过程。

  • 相关阅读:
    edu_6_1_4
    edu_6_1_2
    edu_6_1_3
    edu_6_1_1
    音乐链接
    音乐推荐界面
    客服页面
    购物页面
    京东读书新闻资讯页面
    安装Tomcat时 ,设置JAVA_HOME和JRE_HOME
  • 原文地址:https://www.cnblogs.com/chaofan-/p/9812216.html
Copyright © 2011-2022 走看看