温馨提示×

Ubuntu Hadoop 高可用性如何设置

小樊
47
2025-09-29 21:48:14
栏目: 智能运维

Ubuntu环境下Hadoop高可用性(HA)配置指南
Hadoop高可用性(HA)通过主备NameNodeJournalNodeZooKeeper等组件解决单点故障问题,确保集群在节点宕机时仍能提供服务。以下是Ubuntu系统下的详细配置步骤:

一、环境准备

  1. 基础环境:至少4台Ubuntu服务器(如node1~node4),安装JDK 8apt install openjdk-8-jdk),配置静态IP主机名映射/etc/hosts文件)。
  2. SSH无密登录:在所有节点间生成SSH密钥并分发公钥(ssh-keygen -t rsassh-copy-id user@nodeX),确保节点间可免密访问。
  3. ZooKeeper集群:部署3或5节点ZooKeeper集群(奇数节点避免脑裂),启动后验证状态(zkServer.sh status)。

二、Hadoop核心配置

1. 配置core-site.xml

设置HDFS的默认文件系统和ZooKeeper地址,所有节点均需配置:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value> <!-- 集群逻辑名称,需与hdfs-site.xml一致 -->
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>zk1:2181,zk2:2181,zk3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
</configuration>

2. 配置hdfs-site.xml

定义NameNode HA、JournalNode共享存储等关键参数,所有节点均需配置:

<configuration>
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value> <!-- 集群逻辑名称 -->
    </property>
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value> <!-- NameNode ID列表 -->
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>node1:8020</value> <!-- nn1的RPC地址 -->
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>node2:8020</value> <!-- nn2的RPC地址 -->
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node3:8485;node4:8485;node1:8485/mycluster</value> <!-- JournalNode共享存储地址 -->
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value> <!-- 启用自动故障转移 -->
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>zk1:2181,zk2:2181,zk3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value> <!-- 隔离机制(防止脑裂) -->
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/user/.ssh/id_rsa</value> <!-- SSH私钥路径 -->
    </property>
</configuration>

3. 配置yarn-site.xml(ResourceManager HA)

若需ResourceManager高可用,添加以下配置(所有节点均需配置):

<configuration>
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value> <!-- 启用RM HA -->
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value> <!-- ResourceManager ID列表 -->
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node1</value> <!-- rm1的主机名 -->
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node2</value> <!-- rm2的主机名 -->
    </property>
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>zk1:2181,zk2:2181,zk3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
</configuration>

4. 配置workers文件

$HADOOP_HOME/etc/hadoop/workers中添加所有DataNode和NodeManager节点(如node3\node4),用于启动DataNode和NodeManager服务。

三、启动JournalNode

JournalNode用于存储NameNode的编辑日志(edits),确保主备NameNode数据一致。在所有JournalNode节点(如node3~node4)上执行:

$HADOOP_HOME/sbin/hadoop-daemons.sh start journalnode

验证JournalNode是否启动(jps命令应显示JournalNode进程)。

四、初始化共享存储

在其中一台NameNode(如node1)上执行以下命令,将本地元数据同步到JournalNode:

hdfs namenode -bootstrapStandby

此命令会将nn1的元数据复制到JournalNode,为后续格式化做准备。

五、格式化NameNode并启动集群

  1. 格式化NameNode:仅在首次配置时执行,在nn1上运行:
    hdfs namenode -format
    
  2. 启动HDFS:启动所有JournalNode和NameNode服务:
    $HADOOP_HOME/sbin/start-dfs.sh
    
  3. 启动YARN:若配置了ResourceManager HA,启动YARN服务:
    $HADOOP_HOME/sbin/start-yarn.sh
    

验证HA状态

  • 使用jps命令检查各节点进程(如nn1、nn2、rm1、rm2等是否运行)。
  • 查看NameNode状态(hdfs haadmin -getServiceState nn1应返回activehdfs haadmin -getServiceState nn2应返回standby)。
  • 访问HDFS Web界面(http://node1:9870),确认集群状态。

六、常见注意事项

  1. JournalNode数量:至少3个(奇数),确保Quorum机制有效(N/2+1个存活即可维持一致性)。
  2. 隔离机制dfs.ha.fencing.methods需配置有效隔离方法(如sshfence),防止脑裂(两个NameNode同时为Active)。
  3. ZooKeeper集群:必须为奇数节点(3或5),避免脑裂问题。
  4. 数据备份:定期备份JournalNode数据和HDFS关键数据,防止数据丢失。

0