温馨提示×

Hadoop在Linux中的高可用性如何设置

小樊
38
2025-10-29 07:53:31
栏目: 智能运维

Hadoop在Linux中的高可用性设置指南

Hadoop在Linux环境中的高可用性(HA)设置需通过多组件协同实现,核心目标是解决NameNode(HDFS元数据管理)、ResourceManager(YARN资源调度)的单点故障问题,同时保障数据冗余与系统稳定性。以下是具体配置步骤:

一、前置准备

  1. 环境要求
    • 所有节点(NameNode、DataNode、ResourceManager、NodeManager、JournalNode、ZooKeeper)安装相同版本的Hadoop(建议2.7+或3.x)。
    • 节点间网络互通(关闭防火墙或放行必要端口:HDFS默认8020/50070、YARN默认8030/8088、ZooKeeper默认2181、JournalNode默认8485)。
    • 安装并配置JDK 1.8+java -version验证)。
  2. 系统优化
    • 调整内核参数(如vm.swappiness=10减少交换分区使用、net.core.somaxconn=65535提升网络连接数),编辑/etc/sysctl.conf后执行sysctl -p生效。
    • 配置SSH免密登录ssh-keygen -t rsa生成密钥,ssh-copy-id分发至所有节点),便于故障转移时自动执行命令。
    • 同步所有节点系统时间(安装ntp服务,ntpdate pool.ntp.org同步)。

二、配置ZooKeeper集群(协调服务)

ZooKeeper是Hadoop HA的核心协调组件,负责NameNode选主、ResourceManager状态监控及故障转移触发。

  1. 部署集群:选择3个节点(奇数节点保证多数派原则),安装ZooKeeper(版本3.4+)。
  2. 配置zoo.cfg(每节点相同):
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/path/to/zk/data  # 数据目录
    clientPort=2181
    server.1=zoo1:2888:3888  # 节点1,2888用于Leader选举,3888用于Leader与其他节点通信
    server.2=zoo2:2888:3888
    server.3=zoo3:2888:3888
    
  3. 启动集群:在每节点执行zkServer.sh start,通过zkServer.sh status确认Leader节点(如Mode: leader)。

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

HDFS HA通过主备NameNode+JournalNode实现元数据同步与故障转移。

  1. 配置core-site.xml(全局配置):
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://mycluster</value>  <!-- 集群命名空间 -->
    </property>
    <property>
      <name>ha.zookeeper.quorum</name>
      <value>zoo1:2181,zoo2:2181,zoo3:2181</value>  <!-- ZooKeeper集群地址 -->
    </property>
    
  2. 配置hdfs-site.xml(HDFS专用配置):
    <property>
      <name>dfs.nameservices</name>
      <value>mycluster</value>  <!-- 与fs.defaultFS一致 -->
    </property>
    <property>
      <name>dfs.ha.namenodes.mycluster</name>
      <value>nn1,nn2</value>  <!-- 主备NameNode标识 -->
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn1</name>
      <value>namenode1:8020</value>  <!-- nn1的RPC地址 -->
    </property>
    <property>
      <name>dfs.namenode.rpc-address.mycluster.nn2</name>
      <value>namenode2:8020</value>  <!-- nn2的RPC地址 -->
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn1</name>
      <value>namenode1:50070</value>  <!-- nn1的HTTP地址 -->
    </property>
    <property>
      <name>dfs.namenode.http-address.mycluster.nn2</name>
      <value>namenode2:50070</value>  <!-- nn2的HTTP地址 -->
    </property>
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value>  <!-- JournalNode共享编辑日志地址 -->
    </property>
    <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>  <!-- 开启自动故障转移 -->
    </property>
    <property>
      <name>dfs.client.failover.proxy.provider.mycluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  <!-- 客户端故障转移代理 -->
    </property>
    
  3. 启动JournalNode:在3个JournalNode节点执行hdfs --daemon start journalnode,通过jps确认进程启动。
  4. 格式化与启动NameNode
    • 在**主NameNode(nn1)**执行hdfs namenode -format(首次启动需格式化)。
    • 启动主NameNode:hdfs --daemon start namenode
    • 在**备NameNode(nn2)**执行hdfs namenode -bootstrapStandby(同步主NameNode元数据)。
    • 启动备NameNode:hdfs --daemon start namenode
  5. 启动ZKFC(自动故障转移控制器):在主备NameNode节点执行hdfs --daemon start zkfc(ZKFC会监控NameNode状态,触发故障转移)。

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

YARN HA通过主备ResourceManager实现资源调度的连续性。

  1. 配置yarn-site.xml(YARN专用配置):
    <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value>  <!-- 开启HA -->
    </property>
    <property>
      <name>yarn.resourcemanager.cluster-id</name>
      <value>yrc</value>  <!-- 集群ID -->
    </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>  <!-- rm1的主机名 -->
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>resourcemanager2</value>  <!-- rm2的主机名 -->
    </property>
    <property>
      <name>yarn.resourcemanager.zk-address</name>
      <value>zoo1:2181,zoo2:2181,zoo3:2181</value>  <!-- ZooKeeper集群地址(用于选主) -->
    </property>
    <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>  <!-- Shuffle服务 -->
    </property>
    
  2. 启动ResourceManager:在主备ResourceManager节点执行start-yarn.sh,通过yarn rmadmin -getServiceState rm1确认主备状态(active/standby)。

五、配置DataNode(数据节点)

DataNode负责数据存储,需配置为向所有NameNode汇报状态(自动适配主备切换)。

  1. 配置hdfs-site.xml(每DataNode相同):
    <property>
      <name>dfs.datanode.data.dir</name>
      <value>/path/to/datanode/dir</value>  <!-- 数据存储目录 -->
    </property>
    
  2. 启动DataNode:在所有DataNode节点执行hdfs --daemon start datanode,通过hdfs dfsadmin -report确认DataNode状态。

六、测试高可用性

  1. 模拟NameNode故障:停止主NameNode(hdfs --daemon stop namenode),观察备NameNode是否自动接管(通过hdfs dfsadmin -report查看主NameNode切换)。
  2. 模拟ResourceManager故障:停止主ResourceManager(yarn --daemon stop resourcemanager),确认备ResourceManager是否变为active
  3. 验证数据完整性:上传文件至HDFS,故障转移后检查文件是否可正常读取。

七、监控与维护

  1. 内置监控:通过Hadoop Web界面(http://namenode:50070http://resourcemanager:8088)查看集群状态。
  2. 第三方工具:集成Prometheus(采集指标)+ Grafana(可视化)监控集群性能,或使用Alertmanager设置告警(如NameNode宕机、磁盘空间不足)。
  3. 定期维护:备份NameNode元数据(hdfs dfsadmin -fetchImage)、清理JournalNode日志、升级Hadoop版本时验证兼容性。

通过以上步骤,Hadoop集群可实现NameNodeResourceManager的高可用,结合ZooKeeper协调与JournalNode元数据同步,有效保障集群在节点故障时的连续性与数据可靠性。

0