从浅入深带你了解MapReduce编程模型(MapReduce基础解析)

6 篇文章 0 订阅
3 篇文章 0 订阅

1.MapReduce概念

MapReduce是一个分布式计算框架,它被设计用于并行计算海量数据。第一个提出该技术框架的是Google公司,而Google的灵感则来自于函数式编程语言,如LISP,Scheme,ML等。

Map:过滤一些原始数据
Reduce:处理这些数据,得到我们想要的结果

当你向MapReduce框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map任务,然后分配到不同的节点上去执行,每个Map任务处理输入数据中的一部分,当Map任务完成后,它会生成 一些中间文件,这些中间文件将会作为Reduce任务的输入数据,Reduce任务的主要目标就是把前面若干个Map的输出汇总到一起并输出。

MapReduce执行步骤:

map任务处理:

1.读取输入文件内容,解析成键值对(key/value)。对输入文件的每一行,解析成键值对(key/value ),每一个键值对调用一次map函数。
2.写自己的逻辑,对输入的键值对(key/value)处理,转换成新的键值对(key/value)输出。
3.对输出的键值对(key/value)进行 分区(partition).
4.对不同分区的数据,按照key进行排序,分组,相同的key/value 放到一个集合中。(shuffle)
5.分组后的数据进行归约。(combiner,可选的)

reduce任务处理

1.对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
2.对多个map任务的输出进行合并,排序,写reduce函数自己的逻辑,对输入key/value 处理,转换成新的key/value 输出。
3.把 reduce的输出保存到文件中(写入到HDFS中)。
简单一句话解释MapReduce就是:“任务的分解与结果的汇总”。

2.编写MapReduce程序模板

Mapreduce八股文

分为 Mapper,Reducer,Driver 三块
在这里插入图片描述

Step1:Mapper Class

在这里插入图片描述

Step2:Reducer Class

在这里插入图片描述

Step3:Driver

在这里插入图片描述

3.依据WordCount案例总结MR程序运行过程

Mapper 任务的六个运行过程

  1. 把文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的。
  2. 对输入片中的记录按照一定的规则解析成键值对。
  3. 调用Mapper类中的map方法。
  4. 按照一定的规则对第三阶段输出的键值对进行分区。
  5. 对每个分区的键值对进行排序。
  6. 对数据进行归约处理,也就是reduce操作。键相等的键值对会调用一次reduce方法。经过这一阶段,数据量会减少,归约后的数据输出到本地的Linux文件中。

Reduce 任务的三个执行过程

  1. List itemReducer任务会主动从Mapper任务复制其输出的键值对。Mapper任务可能会有很多,因此,Reduce 会复制多个Mapper的输出。
  2. 把复制到Reducer 本地数据,全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。
  3. 对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到HDFS文件中。

注意事项:
【第一点】
默认情况下,map输入<key,balue>对格式
Key:偏移量,Value:文件中的每一行值。
【第二点】
map-> partition 分区 sort 排序 group 分组 -> reduce
【例】对单词进行词频统计,a-z开头的单词,A-Z开头的单词
在这里插入图片描述
Partition: map输出 key / value 对后,partition根据分区规则将单词分到不同的reduce中。
Group: 将相同key的 value 组合在一起。
partition 分区 sort 排序 group 分组 三块都是可以指定的。
【第三点】
reduce 输出的结果,一般情况下,key 和value 作为一行数据进行输出
key 和 value 之间的分隔符为制表符 \t
总结
MapReduce 运行的时候,会通过 Mapper 运行的任务读取HDFS 中的数据文件,然后调用自己的方法,处理数据,最后输出。Reducer 任务会接收Mapper 任务输出的数据,作为自己的输入数据,调用自己的方法,最后输出到HDFS的文件中。

如有任何问题,可在评论区留言,相互探讨!
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值