我正在编写我的自定义推测程序,我查看了文档,默认为"DefaultSpeculator.java
",设置在Hadoop核心的"MRAppMaster.java" (function createSpeculator())
类中。我想知道在执行我的工作时,你是否可以在运行时更新/更改投机者,因为我需要测试大约5个投机者。
谢谢!!!
可以为映射任务打开和关闭推测执行,并在集群范围内或每个作业的基础上减少任务。
投机者在MRAppMaster
(Map Reduce Application Master)中实例化。正如您在问题中提到的,以下是MRAppMaster::serviceInit()
函数中的一段代码,它实例化了投机者:
if (conf.getBoolean(MRJobConfig.MAP_SPECULATIVE, false)
|| conf.getBoolean(MRJobConfig.REDUCE_SPECULATIVE, false)) {
//optional service to speculate on task attempts' progress
speculator = createSpeculator(conf, context);
addIfService(speculator);
}
它检查JobConfig
,查看Map或Reduce任务的推测执行是否打开,然后创建推测器。
由于投机者是在MRAppMaster
中创建的,因此可以为每个作业启用自定义投机者。
以下是推测执行属性:
- mapreduce.map.investigative:为映射任务启用推测执行
- mapreduce.reduced.reduced:启用reduce的推测执行任务
- yarn.app.mapreduce.am.job.expulator.class:投机者类
- yarn.app.mapreduce.am.job.task.aestimator.class:估计器类。这是投机者用来估计任务的运行时间