HDFS 和 YARN 的 HA 故障切换

 

HDFS 和 YARN 的 HA 故障切换

  662人阅读  评论(0)  收藏  举报

目录(?)[+]


一. 非 HDFS HA 集群转换成 HA 集群

1. 分别启动所有的 journalnode 进程,在其中一台 NameNode 上完成即可(比如 NameNode1)

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HADOOP_HOME</span>/sbin/hadoop<span class="hljs-attribute" style="box-sizing: border-box;">-daemon</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>sh start  journalnode</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

2. 在 NameNode1上对 journalnode 的共享数据进行初始化,然后启动 namenode 进程

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HADOOP_HOME</span>/bin/hdfs namenode <span class="hljs-attribute" style="box-sizing: border-box;">-initializeSharedEdits</span>
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HADOOP_HOME</span>/sbin/hadoop<span class="hljs-attribute" style="box-sizing: border-box;">-daemon</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>sh start  namenode</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

3. 在 NameNode2 上同步 journalnode 的共享数据,和 NameNode 上存放的元数据,然后启动 namenode 进程

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HADOOP_HOME</span>/bin/hdfs namenode  <span class="hljs-attribute" style="box-sizing: border-box;">-bootstrapStandby</span>
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HADOOP_HOME</span>/sbin/hadoop<span class="hljs-attribute" style="box-sizing: border-box;">-daemon</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>sh start  namenode</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

4. 在其中一台 NameNode 上启动所有的 datanode 进程

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HADOOP_HOME</span>/sbin/hadoop<span class="hljs-attribute" style="box-sizing: border-box;">-daemon</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>sh  start datanode</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>



二. HDFS 的 HA 自动切换命令

这里写图片描述


说明: 为了更加通俗的说明,笔者将两台运行 namenode 进程的主机名抽象为 NameNode1 和 NameNode2,笔者更倾向 NameNode1 上的运行的是 active 状态的 namenode 进程,NameNode2 上的运行的是 standby状态的 namenode 进程,而实际操作中,master5 就是这个 NameNode1 ,master52 就是这个 NameNode2。

抽象主机名 实际操作主机名 初始状态 理想稳定状态
NameNode1 master5 standby active
NameNode2 master52 standby standby

2.1 获得当前 NameNode 的 active 和 standby 状态

当未启动 ZK 服务时,发现两个 NameNode 都是 standby 的状态,通过以下命令可以查得:

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">hdfs haadmin <span class="hljs-attribute" style="box-sizing: border-box;">-getServiceState</span> master5
hdfs haadmin <span class="hljs-attribute" style="box-sizing: border-box;">-getServiceState</span> master52</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

2.2 NameNode 的 active 和 standby 状态切换

根据集群是否已经在 hdfs-site.xml 中设置了 dfs.ha.automatic-failover.enabled 为 true (即自动故障状态切换)来分两种情况

1. 未设置自动故障切换 (false)

确定要转为 active 状态的主机名,这里将 NameNode1 设为 active,使用命令行工具进行状态切换:

<code class="hljs brainfuck has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">hdfs</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">haadmin</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">failover</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">forcefence</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">forceactive</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">NameNode2</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">NameNode1</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

此处 “NameNode2 NameNode1” 的顺序表示 active 状态由 NameNode2 转换到 NameNode1 上(虽然 NameNode2 在转化前也是 standby 状态)。

有时候,当我们系统中 NameNode2 出现故障了,就可以利用上一步中把 NameNode1 的状态切换为active 后,系统自动把 NameNode2 上的 namenode 进程关闭,再把错误原因排除后重启该 namenode进程,启动后该 namenode 状态为 standby,等待下一次 NameNode1 出现故障时即可将 NameNode2 状态切换为 active。


亦或者使用以下命令将 NameNode1 主机上的 namenode 状态切换到 active 或 standby 状态

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">hdfs haadmin <span class="hljs-attribute" style="box-sizing: border-box;">-transitionToActive</span> NameNode1 
hdfs haadmin <span class="hljs-attribute" style="box-sizing: border-box;">-transitionToStandby</span> NameNode1  </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

但是需要注意的是这两个命令不会尝试运行任何的 fence,因此不应该经常使用。应该更倾向于用 hdfs haadmin -failover 命令。


2. 设置自动故障切换 (true)

如果执行下面命令,则会报错

<code class="hljs brainfuck has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">hdfs</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">haadmin</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">failover</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">forcefence</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">-</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">forceactive</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">NameNode2</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">NameNode1</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

错误信息:

forcefence and forceactive flags not supported with auto-failover enabled.

若要手工切换其中一个 NameNode 节点的 Active 状态改变为 Standby 状态,将另一个 NameNode 节点的 Standby 状态改变为 Active 状态,则可以kill -9 <pid of NN> 来杀死当前 Active 状态的 NameNode 上的 namenode 进程号,此时发现另一个 NameNode 节点就由 Standby 状态改变为 Active 状态,这个时候在重启被杀死进程的 NameNode 上的 namenode 进程,此时就成为了 Standby 状态,切换成功!

假设此时 master52 上 namedode 是 active 状态,而 master5 上 namenode 是 standby 状态,下图呈现了该过程:

这里写图片描述

另外一种方法就是,关闭当前为 active namenode 状态的上的 DFSZKFailoverController 进程(这个方法可靠性有待考察…)

<code class="hljs vbnet has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">hadoop-daemon.sh <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">stop</span> zkfc</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

此时,active 状态的 namenode 立刻更变为 standby 状态,另一个 standby 状态的 nameNode 立刻更变为 active 状态,如下图所示:

这里写图片描述

