纱线资源管理器在请求具有不同资源的容器时没有分配容器 [英] Yarn Resource Manage didn't allocate containers when asking for containers with different resources

查看:17
本文介绍了纱线资源管理器在请求具有不同资源的容器时没有分配容器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在应用程序主机中使用了同步AMRMClient,使用AMRMClient的addContainerRequest方法添加容器请求,使用AMRMClient的getMatchingRequest和emoveContainerRequest方法删除容器请求。然而,当程序添加具有不同资源容器请求时,资源管理器不再为应用主机分配任何资源,从而导致死锁。有没有人曾经遇到过这样的问题?

推荐答案

相同优先级的容器请求目前应该有相同的资源要求。解决此问题的一种方法是使用具有不同优先级的不同资源要求。JIRA问题YARN-314对此有更多讨论。


以下详细的代码分析适用于Hadoop 2.7.3。

问题的关键在于AppSchedulingInfo,它根据优先级和资源名称组织所有请求:

final Map<Priority, Map<String, ResourceRequest>> requests

因此,对于任何给定的优先级和资源名称,您只能有一个ResourceRequest,它包含优先级、CPU、内存要求和容器数量。

AMRMClientImpl中,容器请求保存在以下数据结构中:

class ResourceRequestInfo {
    ResourceRequest remoteRequest;
    ...
}

Map<Priority, Map<String, TreeMap<Resource, ResourceRequestInfo>>> remoteRequestsTable;

因此,对于具有不同资源需求的相同优先级和资源名称,您最终得到不同的ResourceRequest

当AM为相同的资源需求调用AMRMClientImpl.addContainerRequest时,它会增加以前创建的ResourceRequest实例中的容器数量。当为相同的优先级和资源名称添加不同的资源需求时,您最终会得到不同的ResourceRequest实例,但只有最后一个实例将保留在AppSchedulingInfo中以供调度。这就是容器请求将丢失且从未分配的原因。

这篇关于纱线资源管理器在请求具有不同资源的容器时没有分配容器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