Hadoop9-MapReduce原理

首先来看一下MapReduce的整体流程

ç¸å³å¾ç

(图片来源:https://haritbigdata.wordpress.com/2015/07/21/hadoop-inside-mapreduce-process-of-shuffling-sorting-part-ii/

1. Read阶段:先切片,再调用RecorderReader将切片数据解析成一个个kv,其中key是某行的起始偏移量,v是这一行的内容

2. (k,v)传给map,map做相应的处理

3. map会输出到一个环形缓冲区,这个缓冲区大小为100M,当达到0.8的时候,会完成partition,sort,combine(可选)最终溢写到磁盘

4. 溢写出来的小文件会在map端merge,形成若干个分区(与reduce数量一致),包含分区索引和分区数据

 

5. copy,合并后的分区文件按照分区,分发到不同的reduce端

 

6. merge:reduce端首先会把不同map端拿过来的数据做多次merge,最终merge成一个大文件。

7. reduce:merge后的大文件交给reduce处理

8. output:将结果写入到输出中

 

Note:

1. reduce数量与partition数量一致,map数量与input split数量一致

 

Question:

1. Map和Reduce的数量如何确定?

2. 容错机制?-Yarn

3. Reduce端数据倾斜如何处理?

4. mapreduce程序的优化点。

Q5. mapreduce的中间结果存储在哪里?

A5: map的中间结果都会spill到本地磁盘中,在map执行完后,形成最终的spill文件。所以map端这里的数据就表示map task往本地磁盘中总共写了多少字节。与map端相对应的是,reduce端在shuffle时,会不断地拉取map端的中间结果,然后做merge并不断spill到自己的本地磁盘中。最终形成一个单独文件,这个文件就是reduce的输入文件。

Q6: mapreducer中间结果在哪里查看, 如果一个mapreduce的程序运行出了问题,我想查看中间的输出结果来定位,是map的那个过程,或者是reduce的某个过程出的问题, 哪中间结果在哪里看呢? 比方split,combiner,shuffle等过程

A6: map、reduce之间的临时文件是存放在map执行侧的本地磁盘当中。
当mapreduce任务结束时,中间文件会被删除掉。
 中间文件用于完成map到reduce之间的shuffle,平台的这部分逻辑极少出现bug。
 在map跟reduce之间,会被触发的客户编写的逻辑主要是partitioner中的partition、combiner。split是在inputformat完成的,不在这个时段触发。
 可以在map的输出之前、reduce输入之后、partition、combiner中加些日志,确认数据是否依据你的预期到达

Q7: MapReduce框架中,在Map和Reduce之间的combiner的作用是?

A8: Mapreduce中的Combiner就是为了避免map任务和reduce任务之间的数据传输而设置的,Hadoop允许用户针对map task的输出指定一个合并函数。即为了减少传输到Reduce中的数据量。它主要是为了削减Mapper的输出从而减少网络带宽和Reducer之上的负载。(链接:https://www.nowcoder.com/questionTerminal/9a48d44d2572483a95e2b9604e0b744c?toCommentId=81014
)

 

MapReduce原理

(图片来自Hadoop权威指南4)

参考:

[1]mapreduce数据流

[2]mapreduce的中间结果存储在哪里?

[3]mapreducer中间结果在哪里查看?

[4]MapReduce框架中,在Map和Reduce之间的combiner的作用是 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值