为什么当 运行 HA HDFS 和 MR1 时自动故障转移中断?

Why does automatic failover break when running both HA HDFS and MR1?

我正在重新配置 Hadoop 集群,以便为共享文件系统和 MR1 jobtracker 使用高可用性 (HA) 功能。

我似乎无法让两者同时工作的自动故障转移功能。相反,其中一项服务卡在了两个(所有)守护进程都处于待机状态的状态。

如何让自动故障转移适用于我的所有 HA 服务?

我正在使用:

namenode 和 jobtracker 共享相似的 HA 实现,以至于它们都扩展了相同的基础 class。他们都使用后备 zookeeper 集群来决定哪个可用节点处于活动状态。

zookeeper 中使用的位置是通过将故障转移组名称(即 dfs.nameservicesmapred.job.tracker 中给出的值)附加到可配置前缀来构建的。

这两种服务的可配置前缀默认为 /hadoop-ha

这意味着如果两个服务配置了相同的故障转移组名称(例如,my-application),那么这两个服务使用的最终 zookeeper 路径将发生冲突。如果他们实际上使用同一个 zookeeper 集群,一个服务将不会获得 zookeeper 节点并且会破坏自动故障转移。

解决方法是避免碰撞。最简单的方法是确保 mapred-site.xml 中的 mapred.job.trackerhdfs-site.xml 中的 dfs.nameservices 不包含公共值。

人们还可以尝试在每个服务的基础上配置 /hadoop-ha 前缀。它由 ha.zookeeper.parent-znode 配置 属性.

控制

例如,在 hdfs-site.xml 中可能有:

<property>
  <name>ha.zookeeper.parent-znode</name>
  <value>/hdfs-ha</value>
</property>

...而 mapred-site.xml 包含:

<property>
  <name>ha.zookeeper.parent-znode</name>
  <value>/mapred-ha</value>
</property>

但是,注意在这个配置中hdfs-site.xmlmapred-site.xml不能同时加载:一个key的值会打败对方。

无论哪种方式,zookeeper 路径都会发生变化,需要相应的 -formatZK 命令重新 运行。