阅读关于MapReduce的论文时,提到了对所有中间键进行排序以将其分组在一起。
当reduce工作人员已读取所有中间数据,它按中间键对其进行排序同一关键字的出现被分组在一起。排序是需要,因为通常许多不同的关键点映射到相同的reduce任务如果中间数据量太大而无法容纳内存,使用外部排序
有人提到在多台机器上执行相同的reduce任务。
当reduce任务完成时,reduce工作程序原子地重命名其临时输出文件到最终输出文件。如果同样减少任务在多台计算机上执行,将执行多个重命名调用针对相同的最终输出文件执行。
如果将相同的键组合在一起,这难道不会成为一个reduce任务,由一个reduct工作人员运行吗?如何在多台机器上运行相同的reduce任务?
如果在多台机器上执行相同的reduce任务,则会对同一个最终输出文件执行多个重命名调用。
这可能是由于推测性执行。
如果一个特定的Map或Reduce任务需要很长时间,Hadoop框架会在不同的机器上启动相同的任务,推测长期运行的任务存在一些问题。长时间运行任务的缓慢可能是由网络故障、机器繁忙或硬件故障引起的。
你可以在这个SE问题中找到更多关于这个概念的细节:
Hadoop推测任务执行
来自Apache文档页面@任务副作用文件:
同一Mapper或Reducer的两个实例同时运行(例如,推测性任务),试图打开和/或写入FileSystem上的同一文件(路径)时可能会出现问题。因此,应用程序编写器必须为每次任务尝试(使用attempted,比如
attempt_200709221812_0001_m_000000_0
)选择唯一的名称,而不仅仅是每个任务。为了避免这些问题,当OutputCommitter是FileOutputCommiter时,MapReduce框架在存储任务尝试输出的FileSystem上为每次任务尝试维护一个特殊的
${mapreduce.output.fileoutputformat.outputdir}/_temporary/_${taskid}
子目录,该目录可通过${mapreduce.task.output.dir}
访问。
我想你搞错了。这意味着,如果一个reduce任务足够大,那么它不是在一台机器上处理,而是在多台机器上进行处理,然后将机器的输出文件重命名、聚合并显示为单个输出文件。
在同一节点上可以发生多个reduce进程。这取决于该节点的速度,与其他节点相比,该节点是否足够快来处理reduce任务,如果是,则再次向其提供另一个reduce作业。
有关更多信息,请参阅https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html这个文档中有一个主题"减少了多少?"我认为这将解决您的疑问。
我希望我能解决你的疑问。