MapTask.runNewMapper() ->
...
if (job.getNumReduceTasks() == 0) {
// 无reduce,直接写HDFS
// 这个writer输出时不执行Partitioner.getPartition()方法
output = new NewDirectOutputCollector(taskContext, job, umbilical, reporter);
} else {
// 执行Reduce函数,写入本地文件
// 初始化Partitioner
output = new NewOutputCollector(taskContext, job, umbilical, reporter);
}
// 将output传入mapperContext
mapperContext = contextConstructor.newInstance(mapper, job, getTaskID(),
input, output, committer,
reporter, split);
mapper.run(mapperContext); <--
mapper.run(mapperContext) ->
while (context.nextKeyValue()) {
map(context.getCurrentKey(), context.getCurrentValue(), context); <-
}
//map()函数由用户实现,并调用context.write()方法输出
map() ->
context.write((KEYOUT) key, (VALUEOUT) value); <-
write()
// 实际调用NewOutputCollector.wirte()
// 先计算key-value的partition,然后执行collect输出数据到内存缓冲区
collector.collect(key, value, partitioner.getPartition(key, value, partitions));
结论:
- Partitioner是在map函数执行context.write()时被调用。
- 如果没有Reduce函数,则MapTask不会执行Partitioner.getPartition()方法。
--end
相关推荐
Hadoop的MapTask类源代码分析
Hadoop 自定义 Partitioner 实现
Hadoop 自定义 Partitioner 实现
Hadoop的MapTask辅助类源代码分析(I)
Hadoop中的MapTask辅助类的源代码分析(II)
hadoop map reduce 的中文简易教程,能轻松帮助普通用户不需了解太多hadoop底层知识就能实现分布式编程,很好的入门教程。
MapTask辅助类源代码分析III\ Hadoop
Hadoop Map Reduce教程,介绍hadoop map/reduce框架的各个方面
hadoop中map/reduce自学资料合集
Hadoop 自定义 Partitioner 源代码
hadoop的map reduce 学习手册,很实用
Hadoop Map-Reduce教程,hadoop,mapreduce
人脸识别,车辆识别,一人一档,一车一档 hadoop map reduce hbase
NULL 博文链接:https://sgq0085.iteye.com/blog/1879442
Hadoop Map Reduce 教程.doc
hadoop开发文档
Hadoop学习总结之三:Map-Reduce入门
今天小编就为大家分享一篇关于MapTask工作机制图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
讲述了Windows平台的Hadoop安装,以及在Eclipse中环境搭建。针对Windows平台搭建Hadoop,给出了详细步骤。最难得的是,详细给出了Windows平台的Hadoop安装常见问题及解决方案。 最后,以最简单的求和为例,剖析...
在Hadoop MapReduce环境中,如果能预知作业的执行时间,就可在资源分配、任务调度以及负载均衡过程中作出更合理的决策,改善系统性能.在分析Hadoop MapReduce作业执行模式后,提出了一种作业执行时间在线预测方法.该方法...