如果数据大小很大,hadoop如何在本地存储地图输出?

时间:2016-02-24 12:15:42

标签: hadoop mapreduce hdfs

据我所知,Mapper输出将存储在执行mapper的节点中。

因此,当我处理1 TB的数据时,假设映射器的总数为1000.首先,它执行500个映射器并将输出存储在本地并开始执行剩余的映射器数。之后,它将数据混洗到reducer并从reducer进程开始。

问题:

该数据节点是否会存储在该节点中执行的所有映射器输出?如果是这样,它会在将数据发送到减速机之前在本地存储1 TB或.75 Tb(压缩后)数据吗?

1 个答案:

答案 0 :(得分:1)

我不确定我的问题是否正确(请重新说明),但我想你是在问当mapper的输出太大而无法放入本地磁盘时会发生什么(是的,它存储在本地,< em>不在HDFS上)。请参阅this related postthis one。实际上,它首先写在内存中的缓冲区中,当此缓冲区已满时,它会溢出到磁盘。我还找到了this document,它以一种非常直观的方式解释了这个过程。

如果输出大于节点的本地磁盘中的输出,则任务将失败,从而为您提供“设备上没有剩余空间”错误,Hadoop将尝试将其发送到另一个节点。如果第二次尝试也失败,它将把它发送到另一个节点,直到预定义的n次任务尝试失败。

然后,如果数m的任务失败,您的工作也会失败。

但是,我不确定为什么你暗示整个输入(1TB)将由一个节点处理。通常,它被分成许多块,这些块将由不同的节点处理(除非您的集群中只有一个节点)。