mapreduce详细流程总结

一、MapReduce详细流程

mapreduce大概工作流程:

1.map task阶段:

  • input数据源切片输入

  • inputformat划分k,v键值对(k偏移量,v输入内容)

  • mapper自定义map函数

2.shuffle阶段:

  • 分区:哈希,根据yarn资源调度分配reduce个数设置几个分区

  • 进去缓冲区

  • 排序,在溢出之前进行排序

  • 合并:可选

3.reduce task阶段:

  • reduce自定义reduce函数

  • outputformat将合并的k,v输出

map task个数,决定并行度,根据数据的大小来决定启动多少个map任务

切片与map task并行度

1.一个job的map阶段并行度由客户端在提交job时的切片数量决定

  • 一个数据切了几片就启动多少个map task

2.每一个split切片分配一个map task并行实例处理

3.默认情况下,切片大小=BlockSize

  • 切片大小跟block块大小一样大,避免本地服务器到其他服务器的连接,加快速率

4.切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

  • 一个文件切片:ss.avi一共300M分为0-128,128-256,256-300,这是一个文件,另一个文件有100M但是他不能与第三个map task放到一块,而是另外开一个mpa task

mapreduce详细流程

mapreduce详细的工作流程:

  1. 待处理文本:一个文件:ss.txt(200M)

  2. 客户端submit()前,获取待处理数据的信息,然后根据参数配置,形成一个任务分配的规则,默认split大小=block块大小,所以为:0-128,128-200

  3. 客户端提交信息:job.split(切片工作),wc.jar包,job.xml

  4. 计算出map task数量:根据yarn资源调度,Mrappmaster计算出要多少个 map task数量

  5. 默认TextinputFormat:

    1. 指的是将源文件划分为大小相等的小数据块( Hadoop 2.x 中默认 128MB ),也就是分片( split ), Hadoop 会为每一个分片构建一个 Map 任务,并由该任务运行自定义的 map() 函数,从而处理分片里的每一条记录;

    2. 将划分好的分片( split )格式化为键值对<key,value>形式的数据,其中, key 代表偏移量, value 代表每一行内容。

    3. 得到<k1,v1>

  6. 逻辑运算:经过map()自定义函数得到新的键值对<k2,v2>(<a,1>,<b,1>...)

  7. 向环形缓冲区(默认100M,写道80%后反向溢出)写入<k,v>数据:

  8. 分区,排序:

    1. 在写入缓冲区前先进行分区(哈希,根据yarn资源调度分配reduce个数设置几个分区)

    2. 数据写入后有索引,分区,k开始,v开始,key,valu

    3. 在达到80%溢出前要进行排序(快速排序):根据索引(描述数据的数据),各个分区自行排序

  9. 溢出到文件:溢出的文件已分区且区内有序

  10. Merge归并排序(每个partition中的数据再按key来排序):

  11. Combiner合并(可选):

    1. 减少Mapper输出数据的传输量,以及在Reducer端执行更多的合并操作,从而提高整个作业的性能。具体来说,Combiner可以聚合相同键的部分Mapper输出,以减少数据传输量。通过使用Combiner,可以在Map阶段结束时局部减少数据量,从而降低了MapReduce任务整体的网络传输开销。

  12. 所有map task任务完成后,启动相应数量的reduce task,并告知reduce task处理数据范围(数据分区)

  13. 下载到reduce task本地磁盘,合并文件,归并排序(将不同分区的文件合并并且排序)

  14. 一次读取一组

  15. 分组:相同K值的value值放到同一个集合中<a,{1+1}>

  16. 默认Textoutputformat:格式输出

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值