-1

我正在为我的硕士论文 Hadoop 1.1.2 研究 Hadoop。

我正在研究一种用于推测任务的新算法,因此在第一步中,我尝试在代码中应用一些更改。

可悲的是,同样使用 2 个节点,我无法导致推测执行。我在 DefaultTaskSelector 类(这是用于推测任务的类)中写了几行代码作为 Log,但是在初始化之后,FairScheduler 类永远不会调用这个类。

我也在配置文件(mapred-site...xml)中激活了“推测”选项,但什么也没有。

所以问题是:我怎样才能导致/强制投机执行?

问候

4

2 回答 2

0

推测执行通常发生在有多个映射器运行并且其中一个或多个映射器滞后于其他映射器时。实现它的好方法:

  • 设置蜂巢
  • 设置分区表
  • 确保数据足够大以使许多映射器运行。这意味着:至少有几十个 HDFS 块的数据
  • 将数据输入分区:让其中一个分区的数据偏斜程度比其他分区多得多。
  • 从表中运行 select *

现在您可能会看到推测执行运行。

如果没有,请随时回到这里。我可以提供进一步的建议(例如,做一些可能导致 SE 的中等复杂的查询)

编辑

Hive 对你来说可能有点牵强。但是您也可以将策略的“精神”应用于常规 HDFS 文件。编写一个带有故意倾斜的自定义分区器的 map/reduce 程序:即它导致单个映射器完成超大比例的工作。

记住要有几十个 hdfs 块(至少)给任务跟踪器一些体面的工作来咀嚼。

于 2014-05-30T03:29:59.873 回答
0

您应该能够使用两种称为setMapSpeculativeExecution(boolean)setReduceSpeculativeExecution(boolean)的方法来引发推测执行,您可以使用MapReduce作业配置Job指定这两种方法。

于 2015-08-04T13:27:36.607 回答