linux

Hadoop在Linux中怎样实现高可用

小樊
41
2025-10-20 22:34:01
栏目: 智能运维

Hadoop在Linux中实现高可用的核心步骤

一、准备工作

在开始配置前,需完成以下基础准备:

二、配置NameNode高可用(HDFS HA)

NameNode是HDFS的核心元数据管理组件,其高可用通过Active/Standby模式+ZooKeeper自动故障转移实现:

  1. 配置共享存储:使用JournalNode集群作为共享存储,确保所有NameNode元数据变更同步。在hdfs-site.xml中添加以下配置:
    <property>
      <name>dfs.nameservices</name>
      <value>mycluster</value> <!-- 集群名称,自定义 -->
    </property>
    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>namenode1,namenode2</value> <!-- NameNode节点标识 -->
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.namenode1</name>
      <value>namenode1:8020</value> <!-- Active NameNode RPC地址 -->
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.namenode2</name>
      <value>namenode2:8020</value> <!-- Standby NameNode RPC地址 -->
    </property>
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value> <!-- JournalNode集群地址 -->
    </property>
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/var/lib/hadoop/hdfs/journalnode</value> <!-- JournalNode本地数据目录 -->
    </property>
    
  2. 配置故障转移:启用自动故障转移并指定ZooKeeper集群地址:
    <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value> <!-- 开启自动故障转移 -->
    </property>
    <property>
      <name>ha.zookeeper.quorum</name>
      <value>zoo1:2181,zoo2:2181,zoo3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
    
  3. 配置故障隔离(Fencing):防止脑裂,通过SSH强制终止故障NameNode进程:
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value> <!-- 使用SSH隔离 -->
    </property>
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value> <!-- SSH私钥路径 -->
    </property>
    
  4. 启动JournalNode与NameNode
    # 启动所有JournalNode(在每个JournalNode节点执行)
    hdfs --daemon start journalnode
    
    # 在Active NameNode(如namenode1)上格式化并启动
    hdfs namenode -format
    hdfs --daemon start namenode
    
    # 在Standby NameNode(如namenode2)上同步元数据并启动
    hdfs namenode -bootstrapStandby
    hdfs --daemon start namenode
    

三、配置ResourceManager高可用(YARN HA)

ResourceManager负责集群资源调度,其高可用同样采用主备模式+ZooKeeper协调

  1. 配置ResourceManager集群:在yarn-site.xml中添加以下配置:
    <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value> <!-- 开启HA -->
    </property>
    <property>
      <name>yarn.resourcemanager.cluster-id</name>
      <value>yarn-cluster</value> <!-- 集群ID,需与HDFS一致 -->
    </property>
    <property>
      <name>yarn.resourcemanager.ha.rm-ids</name>
      <value>rm1,rm2</value> <!-- ResourceManager节点标识 -->
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm1</name>
      <value>resourcemanager1</value> <!-- Active RM节点主机名 -->
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>resourcemanager2</value> <!-- Standby RM节点主机名 -->
    </property>
    <property>
      <name>yarn.resourcemanager.zk-address</name>
      <value>zoo1:2181,zoo2:2181,zoo3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
    
  2. 启动ResourceManager
    # 在所有ResourceManager节点启动服务
    start-yarn.sh
    

四、启动集群与验证

  1. 启动HDFS与YARN
    # 启动HDFS
    start-dfs.sh
    
    # 启动YARN
    start-yarn.sh
    
  2. 验证NameNode状态:使用hdfs haadmin -getServiceState namenode1查看Active/Standby状态,正常应显示activestandby
  3. 模拟故障转移
    • 停止Active NameNode:hdfs --daemon stop namenode(在Active节点执行)
    • 检查Standby节点是否自动切换为Active:hdfs haadmin -getServiceState namenode2应显示active
    • 验证数据访问:创建测试文件hdfs dfs -touch /testfile,切换后检查文件是否存在hdfs dfs -ls /testfile

五、优化与维护建议

0
看了该问题的人还看了