Hadoop推测执行测试

时间:2014-05-30 03:20:46

标签: hadoop task speculative-execution

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

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

可悲的是,同样使用2节点,我不能引起推测性执行。我在类DefaultTaskSelector中编写了一些代码行作为Log(这是推测任务的类),但是这个类在初始化之后永远不会被FairScheduler类调用。

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

所以问题是:我如何导致/强制推测执行?

问候

2 个答案:

答案 0 :(得分:0)

当有多个映射器正在运行且其中一个或多个映射器落后于其他映射器时,通常会发生推测执行。实现目标的好方法:

  • 设置配置单元
  • 设置分区表
  • 确保数据足够大,以使许多映射器运行。这意味着:至少有几十个HDFS块的数据
  • 将数据输入分区:让其中一个分区的数据高度偏斜,远远超过其他分区。
  • 从表中运行select *

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

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

修改

Hive对你来说可能有点紧张。但您也可以将策略的“精神”应用于常规HDFS文件。使用故意偏斜的自定义分区程序编写map / reduce程序:即它使单个映射器执行大量工作。

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

答案 1 :(得分:0)

您应该能够使用setMapSpeculativeExecution(boolean)setReduceSpeculativeExecution(boolean)这两种方法进行推测性执行,您可以使用Job,MapReduce job configuration来指定。