温馨提示×

Ubuntu Hadoop 高可用性如何实现

小樊
43
2025-10-25 07:00:12
栏目: 智能运维

Ubuntu环境下Hadoop高可用性(HA)实现指南
Hadoop高可用性(HA)旨在消除NameNode(HDFS核心元数据管理节点)和ResourceManager(YARN资源调度节点)的单点故障(SPOF),通过主备节点+共享存储+自动故障转移机制,确保集群持续提供服务。以下是Ubuntu系统下的具体实现步骤及关键要点:

一、前置准备

  1. 环境要求

    • 至少4台Ubuntu服务器(如node1~node4),分别用于部署NameNode(2台,主备)ResourceManager(2台,主备)JournalNode(3台,QJM集群)ZooKeeper(3台,协调集群)DataNode(多台,数据存储)NodeManager(多台,资源执行)
    • 所有节点安装OpenJDK 8sudo apt-get install openjdk-8-jdk)。
    • 配置SSH无密码登录(主备节点间互相免密,便于自动故障转移):
      # 在主节点生成密钥对
      ssh-keygen -t rsa
      # 将公钥复制到所有从节点
      ssh-copy-id node2
      ssh-copy-id node3
      # 测试无密码登录
      ssh node2
      
    • 配置主机名与IP映射(编辑/etc/hosts,避免DNS依赖):
      192.168.1.101 node1
      192.168.1.102 node2
      192.168.1.103 node3
      192.168.1.104 node4
      
  2. Hadoop基础安装

    • 下载Hadoop 3.x稳定版(如3.3.4),解压至/usr/local/hadoop
      tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local/
      ln -s /usr/local/hadoop-3.3.4 /usr/local/hadoop
      
    • 配置环境变量(~/.bashrc):
      export HADOOP_HOME=/usr/local/hadoop
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      source ~/.bashrc
      

二、HDFS高可用(HA)配置

HDFS HA通过Active/Standby NameNodeJournalNode集群实现元数据同步,核心配置文件为core-site.xmlhdfs-site.xml

1. 关键配置文件修改

  • core-site.xml(所有节点):
    定义HDFS逻辑集群名称及ZooKeeper集群地址(用于故障转移协调):

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value> <!-- HDFS逻辑集群名 -->
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node1:2181,node2:2181,node3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
    
  • hdfs-site.xml(所有节点):
    配置NameNode主备角色、共享存储(JournalNode)、自动故障转移等:

    <!-- 启用HDFS HA -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <!-- 定义NameNode ID(主备各一个) -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    <!-- 配置NameNode RPC地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>node1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>node2:8020</value>
    </property>
    <!-- 配置JournalNode共享存储路径(QJM模式) -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
    </property>
    <!-- 启用自动故障转移 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!-- ZKFC使用的ZooKeeper路径 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node1:2181,node2:2181,node3:2181</value>
    </property>
    <!-- 隔离机制(防止脑裂):SSH杀死原Active进程 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/ubuntu/.ssh/id_rsa</value> <!-- SSH私钥路径 -->
    </property>
    

2. 启动JournalNode集群

JournalNode负责存储NameNode的Edits日志(元数据变更记录),需在3台节点上启动:

# 在每台JournalNode节点执行
hdfs --daemon start journalnode
# 检查状态
jps | grep JournalNode

3. 初始化共享存储

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

# 格式化NameNode(首次配置需执行)
hdfs namenode -format
# 初始化共享Edits日志
hdfs namenode -initializeSharedEdits

4. 启动HDFS并验证

  • 启动JournalNode(已在步骤2完成)。
  • 启动NameNode(先启动Active节点,如node1):
    start-dfs.sh
    
  • 查看NameNode状态(jps命令),确认NameNode进程运行。
  • 模拟故障:杀死node1上的NameNode进程,在node2上会自动触发故障转移,node2成为新的Active节点。

三、YARN高可用(HA)配置

YARN HA通过Active/Standby ResourceManagerZooKeeper实现资源调度的高可用,核心配置文件为yarn-site.xml

1. 关键配置文件修改

  • yarn-site.xml(所有节点):
    配置ResourceManager主备角色、ZooKeeper集群地址及状态存储:
    <!-- 启用YARN HA -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 定义ResourceManager集群名称 -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn-cluster</value>
    </property>
    <!-- 定义ResourceManager ID(主备各一个) -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 配置ResourceManager RPC地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node3</value> <!-- Active RM节点 -->
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node4</value> <!-- Standby RM节点 -->
    </property>
    <!-- 配置ZooKeeper状态存储 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node1:2181,node2:2181,node3:2181</value>
    </property>
    <!-- 启用自动故障转移 -->
    <property>
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    

2. 启动YARN并验证

  • 启动ResourceManager(在node3和node4上分别启动):
    start-yarn.sh
    
  • 查看ResourceManager状态(jps命令),确认ResourceManager进程运行。
  • 模拟故障:杀死node3上的ResourceManager进程,node4会自动提升为Active节点。

四、验证高可用性

  1. HDFS验证

    • 访问HDFS Web UI(http://node1:9870),查看NameNode状态(Active/Standby)。
    • 模拟Active NameNode宕机,观察Standby节点是否自动切换为Active。
  2. YARN验证

    • 访问YARN Web UI(http://node3:8088),查看ResourceManager状态(Active/Standby)。
    • 提交测试作业(hadoop jar hadoop-mapreduce-examples-3.3.4.jar pi 10 100),模拟Active RM宕机,观察作业是否继续执行。

五、关键注意事项

  • JournalNode数量:至少3台(奇数),遵循Paxos协议保证一致性,容忍最多1台节点故障。
  • ZooKeeper集群:同样需要奇数节点(3或5台),避免脑裂问题。
  • 数据备份:定期备份HDFS数据目录(/usr/local/hadoop/data)和ZooKeeper数据目录(/var/lib/zookeeper)。
  • 监控告警:使用Prometheus+Granafa监控集群状态,设置NameNode、ResourceManager宕机告警。

通过以上步骤,Ubuntu环境下的Hadoop集群可实现HDFS NameNodeYARN ResourceManager的高可用,确保集群在节点故障时快速恢复,保障大数据处理的连续性。

0