MapRreduce工作流程

MapReduce: MapTask & ReduceTask

  1. 每一个block会有map任务 。
  2. block切分为切片,每个切片对应一个map任务,默认一个block,一个切片,一个map。
  3. map默认按行读取切片数据,组成键值对<当前行的字节偏移量,读取到行的字符串>。
  4. map函数对该键值对进行计算,输出若干键值对。<key, value, partition>,partition指定该键值对由哪个reducer进行处理 。

  5. map输出的kvp写到环形缓冲区,环形缓冲区默认100MB,阈值80%,当环缓达到80%就向磁盘溢写小文件,该小文件首先按照分区号排序,相同分区号的按key进行排序。

  6. 默认如果落磁盘的小文件达到了3个,则进行归并,归并的大文件也是按分区号排序,相同分区号按照key进行排序。只是一个归并。

  7. 如果map任务处理完了,它的输出被下载到reducer所在主机

    按照HTTP GET的方式下载到reducer:

    reducer发送HTTP GET请求到mapper主机下载数据,该过程是洗牌shuffle

  8. 每个map任务都要经历运行结束洗牌的过程

  9. 可以设置combinClass,先在map端对数据进行一个压缩,比如10w个<hello,1>压缩为1个<hello, 10w>通过网络IO洗牌,肯定要快很多。一般情况下,combineClass就是一个reducerClass。combinerClass的设置要求数据算法满足结合律。

reeduce任务开始

  1. 等所有map任务都运行结束,并且洗牌结束,每个reducer获取到它自己应得的所有数据,此时开始reducer处理过程

  2. 如果有时间,reduce会对洗牌获取的数据进行归并落磁盘

    如果没有时间,也归并,只是可能不落磁盘,直接交给reduce方法进行迭代处理了。

    洗牌获取到的数据也可能不落磁盘,此时归并的键值对来源可能是磁盘的和内存的一个混合。

  3. reduce按照key进行分组,每个分组调用一次reduce方法,该方法迭代计算,将结果写到HDFS输出。

 总结

Map:

1、根据业务需求处理数据并映射为KV模型

2、并行分布式

3、计算向数据移动

Reduce:

1、数据全量/分量加工

2、Reducer中可以包含不同的key     分区的范围大于分组

3、相同分区的Key汇聚到一个Reducer中

4、“相同”的Key调用一次reduce方法

5、排序和比较实现key的汇聚

K,V使用自定义数据类型     MyKey:WritableComparable

MyValue:Writable

1、节省开发成本,提高程序自由度

2、框架会对键和值序列化,因此键类型和值类型需要实现Writable接口。

3、框架会对键进行排序,因此必须实现WritableComparable接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ErYao7

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

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

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

打赏作者

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

抵扣说明:

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

余额充值