首先,我使用的是Hadoop-2.6.0。我想在YARN群集中的特定节点上启动我自己的app master,以便在预定的IP地址和端口上打开服务器。为此,我编写了一个驱动程序,在其中我创建了一个 ResourceRequest 对象并调用 setResourceName 方法来设置主机名,并将其附加到 ApplicationSubmissionContext 通过调用 setAMContainerResourceRequest 方法对象。
我尝试过几次,但无法在特定节点上启动应用程序主服务器。搜索完代码后,我发现 RMAppAttemptImpl 会使我在 ResourceRequest 中设置的内容无效,如下所示:
// Currently, following fields are all hard code,
// TODO: change these fields when we want to support
// priority/resource-name/relax-locality specification for AM containers
// allocation.
appAttempt.amReq.setNumContainers(1);
appAttempt.amReq.setPriority(AM_CONTAINER_PRIORITY);
appAttempt.amReq.setResourceName(ResourceRequest.ANY);
appAttempt.amReq.setRelaxLocality(true);
是否有另一种方法可以在Hadoop-2.6.0中的特定节点上为应用程序主机启动容器?
答案 0 :(得分:1)
ApplicationSubmissionContext提供了一个函数setAMContainerResourceRequest,您可以在其中传递ResourceRequest对象,在ResourceRequest对象中,您可以设置“false”RelaxLocality标志,该标志告诉ResourceManager应用程序是否需要本地化松散(即允许直通到机架或任何)或严格(即指定资源分配的硬约束)。然后使用setResourceName设置主机名。我希望它有所帮助!