MapReduce切片机制以及maptask和reducetask并行度设置

MapReduce运行流程

1最先启动MRAppMaster,MRAppMaster根据job的描述信息,计算需要的maptask实例的数量,然后向集群申请机器,启动相应数量的maptask进程。

2 maptask启动之后,根据给定的数据切片范围进行数据处理。

A 利用指定的inputformat来获取RecordReader对象读取数据,形成KV输入。

B 将输入的kv对传递给客户定义的map方法,做逻辑运算,将map方法输出的kv对收集到缓存。

C 将缓存中的KV对按照K分区排序会溢写到磁盘文件。

3 MRAppMaster监控到所有maptask进程任务完成之后(真实情况是,某些maptask进程处理完成以后,就会开始启动reducetask去已经完成maptask处去fetch数据),会根据客户指定的参数启动相应数量的reducetask进程。并告知reducetask进程要处理的数据范围(数据分区)。

4 ReduceTask进程启动以后,根据MRAppMaster告知的待处理数据的位置,抓取maptask的输出结果文件,并在本地进行重新归并排序。按照相同key的KV为一个组,调用客户定义的reduce方法进行逻辑运算,收集输出的结果KV,调用客户指定的outputformat将结果数据输出到外部的存储。

maptask并行度决定机制

Maptask的并行度决定了map阶段的任务处理并发程度。

一个job的map阶段并行度由客户端提交的job决定。

客户端对map阶段并行度的规划逻辑为:

将待处理数据执行逻辑切片。按照一个特定切片的大小,将待处理的数据划分成逻辑上的多个split,然后每一个split分配一个maptask实例,并进行处理。

这段逻辑以及形成的切片规划描述文件,是由FileInputFormat实现类的getSplits方法来完成的。该方法返回List,每个InputSplit封装了一个逻辑切片的信息,包括长度和位置等信息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值