Hadoop Mappers是否仅在本地执行?

时间:2013-09-25 17:38:49

标签: java hadoop mapreduce mapper reducers

我的情况是文件的整个块位于一台机器上,默认复制因子为1.

在这种情况下,如果我在我的集​​群上启动hadoop,我觉得我的所有映射任务只能在一台机器上运行,因为块只存在于该机器上。这样对吗? Local mapper任务执行是约束还是只是优先级?
如果是,是否可以通过将块复制到本地磁盘来配置映射器任务也在其他计算机上运行。?

第二个问题是,即使映射器任务仅在一台机器上运行,通过复制映射器的中间数据,还是可以在所有其他机器中启动Reducer。?

2 个答案:

答案 0 :(得分:2)

数据本地执行只是一个优先事项,而不是约束。如果其他节点上有空闲插槽,Hadoop将生成非本地映射器。您甚至可以为同时运行的相同数据块启动更多映射器 - 这称为推测执行 - 完成首先获胜的任务,其他任务将被终止。

至于减速器 - 它们在称为shuffle的阶段通过网络复制地图输出数据。

答案 1 :(得分:1)

框架尽力将处理保持为本地处理。但是在某些情况下可能会出现这种情况。一个显然是插槽不可用。另一种情况可能是当您的InputSplit跨越多个块并且每个块驻留在不同的机器上时。在这种情况下,InputSplit的另一部分将被移动到启动此InputSplit的Mapper的节点,以便整个块由1个Mapper处理。

本地映射器任务执行是约束还是优先级?

这不是约束。这只是为了提高效率。否则,将BigData从此处移动到那里以便处理它是多么低效。这是Hadoop的基本原则之一。

如果是,是否可以通过将块复制到本地磁盘来配置映射器任务也在其他计算机上运行。

你为什么这样做?如果您确实希望在同一块的多个副本上运行Mappers,则可以将推测执行切换为true,而不是将块从一个位置复制到另一个位置。这将在多台机器上的同一块上运行多个Mapper,您将通过最快的映射器获得输出。

第二个问题是,即使映射器任务仅在一台机器上运行,通过复制映射器的中间数据,还是可以在所有其他机器中启动缩减器吗?

Reducers可以在任何有空闲插槽的节点上启动。但并非所有的机器都必然。