我写了一个Hadoop Map Reduce作业。当我在本地运行它时,我注意到如果我没有指定任何reduce任务,则会有一些临时文件写入输出目录。如果我指定reducers,则不会写入临时文件。这是正常的行为吗?我希望看到写入临时文件否则意味着映射器试图在内存中执行所有操作然后转移到内存中的reducer。这让我感到难以置信。
对于映射器如何/何时/将中间输出写入文件系统的任何见解将不胜感激。
由于
答案 0 :(得分:9)
映射任务将其输出写入本地磁盘,而不是HDFS。地图输出 是中间输出:它由reduce任务处理以产生最终输出,并且 一旦作业完成,地图输出就可以丢弃。所以将它存储在HDFS中, 复制,将是矫枉过正。
但是如果我们将reducers的数量设置为0,那么map输出将作为最终输出存储在HDFS上。没有减少阶段,因此映射器的输出是整个作业的输出。
另外here是如何查看中间文件,即使指定了reducer也是如此。