gpt4 book ai didi

Hadoop reducer : How to ensure the reducers are evenly running over a number of nodes

转载 作者:可可西里 更新时间:2023-11-01 15:38:44 25 4
gpt4 key购买 nike

我有一个场景,我不确定减少处理器的位置。

i) 我有一个输入文本文件,它有 1 到 4 之间平衡范围内的 1000 个整数。

ii) 让我们假设有一个 4 节点集群,每个节点有 12 个槽,其中 4 个分配为 reducer - 总共有 16 个 reduce 槽

iii) 我在驱动程序中设置了 reducer 的数量:

jobConf.setNumReduceTasks(4);

iii) 最后我有一个分区方法是

public class MyPartitioner extends Partitioner<Text,Text>{
@Override
public int getPartition(Text key, Text value, int numPartitions) {
return Integer.parseInt(key.toString());
}
}

1)一世。我如何强制它在每个节点上使用 1 个 reducer 来处理 reduce(让其他 3 个本地 reducer 空闲)而不是在每个节点上运行一个以上的 reducer IE 如何确保你不在一个节点上使用 4 个插槽并在节点 2、3 和 4 上有 12 个空闲槽。

二。Hadoop MR 是否管理资源说:“节点 X 是最空闲的,我将在那里生成一个 reducer ……”

2) 如果你对一个键有偏差但打算对其进行分组,你可以为该键生成多个缩减器,例如将一个随机整数添加到值“4”的种子值并使用添加 3 个额外的缩减器分区程序在 reducer 4、5、6 和 7 中处理值“4”?

jobConf.setNumReduceTasks(7);

public class MyPartitioner2 extends Partitioner<Text,Text>{
@Override
public int getPartition(Text key, Text value, int numPartitions) {
int p = Integer.parseInt(key.toString());
if (p == 4){return p + (new Random()).nextInt(4);}//extra 3 partitions...
return p;
}
}

这对倾斜有用吗?

最佳答案

这不是您可以控制的 - 将 map 和 reducer 任务分配给节点是由 JobTracker 处理的。

有一个 O'Reilly Answer 非常详细地详细说明了任务分配的细节:

http://answers.oreilly.com/topic/459-anatomy-of-a-mapreduce-job-run-with-hadoop/

默认行为是为 Job Tracker 的每次更新迭代分配一个任务,因此您通常不应该看到同一节点满足所有 reduce 任务 - 但如果您的集群忙于其他任务并且只有一个节点有可用的 reducer 插槽,那么你所有的 reduce 任务都可能被分配到该节点。

至于处理偏斜,这将减轻可能发送到单个节点的单个已知高容量 key 的所有数据(同样不能保证这一点),但您仍然会遇到需要解决的问题将此偏斜键的三个 reducer 输出组合成最终答案。

关于Hadoop reducer : How to ensure the reducers are evenly running over a number of nodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com