Hadoop 重复的任务将被终止

Hadoop 重复的任务将被终止,hadoop,mapreduce,hadoop-streaming,Hadoop,Mapreduce,Hadoop Streaming,在我将作业提交到Hadoop集群并在节点之间分割作业输入之后,我可以看到一些任务并行运行了两次尝试 例如,在节点39,任务尝试尝试\u 201305230321\u 0019\u m\u 000073\u 0启动,并在3分钟内尝试\u 201305230321\u 0019\u m\u 000073\u 1在节点25启动。在另外4分钟内,第一次尝试(尝试_201305230321_0019_m_000073_0)被终止(没有任何通知,日志不包含任何信息),第二次尝试在半小时内成功完成 发生了什么

在我将作业提交到Hadoop集群并在节点之间分割作业输入之后,我可以看到一些任务并行运行了两次尝试

例如,在节点39,任务尝试
尝试\u 201305230321\u 0019\u m\u 000073\u 0
启动,并在3分钟内
尝试\u 201305230321\u 0019\u m\u 000073\u 1
在节点25启动。在另外4分钟内,第一次尝试(
尝试_201305230321_0019_m_000073_0
)被终止(没有任何通知,日志不包含任何信息),第二次尝试在半小时内成功完成


发生了什么事?如何防止创建重复尝试?这些重复的尝试是否可能导致神秘的死亡?

您是否打开了推测执行?您可以使用以下代码来阻止它:

job.getConfiguration().setBoolean(                                                                                                                 
                "mapred.map.tasks.speculative.execution", false);                                                                                          
job.getConfiguration().setBoolean(                                                                                                                 
                "mapred.reduce.tasks.speculative.execution", false);  
以下是关于投机性执行的定义:

推测性执行:Hadoop系统的一个问题是,通过将任务划分到多个节点上,一些较慢的节点可能会限制程序的其余部分。例如,如果一个节点的磁盘控制器速度较慢,那么它读取输入的速度可能仅为所有其他节点的10%。因此,当99个映射任务已经完成时,系统仍在等待最后一个映射任务签入,这比所有其他节点都要花更长的时间

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


默认情况下启用推测执行。通过将mapred.map.tasks.投机性.execution和mapred.reduce.tasks.投机性.execution JobConf选项分别设置为false,可以禁用映射程序和还原程序的投机性执行。

是否打开了投机性执行?您可以使用以下代码来阻止它:

job.getConfiguration().setBoolean(                                                                                                                 
                "mapred.map.tasks.speculative.execution", false);                                                                                          
job.getConfiguration().setBoolean(                                                                                                                 
                "mapred.reduce.tasks.speculative.execution", false);  
以下是关于投机性执行的定义:

推测性执行:Hadoop系统的一个问题是,通过将任务划分到多个节点上,一些较慢的节点可能会限制程序的其余部分。例如,如果一个节点的磁盘控制器速度较慢,那么它读取输入的速度可能仅为所有其他节点的10%。因此,当99个映射任务已经完成时,系统仍在等待最后一个映射任务签入,这比所有其他节点都要花更长的时间

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

默认情况下启用推测执行。通过将mapred.map.tasks.投机性.execution和mapred.reduce.tasks.投机性.execution JobConf选项分别设置为false,可以禁用映射程序和还原程序的投机性执行