我所知,映射器输出将存储在执行映射器的节点中。
因此,当我处理 1 TB 的数据时,假设映射器的总数为 1000。首先,它执行 500 个映射器并将输出存储在本地,然后开始执行剩余数量的映射器。之后,它将数据洗牌到化简器,并从化简器过程开始。
问题:
该数据节点是否会存储在该节点中执行的所有映射器输出?如果是这样,在将数据发送到reducer之前,它会在本地存储1 TB或.75 Tb(压缩后)的数据吗?
我不确定我是否正确理解了您的问题(请改写),但我想您是在问当映射器的输出太大而无法放入其本地磁盘时会发生什么(是的,它存储在本地,而不是 HDFS 上)。请参阅此相关帖子和此帖子。实际上,它首先写入内存中的缓冲区,当该缓冲区已满时,它就会溢出到磁盘。我还找到了这份文档,它以一种漂亮而直观的方式解释了这个过程。
如果输出大于节点本地磁盘可以容纳的输出,则任务将失败,给您一个"设备上没有剩余空间"错误,Hadoop将尝试将其发送到另一个节点。如果第二次尝试也失败,它会将其发送到另一个节点,直到预定义的 n 次任务尝试失败。
然后,如果许多任务失败,您的作业也将失败。
但是,我不确定为什么您暗示整个输入(1TB)将由一个节点处理。通常,它被分成许多块,将由不同的节点处理(除非群集中只有一个节点)。