1

我没有得到太多关于 Unmanaged AM 工作的信息。我只知道它的基本定义,但仍然不确定他们的管理是如何完成的以及由谁完成的?

同样在 apache 文档中,提到了(作业执行流程中的第 8 点)-“基于策略,AMRMProxy 可以通过提交非托管 AM 并将 AM 心跳转发到相关子集群来模拟其他子集群上的 AM a. 联邦支持使用 AMRMProxy HA 进行多次应用程序尝试。AM 容器在主子集群中将具有不同的尝试 id,但将在辅助节点中使用相同的 Unmanaged AM。b. 启用 AMRMProxy HA 时,UAM 令牌将存储在 Yarn Registry 中。在每次应用程序尝试的 registerApplicationMaster 调用中,AMRMProxy 将从注册表(如果有)获取现有的 UAM 令牌并重新附加到现有的 UAM

提前感谢您的详细解释。

4

1 回答 1

1

UAM 是在https://issues.apache.org/jira/browse/YARN-420中引入的。最初的目的是

通过允许客户端独立启动 AM 而不需要 RM,这将是一个有用的改进来增强此模型。这些 AM 将在可以与集群对话的网关机器上启动。这将开辟新的用例,例如以下

1) 易于调试 AM,特别是在初始开发期间。在任意集群节点上启动 AM 会使查看日志或将调试器附加到 AM 变得困难。如果它可以在本地启动,那么这些任务会更容易。

2) 运行需要特殊权限的 AM,这些权限在 NodeManager 管理的机器上可能不可用

现在 UAM 在 Yarn federation 的设计中也扮演着重要的角色。以你引用的方式。

AMRMProxy 可以通过提交非托管 AM 并将 AM 心跳转发到相关子集群来模拟其他子集群上的 AM。

这个想法很简单。在联邦中,在应用程序提交后(在主子集群中)只创建一个“真正的”AM。然而,为了在其他(辅助)子集群中分配任务容器,应用程序需要辅助子集群中的 AM 与它们的 RM 通信。纱线联合通过在子集群中注册 UAM 来解决这个问题,该子集群的工作只是转发allocate心跳。

你可以看一下代码

FederationInterceptor
    sendRequestsToResourceManagers()

UnmanagedAMPoolManager
UnmanagedApplicationManager
于 2019-03-02T21:44:42.023 回答