CDH YARN ResourceManager HA 支持

https://blueprints.launchpad.net/sahara/+spec/cdh-ha-support

此蓝图旨在为 Cloudra 插件实现 YARN ResourceManager (RM) 高可用性 (HA)。

问题描述

目前 Cloudera 插件不支持 YARN ResourceManager 的 HA。因此,我们计划实现 RM HA。

提议的变更

RM HA 的实现将通过 CM API enable_rm_ha() 进行。此 API 将通过提供一些信息增强来帮助我们启用 ResourceManager HA。

为了实现 RM HA,我们需要在集群模板的节点中添加一个备用 NodeManager(Cloudera 插件仅支持一个备用 NodeManager,而其他实现可能允许 >1 个备用 NodeManager)。当 RM HA 启用时,我们将启动主 NodeManager 和备用 NodeManager,让主 NodeManager 处于活动状态,并将备用 NodeManager 保持待机状态。

CM API enable_rm_ha 接受一个新的 ResourceManager 主机 new_rm_host_id 作为参数。将在 new_rm_host_id 节点上启动一个备用 ResourceManager。

ResourceManager HA 需要将主 ResourceManager 和备用 ResourceManager 角色部署在不同的物理主机上。还需要 Zookeeper 服务。

当 ResourceManager HA 启用时,Oozie 或依赖 RM 的应用程序应该能够检查所有可用的 RM 并自行获取活动 RM。没有办法在 RM 之间自动平滑切换。

总而言之,我们将如下实现 RM HA

  • 添加一个角色 YARN_STANDBYRM。

  • 如果用户(集群管理员)选择了 YARN_STANDBYRM,则将启用 YARN RM HA。

  • 如果启用了 RM HA,我们将检查反亲和性,以确保 YARN_STANDBYRM 和 YARN_RESOURCEMANAGER 不在同一物理主机上。

  • 如果启用了 RM HA,则集群中需要 Zookeeper 服务。

  • 如果启用了 RM HA,我们将创建具有 ResourceManager 的集群,ResourceManager 位于分配了 YARN_RESOURCEMANAGER 角色的节点上。

  • 如果启用了 RM HA,在集群启动后,我们将调用 enable_rm_ha 以使用 YARN_STANDBYRM 节点作为参数来启用 RM HA。

应该注意的是,如果启用了 HA,在 Oozie workflow xml 文件中,我们需要在 get_resource_manager_uri 方法中检测活动 ResourceManager,并在每次使用它时将其传递给 Oozie。我计划在后续补丁中包含这部分代码。

替代方案

无。

数据模型影响

无。

REST API 影响

无。

其他最终用户影响

无。

部署者影响

无。

开发者影响

无。

Sahara-image-elements impact

无。

Sahara-dashboard / Horizon 影响

无。

实现

负责人

主要负责人

Ken Chen

工作项

更改将仅在 sahara/plugins/cdh 目录中进行。目前,我们仅基于 CDH 5.4.0 执行此操作。CDH 5.0.0 和 CDH 5.3.0 插件将不受支持。Proposed change 部分描述了更改。

依赖项

无。

测试

我们只会进行基本检查:创建一个具有 RM HA 的 Cloudera 集群,并查看它是否处于活动状态。

文档影响

需要更新文档,其中包含有关启用 CDH YARN ResourceManager HA 的信息。

参考资料

  • 配置 ResourceManager (MRv2/YARN) 的高可用性 <http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_hag_rm_ha_config.html/>