我正在使用 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)。运行。走着瞧吧。面对同样的问题,请在原始问题中提供简化的代码。
我将尝试再次编辑结果