2013-09-25 47 views
1

我有一种情况,在一个机器和默认复制因子文件谎言的整个块是1Hadoop映射器是否仅在本地执行?

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

第二个问题是,即使映射任务只在一台机器上运行,它是正确的,减速将在所有其他计算机通过复制映射器的中间数据开始?

+0

假设我们有足够的地图并减少插槽 – GoT

回答

2

数据本地执行只是优先级而非约束。如果其他节点上有空闲插槽,Hadoop将产生非本地映射器。你甚至可以在的同一时间为同一块启动更多的映射器 - 这被称为推测性执行 - 并且任务完成第一次胜利,其他人被杀死。

至于减速 - 他们复制阶段称为洗牌地图通过网络输出数据。

+0

谢谢。我认为复制只能在缩小阶段完成(洗牌)。那么,如果地图插槽存在,是否也意味着同一块数据也会被复制到非本地机器上执行地图任务? – GoT

+0

是的,在这种情况下,地图任务的输入数据将被复制,并且效率远低于本地执行的效率。 –

1

框架会尽可能保持处理地方越好。但是,这可能会有一些情况没有遵循。一个显然是槽不可用。另一种情况可能是您的InputSplit跨越多个块并且每个块位于不同的机器上。在这种情况下,InputSplit的另一部分将移动到启动此InputSplit的Mapper的节点,以便整个块得到1个Mapper的处理。

是本地映射器执行任务的约束或只是一个优先?

这不是一个制约因素。这只是让事情变得更有效率。否则,将BigData从这里移到那里以处理它是多么的低效。这是Hadoop的基本原理之一。

如果是的话,是否有可能以这样的方式映射任务也存在于其它机器通过复制块到他们的本地磁盘上运行配置?

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

第二个问题是,即使映射程序任务只在一台机器上运行,通过复制映射程序的中间数据,在所有其他机器上启动reducer也是正确的。

减速器可以在具有空闲插槽的任何节点上启动。不是所有的机器都必须。