映射任务结果不包括reducer

时间:2016-04-29 03:28:46

标签: hadoop mapreduce

当mapreduce作业运行时,map任务结果存储在本地文件系统中,然后reducer的最终结果存储在hdfs中。问题是

  1. 将地图任务结果存储在本地文件系统中的原因是什么?
  2. 如果map reduce工作没有减少阶段(只存在地图阶段),最终结果存储在哪里?

3 个答案:

答案 0 :(得分:2)

1)Mapper输出存储在本地fs中,因为在大多数情况下,我们对Reducer阶段(也称为最终输出)给出的输出感兴趣。Mapper <K,V> pair is intermediate output一旦通过则最不重要减速机。如果我们将Mapper输出存储在hdfs中,则会浪费存储空间,因为hdfs具有复制因子(默认情况下为3),因此数据占用空间的3倍,这在进一步处理中根本不需要。

2)如果是map only job,则最终输出存储在hdfs中。

答案 1 :(得分:1)

1)完成TaskTracker(TT)映射器逻辑后,在将输出发送到Sort和Shuffle阶段之前,TT将把o / p存储在临时文件(LFS)中 这是为了避免在网络故障中再次启动整个MR作业。一旦存储在LFS中,可以直接从LFS中选择映射器输出。这个数据称为中间数据,这个概念称为数据本地化

一旦作业完成,这些中间数据将被删除。否则,随着时间的推移,LFS的大小会随着来自不同作业的中级数据而增长。

数据本地化仅适用于映射器阶段,但不适用于排序&amp; Shuffle,Reducer阶段

2)当没有减速器阶段时,中间数据最终将被推送到HDFS。

答案 2 :(得分:0)

  

将地图任务结果存储在本地文件系统中的原因是什么?

Mapper输出是临时输出,仅与Reducer相关。在HDFS中存储临时输出(具有复制因子)是过度的。由于这个原因,Hadoop框架将Mapper的输出存储到本地文件系统而不是HDFS系统。它节省了大量磁盘空间。

Apache教程page中的另一个重点:

与给定输出键关联的所有中间值随后按框架分组,并传递给Reducer以确定最终输出。

对Mapper输出进行排序,然后按每个Reducer分区

  

如果地图减少作业没有减少阶段(仅存在地图阶段),最终结果存储在哪里?

您可以从Apache教程页面了解有关此查询的更多详细信息。

Reducer NONE

如果不需要减少,将减少任务的数量设置为零是合法的。

在这种情况下,map-tasks的输出直接进入FileSystem,进入FileOutputFormat.setOutputPath(Job,Path)设置的输出路径。在将映射输出写入文件系统 之前,框架不会对映射输出进行排序。

如果Reducers的数量大于0,则映射器输出将存储在本地文件系统中,并在将它们发送到Reducer之前进行排序。如果Reducers的数量为0,则映射器输出将存储在HDFS中而不进行排序。