hadoop06-Mapper类的源码解析

本文详细解析了Hadoop中Mapper类的源码,包括其结构、执行流程以及如何通过输入分片创建MapTask等关键信息,并阐述了Mapper如何将输入数据映射成中间键值对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值