hadoop3 怎么配置高可用集群
时间: 2024-02-17 16:05:28 浏览: 185
Hadoop 3.x 中,可以通过配置 Hadoop HA(High Availability)实现高可用集群。
以下是配置 Hadoop HA 的基本步骤:
1. 配置 Hadoop 的 core-site.xml 文件,启用 HA:
```xml
<property>
<name>ha.zookeeper.quorum</name>
<value>zk1:2181,zk2:2181,zk3:2181</value>
<description>Quorum的Zookeeper服务地址</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
<description>默认文件系统</description>
</property>
<property>
<name>ha.zookeeper.session.timeout.ms</name>
<value>10000</value>
<description>Zookeeper会话超时时间</description>
</property>
```
其中,ha.zookeeper.quorum 配置 Zookeeper 的地址,fs.defaultFS 配置默认文件系统,ha.zookeeper.session.timeout.ms 配置 Zookeeper 会话超时时间。
2. 配置 Hadoop 的 hdfs-site.xml 文件,启用 NameNode HA:
```xml
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>nn1:8020</value>
<description>第一个NameNode的RPC地址</description>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>nn2:8020</value>
<description>第二个NameNode的RPC地址</description>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>nn1:50070</value>
<description>第一个NameNode的HTTP地址</description>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>nn2:50070</value>
<description>第二个NameNode的HTTP地址</description>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://jn1:8485;jn2:8485;jn3:8485/mycluster</value>
<description>QJM的Journal节点地址</description>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data1/dfs/journalnode,/data2/dfs/journalnode,/data3/dfs/journalnode</value>
<description>Journal节点的存储路径</description>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
<description>启用自动故障转移</description>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<description>启用sshfence作为fencing方法</description>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
<description>SSH私钥文件路径</description>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
<description>SSH连接超时时间</description>
</property>
```
其中,dfs.namenode.rpc-address.mycluster.nn1 和 dfs.namenode.rpc-address.mycluster.nn2 分别配置两个 NameNode 的 RPC 地址,dfs.namenode.http-address.mycluster.nn1 和 dfs.namenode.http-address.mycluster.nn2 分别配置两个 NameNode 的 HTTP 地址,dfs.namenode.shared.edits.dir 配置 JournalNode 的地址,dfs.journalnode.edits.dir 配置 JournalNode 存储路径,dfs.ha.automatic-failover.enabled 启用自动故障转移,dfs.ha.fencing.methods 配置 fencing 方法,dfs.ha.fencing.ssh.private-key-files 配置 SSH 私钥文件路径,dfs.ha.fencing.ssh.connect-timeout 配置 SSH 连接超时时间。
3. 配置 Hadoop 的 yarn-site.xml 文件,启用 ResourceManager HA:
```xml
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
<description>启用ResourceManager HA</description>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>mycluster</value>
<description>ResourceManager集群ID</description>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
<description>两个ResourceManager的ID</description>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>rm1</value>
<description>第一个ResourceManager的主机名</description>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>rm2</value>
<description>第二个ResourceManager的主机名</description>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>rm1:8088</value>
<description>第一个ResourceManager的Web地址</description>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>rm2:8088</value>
<description>第二个ResourceManager的Web地址</description>
</property>
```
其中,yarn.resourcemanager.ha.enabled 启用 ResourceManager HA,yarn.resourcemanager.cluster-id 配置 ResourceManager 集群 ID,yarn.resourcemanager.ha.rm-ids 配置两个 ResourceManager 的 ID,yarn.resourcemanager.hostname.rm1 和 yarn.resourcemanager.hostname.rm2 分别配置两个 ResourceManager 的主机名,yarn.resourcemanager.webapp.address.rm1 和 yarn.resourcemanager.webapp.address.rm2 分别配置两个 ResourceManager 的 Web 地址。
4. 启动 JournalNode:
```bash
hdfs --daemon start journalnode
```
5. 启动 NameNode:
```bash
hdfs namenode -format
start-dfs.sh
```
6. 启动 ResourceManager:
```bash
start-yarn.sh
```
7. 启动 ZKFC:
```bash
hdfs zkfc -formatZK
hdfs --daemon start zkfc
```
8. 验证 HA 配置是否生效:
```bash
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
```
如果输出为 active,则表示当前节点为 active 节点。
阅读全文