[英]Map task results incase of no reducer
当mapreduce作业运行时,map任务的结果存储在本地文件系统中,然后来自reducer的最终结果存储在hdfs中。 问题是
1)映射器输出存储在本地fs中,因为在大多数情况下,我们对Reducer阶段给出的输出(也称为最终输出)感兴趣。 Mapper <K,V> pair is intermediate output
,一旦传递给Reducer,它的重要性最低。 如果我们将Mapper输出存储在hdfs中,则会浪费存储空间,因为hdfs具有复制因子(默认为3),因此,数据将占用3倍的空间,而这在后续处理中根本不需要。
2)对于map only job
,最终输出存储在hdfs中。
1)完成TaskTracker(TT)映射器逻辑之后,在将输出发送到Sort and Shuffle阶段之前,TT将把o / p存储在临时文件(LFS)中。这是为了避免在出现以下情况时再次启动整个MR作业:网络故障。一旦存储在LFS中,则可以直接从LFS中获取映射器输出。此数据称为中间数据 ,概念称为数据本地化
作业完成后,该中间数据将被删除。否则,随着时间的推移,LFS的大小将随着来自不同作业的中间数据的增加而增加。
数据本地化仅适用于Mapper阶段 ,不适用于Sort&Shuffle,Reducer阶段
2)当没有还原阶段时, 中间数据最终将被推送到HDFS。
映射任务结果存储在本地文件系统中的原因是什么?
Mapper
输出是临时输出,仅与Reducer
相关。 将临时输出存储在HDFS中(带有复制因子)是过大的选择。 由于这个原因,Hadoop框架将Mapper的输出存储到本地文件系统而不是HDFS系统中。 这样可以节省大量磁盘空间。
Apache教程页面中的另一点要点:
随后,与给定输出键关联的所有中间值都由框架进行分组,并传递给Reducer,以确定最终输出。
映射器的输出进行排序,然后按Reducer进行分区
在map reduce作业的情况下,没有reduce阶段(仅存在map阶段),最终结果存储在哪里?
您可以从Apache教程页面获取有关此查询的更多详细信息。
减速机无
如果不需要减少,则将减少任务的数量设置为零是合法的。
在这种情况下,映射任务的输出直接进入FileSystem,进入FileOutputFormat.setOutputPath(Job,Path)设置的输出路径。 框架不会在将映射输出写到FileSystem之前对其进行排序 。
如果Reducer的数量大于0,则将映射器输出存储在本地文件系统中并进行排序,然后再将其发送到Reducer。 如果Reducer的数量为0,则映射器输出将存储在HDFS中而不进行排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.