温馨提示×

Hadoop在Linux上如何配置高可用性

小樊
50
2025-10-16 12:58:10
栏目: 智能运维

Hadoop在Linux上配置高可用性(HA)的完整步骤

1. 环境准备

  • 操作系统:推荐使用CentOS 7或Ubuntu 20.04(需提前安装gccopenssl-devel等依赖)。
  • Java环境:安装JDK 8(或更高版本),配置JAVA_HOME环境变量(如export JAVA_HOME=/usr/java/jdk1.8.0_201/)。
  • 网络配置:所有节点(NameNode、ResourceManager、JournalNode、ZooKeeper等)需配置静态IP,确保主机名与IP映射正确(通过/etc/hosts文件或DNS)。
  • ZooKeeper集群:提前搭建3节点ZooKeeper集群(Hadoop HA依赖其实现故障检测与自动转移),配置zoo.cfg文件(如server.1=zoo1:2888:3888;server.2=zoo2:2888:3888;server.3=zoo3:2888:3888)。

2. 安装与配置Hadoop

2.1 下载与解压

下载Hadoop安装包(如Apache Hadoop或CDH版本),解压至指定目录(如/usr/app/hadoop-3.3.6),配置环境变量HADOOP_HOME(如export HADOOP_HOME=/usr/app/hadoop-3.3.6),并将$HADOOP_HOME/bin添加至PATH

2.2 配置NameNode高可用(HDFS HA)

  • 核心配置文件
    • core-site.xml:定义HDFS的默认文件系统地址(指向NameService)和ZooKeeper集群地址。
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-cluster</value> <!-- NameService名称 -->
      </property>
      <property>
        <name>ha.zookeeper.quorum</name>
        <value>zoo1:2181,zoo2:2181,zoo3:2181</value> <!-- ZooKeeper集群地址 -->
      </property>
      
    • hdfs-site.xml:配置NameService、NameNode节点、共享存储(JournalNode)、自动故障转移等参数。
      <property>
        <name>dfs.nameservices</name>
        <value>hadoop-cluster</value> <!-- NameService名称,需与core-site.xml一致 -->
      </property>
      <property>
        <name>dfs.ha.namenodes.hadoop-cluster</name>
        <value>nn1,nn2</value> <!-- NameNode节点ID -->
      </property>
      <property>
        <name>dfs.namenode.rpc-address.hadoop-cluster.nn1</name>
        <value>namenode1:9000</value> <!-- nn1的RPC地址 -->
      </property>
      <property>
        <name>dfs.namenode.rpc-address.hadoop-cluster.nn2</name>
        <value>namenode2:9000</value> <!-- nn2的RPC地址 -->
      </property>
      <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/hadoop-cluster</value> <!-- JournalNode共享存储路径 -->
      </property>
      <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value> <!-- 启用自动故障转移 -->
      </property>
      <property>
        <name>dfs.client.failover.max.attempts</name>
        <value>5</value> <!-- 客户端故障转移重试次数 -->
      </property>
      
  • 启动JournalNode:在3个JournalNode节点上执行hdfs --daemon start journalnode,启动JournalNode服务(用于同步NameNode元数据)。

2.3 配置ResourceManager高可用(YARN HA)

  • 核心配置文件
    • yarn-site.xml:配置ResourceManager集群、ZooKeeper地址等参数。
      <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value> <!-- 启用ResourceManager HA -->
      </property>
      <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn-cluster</value> <!-- ResourceManager集群ID -->
      </property>
      <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value> <!-- ResourceManager节点ID -->
      </property>
      <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>zoo1:2181,zoo2:2181,zoo3:2181</value> <!-- ZooKeeper集群地址 -->
      </property>
      <property>
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value> <!-- 启用自动故障转移 -->
      </property>
      

2.4 配置DataNode

在所有DataNode节点上,修改hdfs-site.xml文件,配置DataNode数据存储路径:

<property>
  <name>dfs.datanode.data.dir</name>
  <value>/home/hadoop/datanode</value> <!-- DataNode数据目录 -->
</property>

2.5 配置环境变量

hadoop-env.sh文件中,指定Java路径:

export JAVA_HOME=/usr/java/jdk1.8.0_201/

3. 启动Hadoop高可用集群

  • 格式化NameNode:仅在主NameNode(如namenode1)上执行一次:
    hdfs namenode -format
    
  • 启动JournalNode:在3个JournalNode节点上执行:
    hdfs --daemon start journalnode
    
  • 启动主NameNode:在主NameNode(如namenode1)上执行:
    hdfs --daemon start namenode
    
  • 启动备用NameNode:在备用NameNode(如namenode2)上执行:
    hdfs namenode -bootstrapStandby  # 同步主NameNode元数据
    hdfs --daemon start namenode
    
  • 启动ResourceManager:在主ResourceManager(如resourcemanager1)上执行:
    yarn --daemon start resourcemanager
    
  • 启动备用ResourceManager:在备用ResourceManager(如resourcemanager2)上执行:
    yarn --daemon start resourcemanager
    
  • 启动DataNode与NodeManager:在所有DataNode节点上执行:
    hdfs --daemon start datanode
    yarn --daemon start nodemanager
    

4. 验证高可用性

  • 检查进程状态:使用jps命令检查各节点进程是否正常(如主NameNode有NameNode进程,备用NameNode有NameNodeZKFC进程)。
  • 模拟故障转移
    • 停止主NameNode(如namenode1)的NameNode进程:hdfs --daemon stop namenode
    • 检查备用NameNode(如namenode2)是否自动切换为Active状态(通过jps命令查看NameNode进程,或访问http://namenode2:9870查看NameNode状态)。
    • 恢复主NameNode,验证其是否自动切换为Standby状态。
  • 验证YARN HA:停止主ResourceManager(如resourcemanager1)的ResourceManager进程,检查备用ResourceManager是否自动接管。

5. 监控与告警(可选但推荐)

  • 内置监控:使用Hadoop的Web UI(如NameNode的http://namenode1:9870、ResourceManager的http://resourcemanager1:8088)监控集群状态。
  • 第三方工具:集成Prometheus+Granafa(监控集群资源、HDFS存储、YARN任务等),或Ganglia(实时监控集群性能),设置告警规则(如NameNode宕机、ResourceManager宕机、磁盘空间不足等)。

0