MapReduce 原理及执行过程

  • (1)MapReduce 是一种分布式计算框架,由 Google 提出,主要用于搜索领域,以解决海量数据的计算问题。(分布式存储和分布式计算发轫于 Google 这样的公司是不足为奇的)

  • (2)MapReduce 由两个阶段组成:Map (开始)和 Reduce(结束),用户只需实现 map() 和 reduce() 两个函数,即可实现分布式计算,十分便捷

    输入文件来自于:HDFS

  • (3)这两个函数的形参是 key、value,表示函数的输入信息。

执行流程



  • (1)JobTracker 接受用户提交的计算任务,然后将计算任务分配给 TaskTracker 去执行

    计算任务 ⇒ JobTracker ⇒ TaskTracker

  • (2)Mapper 的输出作为 Reducer 的输入

    整个计算任务,整个的输入就是Map的输入,整个的输出就是Reduce的输出

  • (3)Mapper 任务 Reducer 任务分别都是 Java 进程,并不神秘,在一个 TaskTracker 上可能跑一个 Mapper 任务,也可能跑多个,甚至有可能 Mapper 任务和 Reducer 任务是在同一台机器上跑的,比如伪分布模式就只有一个 TaskTracker。



  • (1)Mappers must complete before Reducers can begin.

    Mappers 完成以后,Reducers 才能执行,巧妇难为无米之炊;

  • (2)由 Mapper、Shuffle、Reducer 可知,其实一个 Reducer 接受的是全部 Mapper 的输出

  • (3)一个 Mapper 输出的分支数量与 Reducer 的任务数量是相同的

具体的执行步骤

第一阶段:map 任务处理

  • (1)读取输入文件内容,解析成 key、value 对(pair-wise,[K1, V1])。将输入文件的每一行,解析成 key、value 对,每一个键值对调用一次 map 函数。

  • (2)写自己的逻辑(覆盖map函数,写自己的逻辑),对输入的 key、value 处理,转换为新的 key、value 输出([K2, V2]),

  • (3)对输出的 key、value 进行分区(图2所示的,每一个Mapper Task 任务的三个分支就代表三个分区,每个分支表示一个分区),

  • (4)对不同分区的数据,按照 key 进行排序(说明 key 实现了comparable 接口,实现了 compareTo方法)、分组(把相同 key 的 value 放到一个集合中,[K2, {V2, …}]

    [K2, V2] ⇒ [K2, {V2 … }]

  • (5)(optional) 分组后的数据进行规约、

第二阶段:Reduce 任务处理

  • (1)对多个map任务的输出,按照不同的分区([K2, {V2, …}]),通过网络 copy 到不同的 reduce 节点(Mapper 任务和Reducer 任务在生产环节中一般不在同一个节点上)。

  • (2)对多个 Map 任务的输出进行合并、排序(每个Map任务已排好序,但多个任务之间并未排好序)。覆盖 reduce 函数,实现自己的逻辑,对输入的 key、value 进行处理,转换成新的 key、value 输出([K3, V3])。

    [K2, {Vs}] ⇒ [K3, V3](是将 key 和 values构成的集合,而不是一个个的键值对)(也是框架的工作

  • (3)把 reduce 的输出保存到文件

总结

  1. 构造[K1, V1]
  2. Map:[K1, V1] ⇒ [K2, V2]
  3. 分区
  4. 分组:[K2, V2] ⇒ [K2, {Vs}](将相同 key 的 values 置于一个集合中)
  5. 规约
  6. copy 到节点,排序
  7. Reduce:[K2, {Vs}] ⇒ [K3, V3]
  8. 保存
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值