• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

黄文超

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

MapReduce的完整逻辑

MapReduce的完整逻辑

1、读取文件,将文件解析成一个<k1,v1>对

这里面的k1主要指的是行数,v1指的是该该行数据

2、通过mapTask任务将<k1,v1>转化为我们需要的<key,value>对

主要是对v1进行拆分

3、分区和分组,将<key,value>对进行哈希编码,主要对key进行hashcode计算

1、然后按照自定义的算法给每个<key,value>对一个partition index,方便分区

4、排序

1、按照分区规则进行分区,主要对key的hashcode进行比较
2、分完了区之后,再对区内的key进行排序(这个是字典排序)

5、combiner。对数据进行map阶段的合并

对之前分好区,拍好序的数据进行合并

6、将分区后的小文件写入磁盘中

这个过程内存会给mr一个100M的环形缓冲区域,一旦达到80%的占有率就让它溢写到本地磁盘小文件中

7、使用归并排序,对本地磁盘溢写小文件进行归并排序

8、等待reduceTask启动线程来进行拉取数据

9、reduceTask启动线程,从各map task拉取属于自己分区的数据

10、从mapTask拉取回来的数据继续进行归并排序

11、进行groupingComparator分组操作

12、调用reduce的逻辑,写出数据

13、通过outputFormat进行数据输出,写到文件,一个reduceTask对应一个结果文件

posted on 2021-05-02 07:59  黄文超  阅读(250)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3