2017-03-06 38 views
2

洗牌和排序阶段是否在地图任务结束之前出现,或者在地图任务生成输出之后出现,以便不再查看地图任务。这是一个'Map only task'案例,我很困惑。 如果在Map only任务中没有Shuffle并排序,有人可以解释如何将数据写入最终的输出文件。是否会在地图专用任务中进行随机播放和排序?

+0

不应该在纯地图任务中洗牌。你为什么认为那里有? –

+0

@ cricket_007我不是说有或将会有。我在理解洗牌的概念时有点困惑,如果它出现在仅限地图任务中,我也会对它进行排序。我为这个问题添加了更多信息。希望能够理解。 – Sidhartha

+0

洗牌发生在减速器和组合器中,为什么它会在地图上发生? –

回答

3

当你有一个只有map的任务时,根本没有洗牌,这意味着mappers会直接将最终的输出写入HDFS。另一方面,当你有一个完整的Map-Reduce程序,使用mapper和reducers时,是的,洗牌可以在reduce阶段开始之前开始。

在SO引用this very nice answer

所有的洗牌首先是从 映射器的减速transfering数据的过程,所以我认为这是明显的,这是对减速必要 ,否则,他们将无法输入任何 (或来自每个映射器的输入)。即使在地图阶段完成之前 也可以开始混洗,以节省一些时间。这就是为什么当地图 状态还不是100%时,您可以看到 的减少状态大于0%(但小于33%)。

希望这个答案澄清了你的困惑。

+1

感谢您的友好的话:)我只是想补充一下,在仅有地图的作业情况下,每个mapper的输出将不会被排序,而不是在reduce阶段。在后一种情况下,映射器将在本地对输出进行排序,并且reduce任务所需的相应映射输出将在排序阶段进行合并排序。 – vefthym

+1

@vefthym这是一个好点,它是默认情况下的工作原理。我想提一下,为了禁用排序过程,即使存在缩减阶段,也可以设置一些标志,这将在需要排序时提高性能。 – dbustosp

+0

@dbustosp感谢您给予的澄清。我现在清楚地了解机制。 – Sidhartha