为什么投机性执行对giraph没有意义?

bmp9r5qi  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(514)

最近我运行了一些基准测试来了解giraph中的故障转移机制。
其实我很好奇;当一个工作中的工人速度变慢时,其他的工人就等着。后来我发现了类似的东西 GiraphJob.java :

// Speculative execution doesn't make sense for Giraph
giraphConfiguration.setBoolean("mapred.map.tasks.speculative.execution", false);

有人知道为什么giraph中没有启用推测执行吗?
谢谢

gwo2fgha

gwo2fgha1#

首先让我们回想一下什么是投机执行。引自雅虎hadoop教程:
推测性执行:hadoop系统的一个问题是,通过将任务划分到多个节点上,少数慢速节点可能会限制程序的其余部分。例如,如果一个节点有一个慢磁盘控制器,那么它可能只以所有其他节点10%的速度读取其输入。因此,当99个map任务已经完成时,系统仍在等待最后一个map任务签入,这比所有其他节点都要花费更长的时间。通过强制任务彼此独立运行,单个任务不知道其输入来自何处。任务信任hadoop平台来提供适当的输入。因此,相同的输入可以并行处理多次,以利用机器能力的差异。由于作业中的大多数任务即将结束,hadoop平台将跨多个没有其他工作要执行的节点调度剩余任务的冗余副本。这个过程称为推测执行。当任务完成时,他们会向jobtracker宣布这一事实。任务的任何一个副本先完成,就成为最终副本。如果其他副本是推测性执行的,hadoop会告诉tasktracker放弃任务并放弃它们的输出。然后,还原器首先从成功完成Map的Map器接收输入。默认情况下启用推测执行。您可以通过将mapred.map.tasks.投机.execution和mapred.reduce.tasks.投机.execution jobconf选项分别设置为false来禁用Map器和还原器的投机执行
如果我对giraph的理解正确的话,他们不会使用推测执行,因为他们使用自己的迭代计算范式,而这并不适合。这个范例的灵感来自于google的pregel,它提供了一个以图形节点为中心的数据视图。此外,通过检查点来创建容错,这意味着每个迭代(也称为superstep)计算每个图节点的所有传入消息,然后在节点之间分发消息。
简单地说mapreduce并没有以它原来的方式使用,因此对于giraph的推测性执行是没有意义的。

相关问题