【2019-04-26】关于mapreduce
2019-04-26 本文已影响0人
BigBigFlower
mapreduce程序本质上是并行运行的。
![](https://img.haomeiwen.com/i11797539/56cc258f23218d05.png)
mapreduce 作业 (job)是客户端需要执行的一个工作单元:包括输入数据、MapReduce程序和配置信息。
Hadoop将作业分成若干个任务(task)来执行,包含两类任务:map任务和reduce任务。这些任务运行在集群节点上,并通过yarn进行调度。如果一个任务失败,将在另一个不同的节点上自动重新调度。
Hadoop将MapReduce的输入数据划分成等长的小数据块,称为输入分片(input split)。合理的分片大小趋向于HDFS的一个块的大小,默认128MB。
数据本地优化:Hadoop在存储有输入数据(HDFS中的数据)的节点上运行map任务。
![](https://img.haomeiwen.com/i11797539/87b9f5fea1718a2d.png)
map任务输出写入本地硬盘,而非HDFS。map产生的是中间结果,由reduce处理出最终的结果。
![](https://img.haomeiwen.com/i11797539/fc59ae00fd27c06d.png)
![](https://img.haomeiwen.com/i11797539/c10df8b80310939a.png)
![](https://img.haomeiwen.com/i11797539/5c8f201dbc5bf310.png)
集群的可用带宽限制map reduce作业的数量,尽量避免map和reduce任务之间的数据传输。Hadoop允许用户针对map任务指定一个combiner,combiner函数作为reduce函数的输入。
example:找1950对应的最大气温值
第一个map输出(1950,0),(1950,20),(1950,10)
第二个map输出(1950,25),(1950,15)
则reduce的输入:(1950,[0,20,10,25,15])输出(1950,25)
使用combiner函数可以找出每个任务的最大气温值
reduce接受的输入为:(1950,[20,25]) 输出(1950,25)