在Hadoop 3中,可以通过配置Active/Standby模式的ResourceManager(RM)来实现类似双NameNode的功能。但是,Hadoop本身并没有内置支持双Active Namenode的功能。要实现类似的高可用性,你可以考虑使用像Apache ZooKeeper或者Quorum Journal Manager(QJM)这样的外部服务来协助管理Namenode的状态。
以下是一个简化的部署示例,使用ZooKeeper来实现双Namenode的高可用性。
- 安装和配置ZooKeeper集群。
- 配置Hadoop的
hdfs-site.xml
,使用QJM和ZooKeeper。 - 启动ZooKeeper集群。
- 格式化HDFS(第一次使用前)。
- 启动Namenodes,它们将通过ZooKeeper协商成为Active或Standby状态。
示例配置(hdfs-site.xml
):
<configuration>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>nn1-host:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>nn2-host:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>nn1-host:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>nn2-host:9870</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/path/to/journal/node/data</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/path/to/ssh/private/key</value>
</property>
<!-- additional properties for ZKFC, the HA service -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/path/to/ssh/private/key</value>
</property>
</configuration>
确保你的环境中安装了SSH服务,并且配置了SSH无密码登录,以便ZKFC可以在必要时切换Namenode。
这个配置只是一个基本示例,根据你的具体环境和需求,可能需要调