软件版本: Hadoop2.6.0 (源码使用CDH5.7.0 ,对应hadoop 2.6.0),集群使用Hadoop2.6.4(原生,JDK1.8), Intellij idea14 (JDK1.8);
问题描述: 使用Intellij IDEA编译打MR程序的Jar包,可以直接在终端使用hadoop jar的方式运行,但是直接在Intellij IDEA中提交却任务失败?
查询日志表现为:
2016-10-26 09:01:48,566 ERROR [RMCommunicator Allocator] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: ERROR IN CONTACTING RM. org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException: Invalid resource request, requested memory < 0, or requested memory > max configured, requestedMemory=-1, maxMemory=1548
2016-10-26 09:01:47,618 INFO [Thread-51] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: mapResourceRequest:<memory:-1, vCores:1> 2016-10-26 09:01:47,658 INFO [Thread-51] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: reduceResourceRequest:<memory:-1, vCores:1>确实申请的资源内存为-1,而反观hadoop jar方式运行的日志,发现其日志:
2016-10-26 09:03:25,434 INFO [Thread-51] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: mapResourceRequest:<memory:1024, vCores:1> 2016-10-26 09:03:25,471 INFO [Thread-51] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: reduceResourceRequest:<memory:1024, vCores:1>确实内存不是-1,那么问题就可能是这样的,使用Intellij IDEA提交程序的时候,需要设置:
conf = new Configuration(); conf.setBoolean("mapreduce.app-submission.cross-platform", true);// 配置使用跨平台提交任务 conf.set("fs.defaultFS", "hdfs://master:8020");// 指定namenode conf.set("mapreduce.framework.name","yarn"); // 指定使用yarn框架 conf.set("yarn.resourcemanager.address","master:8032"); // 指定resourcemanager conf.set("yarn.resourcemanager.scheduler.address", "master:8030");// 指定资源分配器 conf.set("mapreduce.jobhistory.address","master:10020");那是否可以设置申请的内存大小呢,通过加上一个参数:
conf.set("mapreduce.map.memory.mb","1024");然后再次运行,发现mapper可以运行,但是reducer还是运行不了,再次查看日志,发现
2016-10-26 09:09:46,259 INFO [Thread-51] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: mapResourceRequest:<memory:1024, vCores:1> 2016-10-26 09:09:46,287 INFO [Thread-51] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: reduceResourceRequest:<memory:-1, vCores:1>确实是申请的mapper的资源改过来了,那么再次修改reduce的申请内存:
conf.set("mapreduce.reduce.memory.mb","1024")发现已经可以在Intellij IDEA中提交程序了。
总结: 使用Intellij IDEA之类的工具提交MR程序,如果出现如题所示错误,建议在configuration中添加相关资源设置。
分享,成长,快乐
转载请注明blog地址:http://blog.csdn.net/fansy1990