3

我正在使用 Hadoop 进行大学作业,并且我的代码可以正常工作,但是我遇到了一个小问题。

我正在尝试将减速器的数量设置为 19(这是文档建议的 0.95 * 容量)。但是,当我在任务跟踪器中查看我的工作时,它总共显示 1 个减速器。

System.err.println("here");
job.setNumReduceTasks(19);
System.err.println(job.getNumReduceTasks());

预期产量:

here
19

但在最终输出中我得到:

12/05/16 11:10:54 INFO mapred.JobClient:     Data-local map tasks=111
12/05/16 11:10:54 INFO mapred.JobClient:     Rack-local map tasks=58
12/05/16 11:10:54 INFO mapred.JobClient:     Launched map tasks=169
12/05/16 11:10:54 INFO mapred.JobClient:     Launched reduce tasks=1

我覆盖的mapreduce部分是:

  • 映射器
  • 减速器
  • 分区器
  • 分组比较器。

我的第一个想法是分区器为每个键返回相同的值。我检查了这一点,但事实并非如此。

我还检查了石斑鱼是否正常工作。

我不确定还有什么可能导致这种情况。如果有人可以提供帮助,将不胜感激。

我是一个非常反对 Java 的人,所以如果可以的话,请尝试使用非常明确的例子。

PS:我没有设置这个集群,它是由大学设置的,所以我不确定任何配置变量。PS:要发布的代码太多,所以请让我知道您特别想看到的任何代码。

编辑: TejasP 向我提出了以下问题:

您真的是在 Hadoop 上运行代码还是在本地模式下运行代码?(看看你的工作是否出现在 jobtracker 和 tasktracker 上)。

是的,我是,它可以在 jobtracker UI 中查看。这也报告了 1 个减速器。以及注意:这在 settings.xml 中将减速器列为 1

您是否在环境中导出了 HADOOP 变量?

是的,它们在 env 中可见,并且在我设置它们之前代码不会编译。

env | grep HADOOP
HADOOP_HOME=/mnt/biginsights/opt/ibm/biginsights/IHC
HADOOP_CONF_DIR=/mnt/biginsights/opt/ibm/biginsights/hadoop-conf

集群是单节点还是多节点?并且即使集群有多个节点,所有节点都健康吗?其他节点有问题吗?

是的,有多个节点 (10) 作业跟踪器报告:

Nodes: 10
Map Task Capacity: 20
Reduce Task Capacity: 20
Blacklisted Nodes: 0

您是否正确使用 setNumReduceTasks?如上所述,我调用了 set,然后获取并取回了它被设置为 (19) 的值,但最终的代码仍然只使用了 1。

您可以通过删除细节将您的代码缩减为一个小的 map-reduce 代码(这仅用于 ?debugging)。运行。走着瞧吧。面对同样的问题,请在原始问题中提供简化的代码。

我将尝试再次编辑结果

4

2 回答 2

3

看起来您正在 LocalJobRunner 模式下运行它(很可能来自 eclipse)。在这种模式下,如果reduce任务的数量> 1,它会将数量重置为1。看看LocalJobRunner.java中的以下几行

int numReduceTasks = job.getNumReduceTasks();
if (numReduceTasks > 1 || numReduceTasks < 0) {
      // we only allow 0 or 1 reducer in local mode
      numReduceTasks = 1;
      job.setNumReduceTasks(1);
}
于 2012-08-28T21:39:52.243 回答
1

您需要考虑的几点:

  1. 您真的是在 Hadoop 上运行代码还是在本地模式下运行代码?(看看你的工作是否出现在 jobtracker 和 tasktracker 上)
  2. 您是否在环境中导出了 HADOOP 变量?
  3. 集群是单节点还是多节点?
  4. 即使集群有多个节点,所有节点都健康吗?其他节点有问题吗?
  5. 您是否正确使用 setNumReduceTasks ?您可以通过删除细节将您的代码缩减为一个小的 map-reduce 代码(这仅用于调试)。运行。走着瞧吧。面对同样的问题,请在原始问题中提供简化的代码。
于 2012-05-16T11:45:38.370 回答