我读到,由于优化原因,映射任务通常在驻留在同一节点上的数据上运行。但是在我的工作跟踪器(hadoop admininstration页面)中,我可以看到运行在map1中的地图任务的输入拆分位置来自node3,node1和node4。我总共产生了10个地图任务,其中一些输入分割位置指向除地图任务节点之外的3个不同节点。这很常见吗?它与我如何将输入文件加载到hdfs以及它们在群集中均匀分布有关吗?如果这不好,我如何确保地图任务尽可能从同一节点中选择数据?
答案 0 :(得分:1)
你的某些任务是否比其他任务花费的时间更长?如果是这种情况speculative execution
将出现在图片中,这可能就是背后的原因。
由于各种原因(包括硬件降级或软件错误配置),任务可能会很慢,但由于任务仍然成功完成,因此可能很难检测到原因,尽管时间比预期的要长。 Hadoop不会尝试诊断和修复运行缓慢的任务;相反,它会尝试检测任务运行速度低于预期的时间,并启动另一个等效的任务作为备份。这被称为speculative execution
任务。
默认情况下启用推测执行。但是,可以在群集范围内或按作业的基础上为地图任务和减少任务单独启用或禁用它。
希望这能回答这个问题。
P.S。 :推测执行是一种优化,而不是使作业更可靠地运行的功能。如果存在有时导致任务挂起或减速的错误,那么依靠推测执行来避免这些问题是不明智的,并且不会可靠地工作,因为相同的错误可能会影响推测任务。您应该修复该错误,以便任务不会挂起或减慢。