温馨提示×

Ubuntu与Hadoop的高可用性配置

小樊
53
2025-09-25 16:00:53
栏目: 智能运维

Ubuntu与Hadoop高可用性(HA)配置指南
高可用性(HA)配置是Hadoop生产环境的核心需求,旨在通过NameNode主备切换ResourceManager主备切换ZooKeeper协调,解决单点故障问题,保障集群稳定运行。以下是基于Ubuntu系统的详细配置步骤:

一、前置准备

  1. 环境要求

    • 至少3台Ubuntu服务器(如node1node2node3),建议4台(区分NameNode、DataNode、JournalNode角色);
    • 所有节点安装JDK 8sudo apt install openjdk-8-jdk);
    • 配置静态IP主机名(如node1对应192.168.1.101)及**/etc/hosts**映射(避免DNS依赖);
    • 配置SSH免密登录(主节点需免密登录所有节点,使用ssh-keygen -t rsa生成密钥,ssh-copy-id分发公钥);
    • 部署ZooKeeper集群(3节点,参考Ubuntu下ZooKeeper集群搭建教程,确保zkServer.sh status显示Leader/Follower状态正常)。
  2. Hadoop安装

    • 下载Hadoop(如2.7.3或3.3.4版本),解压至/usr/local/hadoop
    • 配置环境变量(~/.bashrc中添加export HADOOP_HOME=/usr/local/hadoopexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin,执行source ~/.bashrc生效)。

二、核心配置步骤

1. NameNode高可用配置(HDFS HA)

NameNode HA通过**QJM(Quorum Journal Manager)**实现元数据同步,确保主备NameNode数据一致。

  • 修改core-site.xml(定义HDFS命名空间及ZooKeeper地址):
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value> <!-- 集群命名空间 -->
    </property>
    <property>
      <name>ha.zookeeper.quorum</name>
      <value>node1:2181,node2:2181,node3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
    <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value> <!-- 启用自动故障转移 -->
    </property>
    
  • 修改hdfs-site.xml(配置主备NameNode、JournalNode及故障转移机制):
    <property>
      <name>dfs.nameservices</name>
      <value>mycluster</value> <!-- 与core-site.xml中的命名空间一致 -->
    </property>
    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>nn1,nn2</value> <!-- 主备NameNode标识 -->
    </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.http-address.mycluster.nn1</name>
      <value>node1:50070</value> <!-- nn1的HTTP地址 -->
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>node2:50070</value> <!-- nn2的HTTP地址 -->
    </property>
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value> <!-- JournalNode共享编辑日志地址 -->
    </property>
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/usr/local/hadoop/data/journalnode</value> <!-- JournalNode本地存储路径 -->
    </property>
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value> <!-- 隔离机制:通过SSH杀死备用NameNode进程 -->
    </property>
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/home/hadoop/.ssh/id_rsa</value> <!-- SSH私钥路径 -->
    </property>
    
  • 格式化NameNode(仅在主NameNode上执行一次):
    hdfs namenode -format
    
  • 启动JournalNode(在所有JournalNode节点上执行):
    hdfs --daemon start journalnode
    
  • 初始化共享编辑日志(在主NameNode上执行):
    hdfs namenode -initializeSharedEdits
    
  • 启动HDFS集群
    start-dfs.sh
    

2. ResourceManager高可用配置(YARN HA)

ResourceManager HA通过主备RM实现资源管理高可用,配置步骤类似NameNode。

  • 修改yarn-site.xml(启用RM HA及故障转移):
    <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value>
    </property>
    <property>
      <name>yarn.resourcemanager.cluster-id</name>
      <value>yarn-cluster</value> <!-- 集群唯一标识 -->
    </property>
    <property>
      <name>yarn.resourcemanager.ha.rm-ids</name>
      <value>rm1,rm2</value> <!-- 主备RM标识 -->
    </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>node1:2181,node2:2181,node3:2181</value> <!-- ZooKeeper地址 -->
    </property>
    <property>
      <name>yarn.resourcemanager.failover.enabled</name>
      <value>true</value> <!-- 启用自动故障转移 -->
    </property>
    <property>
      <name>yarn.resourcemanager.failover.type</name>
      <value>zookeeper</value> <!-- 基于ZooKeeper的自动故障转移 -->
    </property>
    
  • 启动YARN集群
    start-yarn.sh
    

三、验证高可用性

  1. 检查进程状态
    在各节点执行jps,确认主备NameNode、ResourceManager及JournalNode进程正常运行(如NameNodeStandbyNameNodeResourceManagerNodeManager)。
  2. Web界面验证
    访问http://node1:50070(HDFS Web UI)和http://node1:8088(YARN Web UI),查看集群状态及主备角色切换情况。
  3. 模拟故障切换
    • 杀死主NameNode进程(kill -9 <NameNode_PID>),观察备用NameNode是否自动接管(jpsStandbyNameNode变为NameNode);
    • 杀死主ResourceManager进程,验证备用ResourceManager是否自动启动。

四、优化建议

  • 数据备份:定期备份HDFS关键数据(如/user/hadoop目录),使用hdfs dfs -cp命令复制到异地节点;
  • 监控告警:部署Prometheus+Granafa监控集群状态(如NameNode内存、磁盘使用率、YARN资源利用率),设置阈值告警(如邮件、短信通知);
  • 性能调优:调整HDFS块大小(dfs.blocksize,默认128MB,大文件可设为256MB)、YARN容器资源分配(yarn.scheduler.maximum-allocation-mb,根据节点内存调整)。

通过以上步骤,可在Ubuntu系统上实现Hadoop集群的高可用性,确保元数据及资源管理服务的高可靠性,满足生产环境需求。

0