Mapper类的源码分析

Mapper类源码解析
--------------------------
1.来自[org.apache.hadoop.mapreduce.Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>]
2.java Doc说明:
Map将输入数据<k,v>转换成中间数据集<k,v>
map将为输入的数据的每一个记录(行)执行map函数,MR通过inputfomart生成inputSplit(切分)对象,
并根据每个split产生相对应的maptask。
split切分原则(逻辑的):默认每个block对应一个split。slop指标:1.1
注:如一个文件为130m,生成2个block;一个大小为128m,另一个为2m;
inputsplit切分个数为:1个;
map的输出通过每个reduce进行分区(partition);用户可以通过自定义分区判定哪一个key发送到指定的reduce;
3.Mapper构成:
4个方法:
setup() : 在任务开始时调用一次;
map() : 对输入分块中的每个键/值(行偏移量/行内容)对调用一次。大多数应用程序应该覆盖这个,但默认是identity函数。
cleanup() : 在任务结束时调用一次;
run() : 专家用户可以重写此方法以获得更全面的控制执行。该方法描述了map阶段的函数调用过程。
4.总结:
maptask任务数:由inputsplit切分决定;inputsplit决定由block决定。每个job的map阶段肯定存在的;
reducetask任务数:由job.setNumReducetasks()进行设置,每个reduce根据partition生成不同的输出文件;
案例:设置reducenum数量,默认为1;测试将reducenum设置为2或5
设置reducenum数量为0,取消reduce阶段;
不设置mapper;

原文地址:https://www.cnblogs.com/lyr999736/p/9248471.html