zoukankan      html  css  js  c++  java
  • MapReduce框架中的Shuffle机制

    Shufflemapreduce中间的数据调度过程,包括:缓存分区排序等。

    Shuffle数据调度过程:

    1. map task处理hdfs文件,调用map()方法,map taskcollect threadmap()方法结果放入环形缓冲区(默认大小100M)
    2. 当环形缓冲区达到阈值(80%),将会触发溢出操作,split thread线程会调用HashPartitioner或者自定义的分区规则,对缓冲区内容进行分区,区内文件内容有序
    3. 当环形缓冲区再次达到阈值,会再次触发溢出操作,重复步骤2
    4. map()方法执行结束后,会生成一系列分区且区内有序的溢出小文件。该溢出小文件不会直接交给reduce()方法,会进行merge操作,将溢出的小文件按分区进行合并,生成一个完整的分区且区内有序的大文件。
    5. 每个reduce task会获取每个map task阶段最终结果文件的指定分区文件内容,进行归并排序操作,按照key排序,生成一个聚合组
    6. 每个聚合组调用一次reduce()方法,key为这一聚合组的相同key,values是这一聚合组的所有value的迭代器。
    7. 生成最终结果文件。

    Shuffle数据调度过程(大图链接):

  • 相关阅读:
    nginx反向代理下没有获取到正确的clientIP问题发散
    TPL概要
    OAuth2:Authorization Flows
    ArrayList部分源码解析
    二分法之通用模板
    Leetcodet题目解析-1 c++版
    git初始用+将git项目上传到github
    参加ACM省赛有感
    杭电acm 1274展开字符串
    杭电acm 1263水果
  • 原文地址:https://www.cnblogs.com/Java-Script/p/11090566.html
Copyright © 2011-2022 走看看