Hadoop_MapReduce 运行流程 - MR job 运行的5个阶段

 

参考文章: 

https://www.cnblogs.com/cjsblog/p/8168642.html

https://www.jianshu.com/p/461f86936972

https://blog.csdn.net/wyqwilliam/article/details/84669579

mapreduce运行的5个阶段


mapreduce在运行的过程中大致概括为5个步骤

1. [input阶段]获取输入数据进行分片作为map的输入
2. [map阶段]过程对某种输入格式的一条记录解析成一条或多条记录
3. [shffle阶段]对中间数据的控制,作为reduce的输入
4. [reduce阶段]对相同key的数据进行合并
5. [output阶段]按照格式输出到指定目录

 

 

运行过程图

 

 

input阶段

input阶段主要是从节点上反序列化数据,读取后切片,供map阶段使用
序列化格式和inputformat格式可以自定义设置
只有支持分片的压缩格式可以分片
记录格式:如serse 用正则表达式来转换文本hive

具体的步骤顺序如下:


1. 访问datanode中的数据反序列化数据并进行切片,为每一个切片分配一个map任务
2. 并发的执行这些任务
3. 通过recordReader读取切片中的每一条记录,按照记录格式读取,偏移值作为map的key,记录行作为value,当做map方法的参数
 

 

map阶段

通过对输入记录的处理,转换成一个或多个中间记录

 

 

shuffle阶段

需要注意:
1. shuffle阶段会对中间值进行优化,并且将分区的数据分发给各个reduce处理

map任务的输出默认是放在本地磁盘的临时缓冲目录中的

分区,排序,combiner过程可自定义

由于受限于集群可用带宽,通常会对中间数据做压缩,combiner处理,减少网络带宽消耗

分区的作用就是决定根据map 输出的key值由哪个reduce处理

mapper实现类读取配置文件属性,可以在配置中指定压缩的格式

每一个分组的后台线程对输出结果的key进行排序,在排序的过程中,有combine函数则会进行调用

1.map数据会先输出到内存缓冲区中,到达默认的80%的阀值后,会像map任务本地写数据,每次写都会生成一个小文件。
2.在写到本地的过程中,会经历分区,排序,combiner(可选)的过程
3.当最后一个文件溢写到本地磁盘中的时候,区与区的文件就是合并,排序,压缩(可选)
4.经过分区的排序的大文件会按照不同的分区被拷贝到相应的reduce中处理
5.reduce端通过http network复制map端传来的数据
6.将输入的数据排序后合并,经过2次排序后会返回一个value的迭代器
7.分组将相同key的value放到一起作为一个value集合,作为reduce的输入
 

 

reduce 阶段

处理<key,list<value>>对,对每个key产生一个结果

 

output阶段

对输出数据通常会做压缩,节省磁盘空间

将reduce结果按照输出的格式写入文件中

按照输出文件的格式,将每个键值对结果输出一行,中间分隔符默认是‘\t’.默认调用键值对对象的toString()方法
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值