mapreduce数据处理完整流程

Mapper 处理的是<key,value>形式的数据,并不能直接处理文件流。

分片,格式化数据源(input Format)

InputFormat有两个任务:对源文件分片,确定Mapper数量;对分片进行格式化,处理成<key,value>形式的数据给Mapper

1.分片操作(split)

将源文件分片成InputSplit,每个InputSplit由一个Mapper处理。(note:对文件进行分片不是把文件切分开来形成新的文件分片副本)

2.数据格式化(format)

将划分好的InputSplit格式化为<key,value>形式,其中key是偏移量,value为每一行的内容。在Map任务执行过程中,会不停地执行上述操作,每生成一个<key,value>就会调用一次Map函数,也就是说每解析一个数据元,便交给Mapper处理一次。

Map过程

Mapper接受<key,value>形式的数据,并处理成<key,value>形式的数据。一般以空白符作为分隔符。

shuffer过程

从Mapper产生的直接输出,到最终的reduce的直接输入。

Mapper端的shuffer(sort,combine,spill,mergesort,partition)

每一个Mapper任务在内存都有一个输出缓存(默认是100M),并且有一个写入阈值(默认是0.8),当写入缓存的数据达到这一阈值,Mapper会继续向剩余的缓存写入数据,但在后台开启一个新线程,对前面80%的缓存数据进行排序,写入本地磁盘,这一操作称为spill操作,写入磁盘的文件称作溢写文件,Mapper向缓存写入数据是循环写入的,即当写到缓存的尾部时,继续从缓存头开始。
       Mapper任务完成后,有多个spill文件,将所有的spill文件合并成一个文件,将合并后的文件进行partition分区,保证后一个分区的数据在Key上大于前一个分区,每一个分区分配给一个reducer。所以最后除了得到一个大的数据文件之外,还得到一个index索引文件,其中存储了分分区的数据位置偏移量。

Reduce端的shuffer(merge sort,merge sort)

reducer通过线程复制过来的数据会存贮在JVM的堆内存,其数据来自多个Mapper的输出文件的相同的分区,当堆内存的数据达到阈值后,进行归并排序并写入本地磁盘形成类似spill的文件,当数据获取结束后,归并排序多个类似spill文件,写入本地磁盘。

Reduce过程

reducer接受<key,{value list}>的数据流,形成<key,value>形式的输出,输入写入hdfs。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值