IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]requestedMemory=-1

    fansy1990发表于 2016-10-26 23:03:44
    love 0

    软件版本: 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
    

    看日志说申请的资源内存为-1,怎么会为-1呢,往上再次查看日志,发现

    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












沪ICP备19023445号-2号
友情链接