我正在重新配置Hadoop集群,以便为共享文件系统和MR1作业跟踪器使用高可用性(HA)功能。
似乎我无法获得两者同时工作的自动故障转移功能。相反,其中一个服务卡在待用的两个(所有)守护进程中。
如何让自动故障转移适用于我的所有HA服务?
我正在使用:
答案 0 :(得分:0)
namenode和jobtracker共享一个类似的HA实现,只要它们都扩展了相同的基类。它们都使用后备zookeeper集群来决定哪个可用节点处于活动状态。
zookeeper中使用的位置是通过将故障转移组名称(即dfs.nameservices
和mapred.job.tracker
中给出的值)附加到可配置前缀来构建的。
对于这两种服务,默认情况下可配置前缀为/hadoop-ha
。
这意味着如果两个服务配置了相同的故障转移组名称(例如,my-application
),则两个服务使用的最终zookeeper路径将发生冲突。如果它们实际上使用相同的zookeeper集群,则一个服务将无法获得zookeeper节点并且已经破坏了自动故障转移。
解决方案是避免碰撞。最简单的方法是确保mapred.job.tracker
中的mapred-site.xml
和dfs.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.xml
和mapred-site.xml
无法同时加载:一个键的值将破坏另一个键。< / p>
无论哪种方式,zookeeper路径都会发生变化,需要重新运行相应的-formatZK
命令。