Mapper类的源码解析
1.类型:org.apache.hadoop.mapreduce.Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
2.Mapper的结构:
void setup(Context context):在任务执行前调用一次,
void map(KEYIN key, VALUEIN value, Context context):为输入分片中的每个键/值对调用一次
void cleanup(Context context):在任务结束后调用一次
run(Context context):MapTask真正执行的逻辑。
3.Mapper的说明:
--mapper将输入数据(键值对,k1,v2)映射成一组中间键值对(k2,v2)
--Mapreduce会为每一个inputsplit(输入分片)创建一个MapTask,inputsplit 由 inputFormat 来决定的
--mapper的输出数据会根据每一个reducer进行分区; 用户可以通过自定义分区器来决定什么key去什么reducer;
输出数据会根据某种算法对key进行分区。
--mr程序reduceTask的数量默认是1个,可以通过job.setNumReduceTasks(num)去修改它的个数
将reduceTask的个数指定为0时,map阶段的输出数据直接输出到mr程序指定的输出路径下
生成文件的个数是mapTask的数目,生成的文件名为 part-m-XXXXX
结果无排序
将reduceTask的个数指定为1时(默认值),生成的文件就是1个. part-r-XXXXX
将reduceTask的个数指定为2时,分区的个数是2,
将reduceTask的个数指定为5时,分区的个数是5。
partitionNum与reduceNum的关系:
默认情况下:reduceNum决定着partition的个数,及生成文件的个数
reduceNum > partitionNum :会生成空文件
reduceNum = partitionNum : 正常运行,有几个reduceNum就生成几个文件,不会产生空文件
reduceNum < partitionNum 程序报错
reduceNum=0时,没有partition。