Hadoop框架中的推测执行

时间:2020-01-09 10:34:33  来源:igfitidea点击:

Hadoop框架中的推测性执行(Speculative Execution)是一种优化技术,可确保提交的作业按时限完成。

Hadoop中需要推测执行

提交MapReduce作业后,将在数据的一部分上并行运行多个地图任务(输入拆分)。将以相同的方式产生多个reduce任务以并行工作以产生最终输出。

这些映射和归约任务在集群中的不同节点上启动。我们可能会遇到以下情况:一些映射或者精简任务的运行速度比群集中的其他任务慢。由于这些任务正在运行的节点中的某些硬件或者网络问题,可能会发生。

这些减速的任务可能会影响整体作业的执行,因为reduce任务只能在所有地图任务完成时才能启动,因此,减速的地图任务可能会成为瓶颈。以同样的方式执行速度较慢的减少任务可能会增加完成任务的总时间。为了缓解这些瓶颈,Hadoop框架使用推测执行。

Hadoop中的推测性执行如何工作

在分别启动map任务和reduce任务并监视它们的进度一段时间后,Hadoop框架知道哪些map或者reduce任务比平时花费更多的时间。对于那些运行缓慢的任务,Hadoop在另一个节点上启动相同的任务。 Hadoop框架在这里推测,对在另一个节点上启动的相同数据进行操作的相同任务将更快地完成,因此该任务的名称是推测性执行。

在此请注意,原始任务和推测性任务都将运行,并且将使用第一个完成的输出,而另一个则终止。如果原始任务在推测任务之前完成,则推测任务将被杀死,反之亦然。

例如,如果Hadoop框架检测到给定作业的映射任务的执行速度低于同一作业的其他映射任务的执行速度,则将在另一个节点上启动对相同数据进行操作的同一映射任务的另一个实例。无论哪个地图任务首先完成,都将使用该任务的输出,而其他任务将被杀死。

投机执行的配置

在Hadoop中,默认情况下,将map和reduce任务的推测执行设置为true。它的属性在mapred-site.xml中设置。

  • mapreduce.map.speculative-如果为true,则可以并行执行某些地图任务的多个实例。默认为true。
  • mapreduce.reduce.speculative-如果为true,则可以并行执行某些reduce任务的多个实例。默认为true。
  • mapreduce.job.speculative.speculative-cap-running-tasks –可以随时以推测方式重新执行的正在运行的任务的最大百分比。预设值为0.1.

Hadoop框架用于推测执行计算的类是yarn.app.mapreduce.am.job.speculator.class。投机者类在MRAppMaster中实例化。

Hadoop中的推测性执行-缺点

尽管推测执行任务的想法是减少任务的执行时间,但这涉及到运行重复任务。重复执行任务会增加集群的负载。在群集非常繁忙或者资源有限的群集中,管理员可以考虑关闭推测执行。

在减少任务的情况下,运行重复任务的问题更加明显。精简任务从运行在不同节点上的多个地图任务获取其输入,因此在精简任务的情况下可以进行数据传输。作为推测执行的一部分运行相同的reduce任务意味着同一数据传输不止一次,从而增加了网络负载。