Hadoop映射/减少作业分配

时间:2014-04-28 16:36:39

标签: hadoop mapreduce

我有4个节点,我正在运行mapreduce示例项目,以查看作业是否在所有4个节点之间被分配。我多次运行该项目,并注意到,映射器任务正在所有4个节点之间进行拆分,但reducer任务仅由一个节点完成。这是假设是什么或者是减速器任务假设在所有4个节点之间分开。

谢谢

2 个答案:

答案 0 :(得分:0)

Mappers的分布取决于映射器将在哪个数据块上运行。默认情况下,框架会尝试将任务分配给存储了数据块的节点。这将阻止网络传输数据。

对于减速器而言,它取决于否。你工作所需的减速器。如果您的作业只使用一个减速器,则可以将其分配给任何节点。

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

答案 1 :(得分:0)

让我们说你224 MB的文件。当您根据默认块大小64 MB将该文件添加到HDFS时,文件被分成4个块[ blk1 = 64M blk2 = <强> 64M ,<强> BLK3 = <强> 64M ,<强> BLK4 = <强> 32M ]。我们假设node1上的blk1表示为 blk1 :: node1 blk2 :: node2 blk3 node3 blk4 node4 。现在,当您运行MR时,Map需要访问输入文件。因此,MR FWK创建了4个映射器,并在每个节点上执行。现在是减速机,因为Venkat表示它取决于为您的工作配置的减速机数量。可以使用Hadoop org.apache.hadoop.mapreduce.Job setNumReduceTasks(int tasks)API配置Reducer。