我有4个节点,我正在运行一个mapreduce示例项目,看看作业是否在所有4个节点之间分发。我多次运行该项目,并注意到,mapper任务在所有4个节点之间进行了拆分,但reducer任务仅由一个节点完成。这是假设的情况吗?或者reducer任务也被假设在所有4个节点之间拆分。
感谢
映射器的分布取决于映射器将在哪个数据块上操作。默认情况下,Framework会尝试将任务分配给存储了数据块的节点。这将阻止数据的网络传输。
对于减速器,这取决于您的工作需要的减速器数量。如果您的作业只使用一个reducer,则可以将其分配给任何一个节点。
同样影响这一点的还有推测性执行。如果启用,则这将导致映射任务/减少任务的多个实例在不同的节点上启动,并且基于%完成度的作业跟踪器决定要通过哪个实例,其他实例将被终止。
假设您有224 MB的文件。当您根据64 MB的默认块大小将该文件添加到HDFS中时,文件将被拆分为4个块[blk1=64M、blk2=64 Mlk3>=64 M、blk432M]。让我们假设节点1上的blk1表示为blk1::node1,blk2;:node2。现在,当您运行MR时,Map需要访问输入文件。因此,MR FWK创建4个映射器,并在每个节点上执行。现在是减速器,正如Venkat所说,这取决于为您的工作配置的减速器数量。减速器可以使用Hadoop org.apache.Hadoop.mapreduce.Job setNumReduceTasks(int tasks)API进行配置。