MR中MapTask的工作机制

MR中MapTask的工作机制

简单来说,inputFile通过split被切割成多个split文件通过Record按行读取内容给map,map中自己写处理的逻辑,map处理完之后交给OutputCollect收集器,对结果key进行分区(默认hashPartitioner),写入buffer,每个map task都有一个内存缓冲区(环形缓冲区),存放map的输出结果,当缓冲区快满的时候,将缓冲区的数据以临时文件的方式溢写到磁盘,整个map task结束后,对磁盘中这个maptask产生的所有临时文件进行合并,生成最终文件,等待reduce task拉取

  1. InputFormat(默认TextInputFormat)通过getSplits方法对输入目录文件进行切片得到block,有多少block就有多少MapTask
  2. 文件被切分成block之后,RecordReader(默认LineRecordReader)进行读取,以 \n 为分隔符,每次读取一行数据,返回键值对,key是首字符的偏移值,value表示一行文本的内容
  3. 读取的键值对进入用户继承的Mapper中,执行用户重写的map方法,RecordReader读取一行,调用一次map方法
  4. Mapper结束之后,将Mapper得到的结果通过Context.write进行collect收集。在collect中,先进行分区处理,默认使用hashPartitioner
  5. 将数据写入内存(环形缓冲区,默认100M) , 环形缓冲区的作用是:批量收集Mapper结果,减少磁盘IO的影响。 key,value,Partition的结果都会写入缓冲区,写入之前,需要序列化成字节数组
  6. 当环形缓冲区的内存达到百分之八十时,溢写线程启动,先将这百分之八十的key进行排序
  7. 合并溢写文件,每次溢写都会在磁盘上生成一个临时文件(判断是否有combiner),如果Mapper的输出结果很大,溢写线程多次启动,磁盘上就会产生多个临时文件。整个数据处理结束之后,对磁盘中的临时文件进行Merge合并。最终的文件只有一个写入磁盘,同时还会有一个索引文件,记录每个reduce对应的数据偏移量
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

健鑫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值