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

时间:2015-05-06 02:48:40

标签: hadoop cloudera cloudera-cdh

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

似乎我无法获得两者同时工作的自动故障转移功能。相反,其中一个服务卡在待用的两个(所有)守护进程中。

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

我正在使用:

  • Cloudera CDH 4.5.0
  • JDK 7
  • Ubuntu 12.04
  • ......没有Cloudera Manager

1 个答案:

答案 0 :(得分:0)

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

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

对于这两种服务,默认情况下可配置前缀为/hadoop-ha

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

解决方案是避免碰撞。最简单的方法是确保mapred.job.tracker中的mapred-site.xmldfs.nameservices中的hdfs-site.xml不包含常用值。

还可能尝试在每个服务的基础上配置/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无法同时加载:一个键的值将破坏另一个键。< / p>

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