当前位置: 首页>>hadoop 2.0之YARN>> 阅读正文

YARN/MRv2 MRAppMaster深入剖析—ContainerAllocator分析

Category: hadoop 2.0之YARN View: 137,063 Author: Dong
, , ,

  • 评论 (13)
  • 引用通告 (4)
发表评论 发起引用

  • 1楼cnmpeach 回复

    Post: 2013-03-27 01:16

    董学长: 您好!有一个问题想请教一下,RMallocator 为task 申请container的时候,用一个四元组描述task的资源需求,其中后面两项是 申请内存的大小 和申请 container的个数,我想问一下,关于这两个参数 在配置文件中是否有 默认值,有的话默认值是多少? 另外,我在配置文件中好像没有看到有关container的配置信息,如果我想更好的理解container的话,我觉得与container相关的配置信息应该也挺重要的,希望能有所指点

    [回复]

    Dong 回复:

    注意,我这一篇是讲的MapReduce Application,对于MapReduce作业,每个任务会对应一个container,用户提交作业时可通过参数mapred.job.map.memory.mb和mapred.job.reduce.memory.mb设置每个Map Task和Reduce Task占用的内存数目,而container数目实际上就是任务数。MRAppMaster会汇总后向RM申请资源。

    [回复]

    cnmpeach 回复:

    恩 来错页面了 谢谢 已经有收获

    [回复]

  • 2楼cnmpeach 回复

    Post: 2013-03-27 01:18

    那个不是RMAllocator,应该是containerallocator

    [回复]

  • 3楼rain 回复

    Post: 2013-04-12 03:24

    任务资源需求四元组 这最后一项代表需要的container数目,不是一个任务只需要一个container吗?

    [回复]

    Dong 回复:

    这个是每个作业的资源描述,比如一个作业有6个map,可能需要6个container。

    [回复]

    Adi 回复:

    “作业的每个任务资源需求可描述为四元组,分别表示作业优先级、期望资源所在的host,资源量(当前仅支持内存),container数目”. 按这样的描述应该是指单个任务需要的container吧?不应该是1吗?如果是指整个作业的,那怎么用hostname描述整个作业呢?

    [回复]

    Dong 回复:

    不是单个任务,也不是整个作业,比如一个作业可能需要6个container,其中4个在host1上,2个在host2上,这样会发两条信息。

    [回复]

    Adi 回复:

    明白,thx^^

    [回复]

  • 4楼nick 回复

    Post: 2013-05-17 07:47

    您好:我想问一下container目前只是封装了内存作为资源分配。是否有考虑到cpu的事情,比如有多少核?谢谢

    [回复]

    Dong 回复:

    最新版本包含cpu和内存两种资源。

    [回复]

    dolphin 回复:

    请问您说的最新版本是多少?就是包含了cpu资源的版本,谢谢

    [回复]

    Dong 回复:

    2.0.5-alpha 或者 0.23.9-alpha 或者 CDH 4.3.0

    [回复]

    dolphin 回复:

    谢谢,我想确认一下 2.0.4是否也包含了cpu资源。我看到是从2.0.3开始就有的,对吗?

    [回复]

  • 5楼hua 回复

    Post: 2013-10-18 06:57

    您好,我使用web工程调用mapreduce程序的时候,出现问题,说是申请的资源数目不合理,
    mapResourceReqt和reduceResourceReqt都是-1,导致运行失败。而单独的jar包是可以运行成功的。我用的是hadoop-2.1.0-beta版本。异常如下,请问您有什么见解吗?我在网上一直没有搜到有这方面的信息。多谢~
    2013-10-18 11:26:16,964 INFO [Thread-48] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: mapResourceReqt:-1
    2013-10-18 11:26:16,969 INFO [Thread-48] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: reduceResourceReqt:-1
    2013-10-18 11:26:16,976 INFO [eventHandlingThread] org.apache.hadoop.mapreduce.jobhistory.JobHistoryEventHandler: Event Writer setup for JobId: job_1382066164891_0003, File: hdfs://10.103.244.246:8020/tmp/hadoop-yarn/staging/tseg/.staging/job_1382066164891_0003/job_1382066164891_0003_1.jhist
    2013-10-18 11:26:16,980 WARN [eventHandlingThread] org.apache.hadoop.conf.Configuration: user.name is deprecated. Instead, use mapreduce.job.user.name
    2013-10-18 11:26:17,898 INFO [RMCommunicator Allocator] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: Before Scheduling: PendingReds:1 ScheduledMaps:1 ScheduledReds:0 AssignedMaps:0 AssignedReds:0 CompletedMaps:0 CompletedReds:0 ContAlloc:0 ContRel:0 HostLocal:0 RackLocal:0
    2013-10-18 11:26:17,916 ERROR [RMCommunicator Allocator] org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator: ERROR IN CONTACTING RM.
    java.io.IOException: org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException: Invalid resource request, requested memory max configured, requestedMemory=-1, maxMemory=8192
    at org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerUtils.validateResourceRequest(SchedulerUtils.java:168)
    at org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerUtils.validateResourceRequests(SchedulerUtils.java:193)
    at org.apache.hadoop.yarn.server.resourcemanager.ApplicationMasterService.allocate(ApplicationMasterService.java:389)
    at org.apache.hadoop.yarn.api.impl.pb.service.ApplicationMasterProtocolPBServiceImpl.allocate(ApplicationMasterProtocolPBServiceImpl.java:60)
    at org.apache.hadoop.yarn.proto.ApplicationMasterProtocol$ApplicationMasterProtocolService$2.callBlockingMethod(ApplicationMasterProtocol.java:99)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2040)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2036)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1477)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2034)

    at org.apache.hadoop.mapreduce.v2.app.rm.RMContainerRequestor.makeRemoteRequest(RMContainerRequestor.java:156)
    at org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator.getResources(RMContainerAllocator.java:553)
    at org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator.heartbeat(R

    [回复]

  • 6楼Adi 回复

    Post: 2014-04-23 08:08

    董兄你好,上面讲到

    总结起来,ContainerAllocator工作流程如下:

    步骤3 如果为某个task申请到了资源,则取消其他重复资源的申请。由于在HDFS中,任何一个任务通常有三备份,而对于一个任务而言,考虑到rack和any级别的本地性,它可能会对应7个资源请求,分别是:

    一旦该任务获取了以上任何一种资源,则会取消其他6个的资源申请。

    请问这七个请求是一次性发起到吗?

    [回复]

    Dong 回复:

    一起发送。

    [回复]

  • 7楼Adi 回复

    Post: 2014-04-23 13:36

    嗯嗯,谢谢

    [回复]

  • 8楼zaifendou 回复

    Post: 2014-08-13 12:04

    我们有这样的一个需求就是所有的mr任务都不能在 A B C三个节点上运行,而其他的任务比如storm等任务则可以没有要求,我们用的hadoop2.x,请问该怎么配置,谢谢!

    [回复]

  • 9楼涛哥 回复

    Post: 2014-09-23 02:24

    董学长,你好, 看到你的博客,受益匪浅,我这里遇到了一个问题, 就是ContainerAllocator会打印出错误日志:Container complete event for unknown container id XXX. 我看了一下代码,感觉应该是ContainerAllocator在申请资源时,resourceManager会多返回container,然后ContainerAllocator会将目前不需要的container返回给resourceManager回收,但是当resourceManager回收完毕之后,会给ContainerAllocator发送一个容器结束的事件,这时,由于ContainerAllocator并没有保存这个容器的引用,所以就会打印上面的错误日志。请问这个问题有什么解决方法吗?

    [回复]

    涛哥 回复:

    错误出现的位置是:“org.apache.hadoop.mapreduce.v2.app.rm.RMContainerAllocator.getResources():622”。

    [回复]

  • 10楼hitbugger 回复

    Post: 2014-10-29 08:33

    董老师您好:

    是否可以这样理解:
    每个job都有一个四元组描述,描述了优先级、期望所在运行的hosts,以及一共需要多少个containers。ResourceManager会根据每个job的四元组描述符决定让哪个job运行,
    之后,job运行每一个task的时候,同样也要发送这个task的四元组描述(可能是上面描述的7个

    ),当其中任何一个满足后,该task执行,
    后续的task也发送类似的四元组去申请资源并执行

    [回复]

  • 11楼何必帅 回复

    Post: 2015-01-15 07:16

    董哥,三个备份,一个task为什么会发送7个资源申请呢?

    [回复]

  • 12楼牛妖怪 回复

    Post: 2015-06-14 03:12

    董老师您好!
    看到您上面举例的为mapper发送7个资源申请的例子,要考虑数据本地化的因素,以减少网络中传输的数据量。
    我想问下reducer的资源申请是什么样的情况呢?如果把reducer分配到和mapper相同的节点上,应该也能减少一定的网络流量吧?

    [回复]

  • 13楼牛妖怪 回复

    Post: 2015-06-14 03:19

    董老师您好!
    看到您上面举例的为mapper发送7个资源申请的例子,要考虑数据本地化的因素,以减少网络中传输的数据量。
    我想问下最新版的hadoop中,reducer的资源申请是什么样的情况呢?如果把reducer分配到和mapper相同的节点上,应该也能减少一定的网络流量吧?

    [回复]

发表评论