首先,我使用的是hadoop-2.6.0。我想在yarn集群中的特定节点上启动自己的appmaster,以便在预定的ip地址和端口上打开服务器。为此,我编写了一个驱动程序,其中创建了一个resourcerequest对象并调用setresourcename方法来设置主机名,然后通过调用setamcontainerresourcerequest方法将其附加到applicationsubmissioncontext对象。
我尝试了好几次,但无法在特定节点上启动app master。在搜索代码之后,我发现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中,是否有其他方法可以在特定节点上启动应用程序主服务器的容器?
1条答案
按热度按时间voase2hg1#
applicationsubmissioncontext提供了一个函数setamcontainerresourcerequest,您可以在其中传递resourcerequest对象,在resourcerequest对象中,您可以设置“false”relaxlocality标志,它告诉resourcemanager应用程序希望局部性是松散的(即允许通过机架或任何机架)还是严格的(即指定资源分配的硬约束)。然后使用setresourcename设置主机名。希望有帮助!