在MapReduce中,如何在多台机器上执行相同的reduce任务?

时间:2016-08-04 01:19:19

标签: hadoop mapreduce

阅读有关MapReduce的论文,并提到将所有中间键排序到一起。

  

当减少工作人员已阅读全部   中间数据,它通过中间键对它进行排序   相同键的出现被组合在一起。排序是   需要因为通常许多不同的键映射到相同的减少   任务。如果中间数据量太大而无法容纳   内存,使用外部排序

有人提到在多台机器上执行相同的减少任务。

  

当reduce任务完成时,reduce worker会原子地重命名它   临时输出文件到最终输出文件。如果相同减少   任务在多台机器上执行,多次重命名调用   为同一个最终输出文件执行。

如果将相同的密钥组合在一起,那么这不会成为一个减少工作的减少任务吗?如何在多台机器上运行相同的reduce任务?

2 个答案:

答案 0 :(得分:1)

我认为你错了。这意味着如果单个reduce任务足够大,那么它不是在单个机器上处理它而是在多台机器上处理,然后从机器输出文件被重命名,聚合并呈现为单个输出文件。

同一节点上可能会发生多个reduce过程。它依赖于该节点的速度,如果它与其他节点相比足够快以处理reduce任务,如果是,则再次使用另一个reduce任务进行处理。

有关更多信息,请参阅 https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html 本文档中有一个主题"减少多少? "我认为这将解决您的疑问。

我希望我能够解决您的问题。

答案 1 :(得分:1)

  

。如果在多台计算机上执行相同的reduce任务,则将对同一个最终输出文件执行多次重命名调用。

由于投机性执行,这是可能的。

如果特定的Map或Reduce任务需要很长时间,Hadoop Framework会在不同的计算机上启动相同的任务,推测长时间运行的任务存在一些问题。长时间运行任务的缓慢可能是由网络故障,繁忙的机器或故障硬件引起的。

您可以在此SE问题中找到有关此概念的更多详细信息:

Hadoop speculative task execution

来自Apache文档page @任务副作用文件:

  

同一Mapper或Reducer的两个实例同时运行(例如,推测性任务)尝试打开和/或写入FileSystem上的同一文件(路径)时可能会出现问题。因此,应用程序编写者必须为每次任务尝试选择唯一的名称(使用尝试,例如attempt_200709221812_0001_m_000000_0),而不仅仅是按任务。

     

为了避免这些问题,当OutputCommitter是FileOutputCommitter时,MapReduce框架维护一个特殊的${mapreduce.output.fileoutputformat.outputdir}/_temporary/_${taskid}子目录,可以通过${mapreduce.task.output.dir}访问文件系统上的每个任务尝试,其中任务的输出 - 尝试存储。