2014-04-28 109 views
-1

我有4个节点,我正在运行一个mapreduce示例项目以查看是否正在所有4个节点之间分配工作。我运行了多次项目并注意到,mapper任务在所有4个节点之间被分割,但reducer任务只能由一个节点完成。这是假设它是如何还是减速器任务假设在所有4个节点之间分裂。Hadoop Map/Reduce工作分配

谢谢

+0

一个非常类似的问题,你刚才问你可以在这里找到http://stackoverflow.com/questions/6885441/setting-the-number-of-map-tasks-and-reduce-tasks – Sudarshan

回答

0

映射器的分布取决于映射器将运行在数据的这些块。 Framework默认尝试将任务分配给具有存储数据块的节点。这将阻止数据的网络传输。

对于减速器又取决于没有。你的工作需要的减速器。如果你的工作只使用一个reducer,它可能被分配给任何节点。

同样影响这是推测执行。如果打开,则会导致多个映射任务/减少任务实例在不同节点上启动,而基于完成百分比的作业跟踪器将决定哪一个会通过并且其他实例将被终止。

0

让我们说你224 MB的文件。当添加文件到基础上,64 MB的缺省块大小HDFS,文件被分成4个块[BLK1 = 64MBLK2 = 64MBLK3 = 64Mblk4 = 32M]。让我们假设BLK1在node1上表示为BLK1 :: 节点1BLK2 :: 节点2BLK3节点3BLK4节点4。现在当你运行MR时,Map需要访问输入文件。所以MR FWK创建4个映射器并在每个节点上执行。 Venkat表示它依赖于为您的工作配置的减速器的数量。可以使用Hadoop org.apache.hadoop.mapreduce.Job setNumReduceTasks(int tasks)API配置reducer。