MapReduce运行原理

MapTask运行的整个过程:
1、默认通过TextInputFormat读取数据,数据都是存放在hdfs的某些block块上
2、调用Map逻辑:默认一个block块对应一个切片,这个可以查看源码(TextInputFormat继承的父类里面就有原理),发现block块多大这个切片就多大。(1,2步骤就是从磁盘到内存的过程)
3、数据写入环形缓冲区(开辟的一块内存),默认环形缓冲区大小是100M,这个cloudera官网可以看配置,将从磁盘读取的数据进行分区,排序,规约,分组操作。
4、当环形缓冲区写到80M的时候,也就是80%,这个在cloudera官网可以看到配置,达到环形缓冲区80%的时候就会发生溢写操作spill,此时开启一个线程将环形缓冲区80M的数据写入到磁盘一个小文件中。
5、一个切片将对应的一个block块中所有数据都经过环形缓冲区写入磁盘一个一个小文件完成之后,就需要对这些小文件做一个合并merge,将合并后的大文件放入磁盘临时区域。
6、等待reduce阶段的调用


ReduceTask运行的整个过程:
1、拉取ReduceTask默认情况下,只会启动一个ReduceTask,也就是只有一个输出文件。也可以在main主入口下指定reduce个数,这时候指定几个就有几个输出文件。每个reduce都会从map阶段得到的每一个相对大的文件拉取属于自己的那一部分数据。
2、reduce会将拉去到的一个个数据进行合并,因为数据有可能很大,所以合并有可能发生在磁盘,如果小的话就发生在内存,合并的时候同时进行分组
3、调用reduce逻辑
4、输出结果


通过上面可以看出,数据首先从磁盘到内存,在从内存到磁盘(Map阶段)————从磁盘到内存(reduce阶段) ,分区,排序等shuffer步骤都是在环形缓冲区进行,所以调高环形缓冲区就可以让数据更多在内存运行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值