Hadoop推测任务执行

Posted

技术标签:

【中文标题】Hadoop推测任务执行【英文标题】:Hadoop speculative task execution 【发布时间】:2013-02-16 09:02:06 【问题描述】:

在 Google 的 MapReduce 论文中,他们有一个备份任务,我认为这与 Hadoop 中的推测任务相同。投机任务是如何实现的?当我开始一项推测性任务时,该任务是从一开始就作为较旧且缓慢的任务开始,还是仅从较旧任务到达的位置开始(如果是,是否必须复制所有中间状态和数据?)

【问题讨论】:

补充问题,如果您要在系统范围级别完全禁用推测任务执行,原因列表是什么?禁用投机执行后可以获得哪些好处。 【参考方案1】:

Hadoop 系统的一个问题是,通过将任务分散到多个节点上,一些速度较慢的节点可能会限制程序其余部分的速率。

任务可能会因为各种原因变慢,包括硬件性能下降或软件配置错误,但原因可能难以检测,因为任务仍然成功完成,尽管时间比预期的要长。 Hadoop 不会尝试诊断和修复运行缓慢的任务;相反,它会尝试检测任务何时运行比预期慢,并启动另一个等效的任务作为备份。这被称为任务的推测执行。

例如,如果一个节点的磁盘控制器速度较慢,那么它读取其输入的速度可能仅为所有其他节点的 10%。所以当 99 个 map 任务已经完成时,系统还在等待最后一个 map 任务的签入,这比其他所有节点都需要更长的时间。

通过强制任务彼此隔离运行,单个任务不知道它们的输入来自哪里。任务信任 Hadoop 平台来提供适当的输入。因此,相同的输入可以并行处理多次,以利用机器能力的差异。由于作业中的大多数任务即将结束,Hadoop 平台将在几个没有其他工作要执行的节点上安排剩余任务的冗余副本。这个过程被称为推测执行。当任务完成时,他们会向 JobTracker 宣布这一事实。无论哪个任务副本首先完成,都将成为最终副本。如果其他副本是推测性地执行,Hadoop 会告诉 TaskTracker 放弃任务并丢弃它们的输出。然后,Reducers 首先从成功完成的 Mapper 接收输入。

默认情况下启用推测执行。您可以通过分别使用旧 API 将 mapred.map.tasks.speculative.executionmapred.reduce.tasks.speculative.execution JobConf 选项设置为 false 来禁用映射器和减速器的推测执行,而对于较新的 API,您可以考虑更改 mapreduce.map.speculativemapreduce.reduce.speculative

所以要回答你的问题,它确实是重新开始,与其他任务完成/完成的程度无关。

参考:http://developer.yahoo.com/hadoop/tutorial/module4.html

【讨论】:

我相信 mapreduce.map.speculativemapreduce.reduce.speculative 分别是 mapred.map.tasks.speculative.executionmapred.reduce.tasks.speculative.execution 的较新等价物。

以上是关于Hadoop推测任务执行的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop 推测执行

Hadoop学习19--推测式执行

Hadoop任务分配,怎么确保每个机器1个MAP,不重复?

大数据开发要学会看yarn日志:Task容错机制,任务推测执行,计数器

大数据开发要学会看yarn日志:Task容错机制,任务推测执行,计数器

如何在hadoop环境下执行mapreduce任务