我正在使用 Yarn 框架开发一个长时间运行的服务。ApplicationMaster 代码只是分配并启动一些容器,让它们永远运行。AM 还会定期报告每个正在运行的容器的状态。AM 知道它分配的每个容器,并通过将它们显式存储到内存映射中来启动。
现在的问题是:在AM重新启动的情况下,即进行了新的应用尝试。新 AM 如何知道旧 AM 分配的所有正在运行的容器?新的 AM 需要这个,因为它需要报告它们的状态。
AMRMClient 显然没有此接口供 AM 获取其应用程序的容器列表。
AM(每个作业一个(是在 RM(每个群集一个(为该作业保留内存和 Vcore 后初始化的容器。 您是在谈论AM故障并且需要重新启动吗?如果是这样,那么新的AM将使用新容器开始新的尝试(它将失去与旧容器的连接(,并且由于NM(NodeManager(检测信号到RM(定期发生(,旧容器将在超时一段时间后释放。
关于代码,我不确定它是如何实现的。