温馨提示×

Hadoop在Linux上的高可用性方案

小樊
62
2025-09-25 09:12:41
栏目: 智能运维

Hadoop在Linux上的高可用性方案
Hadoop的高可用性(HA)旨在消除单点故障(SPOF),确保HDFS(分布式文件系统)和YARN(资源管理系统)在节点故障时持续提供服务。其核心是通过主备组件冗余分布式协调服务自动故障转移实现,主要涵盖HDFS NameNode HA和YARN ResourceManager HA两部分。

一、HDFS高可用性配置

HDFS HA的核心是NameNode冗余,通过Active/Standby模式确保元数据服务的连续性。关键组件包括:

  • Active NameNode:处理客户端读写请求,是主服务节点;
  • Standby NameNode:同步Active节点的元数据,作为热备份;
  • JournalNode集群:存储NameNode的EditLog(元数据变更日志),确保Active与Standby元数据一致(需奇数个节点,如3个,容忍最多1个节点故障);
  • ZooKeeper集群:协调主备切换,通过ZKFC(ZooKeeper Failover Controller)监控NameNode健康状态,触发自动故障转移。

1. 核心配置文件说明

  • core-site.xml:定义HDFS名称服务及ZooKeeper地址。
    <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>
    
  • hdfs-site.xml:配置NameNode冗余、共享存储及故障转移。
    <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>namenode1:8020</value> <!-- Active NameNode RPC地址 -->
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>namenode2:8020</value> <!-- Standby NameNode RPC地址 -->
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://journal1:8485;journal2:8485;journal3: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>
    

2. 关键步骤

  • 启动JournalNode:在3个JournalNode节点上执行hadoop-daemons.sh start journalnode,启动JournalNode守护进程。
  • 初始化Standby NameNode:在其中一个NameNode(如nn1)上执行hdfs namenode -bootstrapStandby,将Active节点的元数据同步到Standby节点。
  • 启动HDFS集群:执行start-dfs.sh启动所有NameNode、DataNode和JournalNode。
  • 验证HA状态:使用hdfs haadmin -getServiceState nn1(检查nn1状态)和hdfs haadmin -getServiceState nn2(检查nn2状态),确认Active/Standby状态正常。

二、YARN高可用性配置

YARN HA的核心是ResourceManager冗余,通过Active/Standby模式确保资源调度的连续性。关键组件包括:

  • Active ResourceManager:处理资源申请、任务调度;
  • Standby ResourceManager:同步Active节点的状态,作为备份;
  • ZooKeeper集群:协调主备切换,监控ResourceManager健康状态,触发自动故障转移。

1. 核心配置文件说明

  • core-site.xml:定义YARN ResourceManager HA名称服务。
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value> <!-- 启用HA -->
    </property>
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn1</value> <!-- 集群唯一标识 -->
    </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 ResourceManager主机名 -->
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>resourcemanager2</value> <!-- Standby ResourceManager主机名 -->
    </property>
    

2. 关键步骤

  • 启动ResourceManager:分别在两个ResourceManager节点上执行yarn-daemon.sh start resourcemanager,启动ResourceManager进程。
  • 验证HA状态:使用yarn rmadmin -getServiceState rm1(检查rm1状态)和yarn rmadmin -getServiceState rm2(检查rm2状态),确认Active/Standby状态正常。

三、高可用性保障措施

  • SSH无密登录:配置所有节点间SSH免密登录(使用ssh-keygen生成密钥,ssh-copy-id分发公钥),确保故障转移时能远程执行命令。
  • 时间同步:使用NTP服务同步所有节点时间(如ntpdate ntp.aliyun.com),避免因时间不一致导致心跳检测失败。
  • 数据备份:定期备份HDFS元数据(如NameNode的fsimageedits文件)及业务数据,防止数据丢失。
  • 监控告警:使用Prometheus+Granafa或Ganglia监控集群状态(如NameNode内存、ResourceManager CPU、DataNode磁盘空间),设置阈值告警(如邮件、短信通知)。

四、测试验证

  • 模拟NameNode故障:停止Active NameNode进程(hadoop-daemon.sh stop namenode),观察Standby节点是否自动切换为Active(通过jps命令查看进程状态)。
  • 模拟ResourceManager故障:停止Active ResourceManager进程(yarn-daemon.sh stop resourcemanager),验证Standby节点是否自动接管。
  • 客户端访问测试:使用hdfs dfs -put命令上传文件,或提交MapReduce作业,确认服务连续性。

通过以上配置,Hadoop集群可实现HDFS和YARN的高可用性,确保在节点故障时快速切换,保障数据可靠性和服务连续性。

0