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

YARN/MRv2 Resource Manager深入剖析—资源调度器

Category: hadoop 2.0之YARN View: 15,343 Author: Dong
, , , ,

  • 评论 (5)
  • 引用通告 (2)
发表评论 发起引用

  • 1楼realwangx 回复

    Post: 2013-03-20 03:42

    您好:
    关于yarn.nodemanager.vcores-pcores-ratio,您的解释为:“为了更细粒度的划分CPU资源,YARN将每个物理CPU划分成若干个虚拟CPU,用户提交应用程序时,需指定每个任务需要的虚拟CPU个数,该值默认为2。”

    查阅了2.0.3的代码和文档,文档中的解释是“Ratio between virtual cores to physical cores when allocating CPU resources to containers.”,代码中的注释是“Conversion ratio for physical cores to virtual cores”

    在NodeManager初始化时,会将当前节点Resouce资源增加到整个集群,cpu的计算是通过以下代码完成
    int cpuCores =
    conf.getInt(
    YarnConfiguration.NM_VCORES, YarnConfiguration.DEFAULT_NM_VCORES);
    float vCoresToPCores =
    conf.getFloat(
    YarnConfiguration.NM_VCORES_PCORES_RATIO,
    YarnConfiguration.DEFAULT_NM_VCORES_PCORES_RATIO);
    int virtualCores = (int)Math.ceil(cpuCores * vCoresToPCores);

    this.totalResource = recordFactory.newRecordInstance(Resource.class);
    this.totalResource.setMemory(memoryMb);
    this.totalResource.setVirtualCores(virtualCores);

    因此,对于“yarn.nodemanager.vcores-pcores-ratio”更准确的描述应该是”节点CPU物理核数到虚拟核数的转换比例”,比如我的某台机器物理cpu颗数=2、物理核数=8、超线程数=32,这时候,yarn.nodemanager.vcores-pcores-ratio设置为4是比较合理的数字。

    您在文中提到“用户提交应用程序时,需指定每个任务需要的虚拟CPU个数,该值默认为2”,我翻阅了代码,一直没有找到对应的注释、说明、代码片段,,望能进一步给予说明,,谢谢

    [回复]

    Dong 回复:

    我表述有误,已经修改。

    [回复]

    咚冬小瓜 回复:

    你好,想问一下,有8台机器,32个虚拟内核,128GB的内存yarn.nodemanager.vcores-pcores-ratio该怎么配置呀

    [回复]

  • 2楼那闯 回复

    Post: 2013-04-25 02:24

    2013-04-25 10:15:28,252 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

    你好,楼主。
    很多blog中关于job调度都会说,默认时使用的FIFO Scheduler,但我在没有配置Capacity的情况下,为什么会显示如上的log,默认的情况真的会用FIFO吗?
    我用的hadoop版本是2.0.3, yarn-site.xml如下:

    yarn.resourcemanager.address
    mcw-cc-nachuang:9080

    yarn.resourcemanager.scheduler.address
    mcw-cc-nachuang:9081

    yarn.resourcemanager.resource-tracker.address
    mcw-cc-nachuang:9082

    yarn.nodemanager.aux-services
    mapreduce.shuffle

    yarn.nodemanager.aux-services.mapreduce.shuffle.class
    org.apache.hadoop.mapred.ShuffleHandler

    yarn.nodemanager.vmem-pmem-ratio
    6

    yarn.nodemanager.resource.memory-mb
    10240

    <!–
    yarn.resourcemanager.scheduler.class
    org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

    –>

    [回复]

  • 3楼那闯 回复

    Post: 2013-04-25 02:57

    还是说fifo其实是在capacity之中的一个实现。

    [回复]

    Dong 回复:

    这个跟版本有关,在2.0.2-alpha版本的时候,有人汇报了一个fifo调度器的bug,社区暂时把,默认调度器切换成capacity了,具体参考:https://issues.apache.org/jira/browse/YARN-137

    [回复]

    那闯 回复:

    哦, 原来如此,
    谢谢你。

    [回复]

  • 4楼肥皂 回复

    Post: 2013-07-15 13:14

    董前辈。您好。非常感谢您的分享。我对资源分配机制有一点疑问。

    hadoop在ipc中的server端使用了reactor模式来处理进程间通信。在handler方面,假如handler的数量为10,同一时刻有20个资源请求任务过来,那么所有的handler都会去处理资源请求任务,但是hadoop的资源分配仅在有heartbeat信息过来时才能进行资源分配,此时已经没有空闲的handler能够去处理heartbeat信息了,同时导致那10个handler处理资源请求的任务也不能完成。这样岂不是死锁了。hadoop在这方面有什么预防死锁的机制吗?

    期待您的回复。谢谢。

    [回复]

    Dong 回复:

    heartbeat也是你所说的资源请求,handler每次处理一个资源请求,处理完一个再处理下一个,每个请求处理时间最好不要太长(Hadoop尽量避免这一点,每个请求处理时间很短),不然后面的就阻塞了,严重时,可能会导致后面的超时。

    [回复]

  • 5楼einstein 回复

    Post: 2013-12-30 09:06

    师兄,

    你这里提到的用线程监控的方式来做memory管理,能否给个jira的链接呢?(找了很久都没有找到相关的链接:( )

    [回复]

    Dong 回复:

    https://issues.apache.org/jira/browse/HADOOP-3581

    [回复]

发表评论