Hadoop框架调用的mapper或reducer类的run()
方法如何?该框架调用run()
方法,但它需要一个上下文对象,那么Hadoop如何传递该对象?什么信息存在于那个对象中?Hadoop映射器上下文对象
5
A
回答
3
run()方法将使用Java运行时多态(称为方法重写)来调用。正如您可以在下面的链接中看到#569行,扩展映射器/缩减器将使用Java Reflection API进行实例化。所述MapTask类获取从作业配置对象扩展映射器/减速器其中,客户端程序将已经被配置扩展使用job.setMapperClass()
以下映射器/减速器类的名称从Hadoop Source MapTask.java
mapperContext = contextConstructor.newInstance(mapper, job, getTaskID(),
input, output, committer,
reporter, split);
input.initialize(split, mapperContext);
mapper.run(mapperContext);
input.close();`
采取的代码
#621行是运行时多态性的一个例子。在这一行上,MapTask以'Mapper Context'为参数调用配置的映射器的run()方法。如果run()未被扩展,它会调用org.apache.hadoop.mapreduce.Mapper
上的run()方法,该方法再次在配置的映射器上调用map()方法。
在上述链路的线路#616,MapTask创建具有工作配置等的所有细节的上下文对象作为由@harpun提及并然后传递到run()方法在线路#621
上面的解释适用于减少任务以及相应的ReduceTask类作为主要入门级。
0
是的,映射程序的run()
方法在运行地图任务尝试时由MR框架调用。就上下文而言,请查看Mapper.Context的文档,特别是已实现的接口及其javadoc可以全面了解上下文中包含的信息。通过上下文,你可以访问诸如数据:
- 作业信息(作业配置,映射器/减速的类名,作业名称,工作目录)当前执行的任务试图
- 当前关键的
- 状态,值,输入分割(地图任务特定信息)
当然存在Reducer类似的上下文对象:Reducer.Context。
相关问题
- 1. 映射器输入键值对Hadoop中
- 2. Hadoop的许多映射器
- 3. Hadoop几个映射器
- 4. 配置对象在hadoop映射器中为空
- 5. XML到对象映射器
- 6. 映射器:键值对象
- 7. Hadoop - 文件到块映射
- 8. hadoop中映射器和合并器的不同上下文类型
- 9. 映射对象
- 10. 映射对象
- 11. HADOOP:从映射器发射矩阵
- 12. Restkit手动映射:选择托管对象上下文
- 13. 上下文映射关系
- 14. 对象映射器/核心数据,对象映射器无值字段
- 15. 在Android上兼容对象映射器的对象
- 16. Hadoop递归映射
- 17. Hadoop映射进程
- 18. Hadoop流式缩减器映射器
- 19. Hadoop映射器/还原器重用
- 20. 使用构建器(使用immutables注释处理器)将映射对象映射到不可变对象映射
- 21. linqtosql对象映射
- 22. Grails映射对象
- 23. 对象Xml映射
- 24. 映射对象与映射实体
- 25. 使用映射映射嵌套对象
- 26. OneToOne映射不设置映射对象
- 27. NHibernate的映射,映射对象
- 28. IE9投射上下文'这'到对象
- 29. 使用自动映射器将多个对象映射到一个对象
- 30. RestKit对象映射没有映射我的对象
感谢niranjan可以在你运行任何简单的工作时解释所有hadoop框架类的执行情况? – 2013-05-03 04:42:13
这不是一个简单的答案。有很多hadoop框架类参与其中,在扩展类被调用之前,真正的整个软件层都被执行了。我建议下载并将hadoop源文件附加到IDE中,然后调试任何作业以了解调用堆栈中使用的高级类。 – 2013-05-06 15:15:45
@NiranjanSarvi,你能告诉我们MapTask类是如何创建其他类的上下文类的对象的吗?在MapTask类和Context类之间是否有任何关系,因为在库中Context类是一个抽象类,甚至没有被Maptask类实现?它来自其他方式吗? – Kate 2017-10-22 09:28:03