启用 HDP 2.0.6 插件的 HDFS NameNode 高可用性

https://blueprints.launchpad.net/sahara/+spec/hdp-plugin-enable-hdfs-ha

扩展 HDP 2.0.6 插件,以便在创建、配置和启动集群后,包含 HDFS NameNode 高可用性的设置和配置。

问题描述

Hadoop 集群使用单个 NameNode 创建,这代表了一个 SPOF(单点故障)。如果 NameNode 变得不可用,整个集群将变得不可用,并且我们必须等待 NameNode 恢复才能再次使用该集群。NameNode 高可用性是在 Hadoop 2.0.0 中引入的,并从 2.0.0 版本开始集成到 HDP 中。高可用性是通过拥有 2 个 NameNode 实现的,一个活动 NameNode 和一个待机 NameNode。当活动 NameNode 失败时,待机 NameNode 会接管并充当集群的 NameNode。可以通过 Ambari 在使用 HDP 2.0.6 插件在 Sahara 中部署的集群上手动配置 NameNode 的高可用性,但该过程漫长、繁琐且容易出错。

最终用户可能不具备设置高可用性所需的技能,部署者可能更喜欢部署高度可用的集群,而无需手动配置每个集群。

HDFS NameNode 高可用性(使用 Quorum Journal Manager (QJM))使用 Journal 节点在活动和待机 namenode 之间共享 HDFS 编辑日志。Journal 节点确保两个 namenode 具有相同的 HDFS 编辑日志集,但不确保自动故障转移。自动故障转移需要 Zookeeper 服务器和 Zookeeper 故障转移控制器 (ZKFC)。使用 HDFS NameNode 高可用性的典型集群至少使用三个(或大于三个的奇数)journal 节点和具有三个或五个 zookeeper 服务器的 zookeeper 集群。Zookeeper 故障转移控制器安装在充当活动和待机 namenode 的服务器上。该设置删除了辅助 namenode(通常安装在与托管 namenode 不同的服务器上),并安装了第二个 namenode 进程。Journal 节点和 zookeeper 服务器可以安装在运行活动和待机(旧的辅助 namenode)namenode 的同一服务器上。这给我们留下了 2 个 journal 节点和 2 个 zookeeper 服务器。设置一个最小可行的高可用性 HDFS NameNode Hadoop 集群,只需要一个额外的服务器,该服务器上安装了 journal 节点和 zookeeper 服务器。(更多信息:https://hadoop.apache.org/docs/r2.3.0/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html

提议的变更

“创建节点组模板”向导将在 HDP 2.0.6 插件的可用进程列表中引入一个新的进程 ‘JOURNALNODE’。其他 HDFS HA 所需的进程要么已包含在列表中(NAMENODE、ZOOKEEPER_SERVER 和 SECONDARY_NAMENODE),要么将自动设置(Zookeeper 故障转移控制器)。

HDP 2.0.6 插件的“启动集群”向导将包含一个复选框“启用 HDFS HA”。此选项默认为 False,并将添加到集群对象中。

验证代码将验证 Hadoop 集群的必要要求,以及在设置“启用 HDFS HA”为 True 的情况下的额外要求。这些要求包括:NAMENODE 和 SECONDARY_NAMENODE 位于不同的服务器上 至少三个 journal 节点位于不同的服务器上 至少三个 zookeeper 服务器位于不同的服务器上

验证成功后,将创建集群,并且一旦处于“活动”状态,如果“启用 HDFS HA”为 True,该服务将指示插件开始配置 NameNode 高可用性。集群将被设置为“配置 HDFS HA”状态,插件将开始配置过程。该过程首先通过插件停止所有服务,并通过 hadoopserver 对象在具有 namenode 进程的服务器上执行一些准备命令。然后,插件使用 Ambari REST API(POST、PUT、WAIT ASYNC)安装和启动 journal 节点。接下来,使用 Ambari REST API(PUT)更新配置,如果安装了 Hive、Oozie 和 Hue 等其他服务,则可能需要更新配置。最后,在 namenode 和 Zookeeper 故障转移控制器上执行更多远程命令,并删除 SECONDARY_NAMENODE 进程。插件将返回,集群将恢复到“活动”状态。

替代方案

通过 Ambari Web 界面手动设置

数据模型影响

REST API 影响

其他最终用户影响

部署者影响

开发者影响

HDP 插件后续版本的开发人员应考虑到此选项和添加的功能。由于它使用 Ambari 的 API,而 Ambari 的 API 在较新的版本中保持不变,因此该过程不太可能在 HDP 的较新版本中发生变化。

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

当用户选择 HDP 2.0.6 插件时,“启动集群”向导中的一个复选框“启用 HDFS HA”。

实现

负责人

主要负责人

abbass-marouni

工作项

  • 添加一个新的集群级别配置属性,以指示是否启用了 HA。

  • 为 Journal 节点和 Zookeeper 故障转移控制器添加新的服务类到 HDP 2.0.6

  • 为远程命令添加新的远程方法到 hdp hadoopserver.py

  • 添加新的方法来根据集群配置生成新的配置

依赖项

测试

单元测试服务类 单元测试新的集群规范 集成测试具有 HA 的集群创建 集成测试不具有 HA 的集群创建

文档影响

更新文档以反映新的更改并解释新的选项。

参考资料