当继续关闭了另一个 namenode 的 zkfc 服务之后,它依旧是 active 状态,且两个 namenode 仍然正常工作!

在经过上述之后,master5 的 namenode 变为了 standby ,如果通过它提供的命令转化为 active 会怎样?失败了呗,看英文解释吧…

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">hdfs haadmin <span class="hljs-attribute" style="box-sizing: border-box;">-transitionToActive</span> master5</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

这里写图片描述

更多命令可以通过 help 查看,更多详细解释请看 管理员命令

<code class="hljs mel has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">hdfs haadmin -<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">help</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

这里写图片描述

其中 checkHealth 检查 NameNode1 的状态。正常就返回 0,否则返回非 0 值。

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">hdfs haadmin <span class="hljs-attribute" style="box-sizing: border-box;">-checkHealth</span> NameNode1</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

关键人家官网也说了,这个功能还没有实现,现在将总是返回 success,除非给定的 NameNode 完全关闭。


2.3 HDFS HA自动切换比手工切换多出来的步骤

  • 配置文件 core-site.xml 增加了配置项 ha.zookeeper.quorum(zk集群的配置)

  • 配置文件 hdfs-site.xml 中把 dfs.ha.automatic-failover.enabled 改为true

  • 操作上格式化 zk,执行命令 bin/hdfs zkfc -formatZK

  • 在两个 NameNode 上启动 zkfc,执行命令 sbin/hadoop-daemon.sh start zkfc



三. ResourceManager 的 HA 自动切换命令

这里写图片描述


说明: 为了更加通俗的说明,笔者将两台运行 resourcemanager 进程的主机名抽象为 RM1 和 RM2,笔者更倾向 RM1 上的运行的是 active 状态的 resourcemanager 进程,RM2 上的运行的是 standby 状态的 resourcemanager 进程,而实际操作中,master5 就是这个 RM1 ,master52 就是这个 RM2。

抽象主机名 实际操作主机名 初始状态 理想稳定状态 ha-id
RM1 master5 active active rm1
RM2 master52 standby standby rm2


其中关于 ha-id 是在 yarn-site.xml 配置文件中设置的。

这里写图片描述

hadoop也为管理员提供了 CLI 的方式管理 RM HA,但在没有启用 HA 的情况下,也就是在 yarn-site.xml 配置文件中没有设置yarn.resourcemanager.ha.enabled 为 true 时 (默认为false,不启用),下面的命令是不可用的。


3.1 获得当前 RM 的 active 和 standby 状态

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">yarn rmadmin <span class="hljs-attribute" style="box-sizing: border-box;">-getServiceState</span> rm1
yarn rmadmin <span class="hljs-attribute" style="box-sizing: border-box;">-getServiceState</span> rm2</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

3.2 RM 的 active 和 standby 状态切换

根据集群是否已经在 yarn-site.xml 中设置了 yarn.resourcemanager.ha.automatic-failover.enabled 为 true (即自动故障状态切换)来分两种情况

1. 未设置自动故障切换 (false)

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">yarn rmadmin <span class="hljs-attribute" style="box-sizing: border-box;">-transitionToStandby</span> rm1
yarn rmadmin <span class="hljs-attribute" style="box-sizing: border-box;">-transitionToActive</span> rm2</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

2. 设置自动故障切换 (true)

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">yarn rmadmin <span class="hljs-attribute" style="box-sizing: border-box;">-transitionToStandby</span> rm1
yarn rmadmin <span class="hljs-attribute" style="box-sizing: border-box;">-transitionToActive</span> rm2</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

这里写图片描述

显而易见,失败了。如果需要手工切换,这时候可以

  • kill -9 <pid of RM> 杀掉 active 状态的 RM 的 resourcemanager 进程
  • 或关闭 active 状态的 RM 的 resourcemanager 进程
<code class="hljs vbnet has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">yarn-daemon.sh <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">stop</span> resourcemanager</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

然后再重启 RM 的 resourcemanager 进程

<code class="hljs sql has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">yarn-daemon.sh <span class="hljs-operator" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">start</span> resourcemanager</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

此时就可以成功切换状态了…


3.3 yarn rmadmin 所支持的命令

更多命令可以通过 help 查看

<code class="hljs mel has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">yarn rmadmin -<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">help</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

这里写图片描述

其中列出的 -failover 选项,yarn rmadmin 不支持此选项。更多详细解释请看 使用 yarn rmadmin 管理 ResourceManager HA


3.4 YARN HA自动切换比手工切换多出来的步骤

  • 配置文件 yarn-site.xml 中把 yarn.resourcemanager.ha.automatic-failover.enabled 改为 true。该属性的含义是:是否启用自动故障转移。默认情况下,在启用 HA 时,启用自动故障转移
  • 配置文件 yarn-site.xml 中把 yarn.resourcemanager.ha.automatic-failover.embedded 改为 true。启用内置的自动故障转移。默认情况下,在启用 HA 时,启用内置的自动故障转移



四. HDFS HA 故障切换后欲恢复原 active NameNode 步骤

假设原本是 active NameNode 的 master5 的主机因为某种突发情况而失效了,此时之前处于 standby 的 master52 变为了 active 继续承担 namenode 的责任。 一段时间后, master5 恢复正常了,但只能是 standby 的状态。这时若想将 master5 恢复成 active ,该如何做呢?以下是笔者自己总结的,准确性有待商榷…

在 Journal 和 QuorumPeerMain 进程正常启动的情况下

  • 将所有的 datanode 进程关闭,将 master5 上的 namenode 进程也关闭
  • 在 master5 上执行 hdfs namenode -bootstrapStandby
  • 再将 master52 上重启 namenode 进程, OK 了
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值