在YARN群集中的特定节点上运行我自己的应用程序主服务器

时间:2015-03-27 14:08:58

标签: hadoop containers yarn

首先,我使用的是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中的特定节点上为应用程序主机启动容器?

1 个答案:

答案 0 :(得分:1)

ApplicationSubmissionContext提供了一个函数setAMContainerResourceRequest,您可以在其中传递ResourceRequest对象,在ResourceRequest对象中,您可以设置“false”RelaxLocality标志,该标志告诉ResourceManager应用程序是否需要本地化松散(即允许直通到机架或任何)或严格(即指定资源分配的硬约束)。然后使用setResourceName设置主机名。我希望它有所帮助!