MapReduce计算模型

模型架构

1、执行MapReduce任务的角色有两个,一个是JobTracker,用于调度工作,另一个是TaskTracker,用于执行工作的2
2、一个Hadoop集群中只有一个JobTracker
3、每个MapReduce任务分为map阶段和reduce阶段

执行流程

MapReduce计算模型_第1张图片
1、首先将文件读取,然后由map程序处理,map程序将输入读入切出其中的word,并标记它的数目为1,形成< word,1>的形式
2、然后交给reduce处理,reduce程序将相同的key值(也就是word)的value收集起来,形成< word,list of 1>的形式
2、最后将这些1值加起来,即为word的个数,最后将这个< word,value>对以TextOutPutFormat的形式输出到HDFS中

MapReduce的数据流和控制流

WordCount程序执行流程:
MapReduce计算模型_第2张图片
1、InputSplit是Hadoop用来传送给每个单独的map的数据,存储一个分片长度和一个记录数据位置的数组
2、map程序处理后的数据是写入本地磁盘,而不是HDFS,Reduce读取map的输出数据,合并value,将他们输出到HDFS
MapReduce计算模型_第3张图片
注意:reduce任务是可以有多个的,最后每个reduce task都会生成一个输出文件,也可以没有reduce任务,直接那map的输出结果作为最终结果

MapReduce任务的优化

1、任务调度

计算方面:任务优先分配给空闲机器
I/O方面:尽量把任务分配给InputSplit所在机器,这样会减少网络I/O的消耗

2、数据预处理

在提交MapReduce任务之前先对数据进行一次预处理,提高执行效率,还可以通过设置map的输入数据大小来调节map的运行时间

3、combine函数

map程序产生的中间数据会有很多重复数据,如果一个一个传给reduce会特别耗时,因此在MapReduce框架有一个combine函数,它会先计算重复value的个数,然后做合并处理,这样就减少网络传输的数据量

4、压缩

可以选择对map的输出和最终输出结果进行压缩,来减少网络传输的数据量,不过要根据实际情况

5、自定义comparator

自定义Hadoop数据类型时,可以使用自定义comparator来实现数据的二进制,来省去数据序列化和反序列化的时间

总结

MaoReduce计算模型,主要是一个流程和四个方法,一个流程指数据流程,四个方法就数据转换过程使用的方法(InputFomat,map,reduce,OutputFormat)

参考《Hadoop实战》

你可能感兴趣的:(Hadoop)