我正在使用Hadoop进行大学任务,并且我的代码正在工作,但即时通讯遇到了一个小问题。Hadoop无法设置减少> 1
我想将reducer的数量设置为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中将reducer列为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代码通过删除细节(这只是为了调试)。运行。走着瞧吧。面对同样的问题,在原始问题中提供简化的代码。
我会尝试的结果
你能看到什么是在XML配置在你的工作中。 (在web前端的作业视图中,靠近“作业文件”的蓝色链接)。为“mapred.reduce.tasks”关键字映射了什么值? –
值为,mapred.reduce.tasks:1 什么是设置这个数字? – Nick
我相信这是一个错误。你可以直接通过你的配置来设置值,我想这是job.set(“mapred.reduce.tasks”,“19”);.其实这个方法应该正确地做到这一点。 –