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