《hadoop权威指南》读书摘要

1、MapReduce执行流程

RecordReader->读取文件数据,将数据拆分为kv对
map阶段->调用用户定义程序处理kv对,并对数据进行分区(job.setPartitionerClass)后存储到“环形内存缓冲区”,
         当缓冲区达到一定阈值时(默认80%),会启动后台线程将部分数据溢出写入(spill)磁盘的临时文件中,
         将数据写入文件前会先进行排序(job.setSortComparatorClass)后执行合并(combine)操作(可选)。
         当整个map任务完成溢出写入(spill)后,会将所有临时文件执行归并(merge)操作,生成一个大文件 
         此时的归并会将spill文件中所有的相同partition合并到一起,并对每个partition中的数据按照key进行排序(sort)操作,生成key和对应的value-list,文件归并时,如果溢写文件数量超过参数min.num.spills.for.combine的值(默认为3)时,可以再次进行合并(combine)。
         
reduce阶段-> reduce task会从不同的job里拉取map task的最终结果,并将相同的partition数据归并(merge)成一个大文件,对文件中的数据按key进行排序。
         之后会对数据进行分组(job.setGroupingComparatorClass)。之后调用reduce进行数据处理 
         ps:如果:reduce数=1,所有分区都在一个reduce中处理,生成一个文件
                  1<reduce数<分区数,会报错,有的分区找不到处理的reduce
                  reduce数>分区数,会有本分reduce没有数据处理,生成空文件 
                  
                  一个分组调用一次reduce()方法 

参考:https://blog.csdn.net/asn_forever/article/details/81233547

           https://blog.csdn.net/u014374284/article/details/49205885

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值