linux

Hadoop在Linux中的高可用性怎么配置

小樊
33
2025-11-11 00:54:15
栏目: 智能运维

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

一、前置准备

在配置Hadoop高可用性(HA)前,需完成以下基础准备:

  1. 环境要求:至少3台Linux节点(用于NameNode、JournalNode、ResourceManager等角色),安装相同版本的Hadoop(建议2.7.2及以上)、JDK 1.8+;节点间网络互通,能通过主机名互相访问。
  2. 基础配置
    • 免密登录:在所有节点间配置SSH无密码登录(ssh-keygen -t rsa生成密钥,cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys分发公钥)。
    • 防火墙与SELinux:临时关闭防火墙(systemctl stop firewalld)和SELinux(setenforce 0),避免端口被拦截。
    • 主机名解析:在/etc/hosts文件中添加所有节点的主机名与IP映射(如192.168.1.101 nn1192.168.1.102 nn2)。
  3. ZooKeeper集群:部署3个ZooKeeper节点(需奇数台,保证多数派机制),并启动服务(zkServer.sh start)。

二、HDFS高可用性配置

HDFS HA的核心是通过JournalNode同步元数据和**自动故障转移(ZKFC)**实现NameNode的高可用。

1. 配置core-site.xml

$HADOOP_CONF_DIR/core-site.xml中添加以下配置,指定HDFS的默认文件系统和ZooKeeper地址:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value> <!-- 自定义逻辑集群名称 -->
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>zk1:2181,zk2:2181,zk3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
</configuration>

2. 配置hdfs-site.xml

$HADOOP_CONF_DIR/hdfs-site.xml中添加以下配置,定义NameNode、JournalNode和故障转移机制:

<configuration>
    <!-- 定义逻辑集群名称 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <!-- 映射逻辑集群到NameNode节点(nn1、nn2为逻辑名称) -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    <!-- 指定每个NameNode的RPC地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>nn1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>nn2:8020</value>
    </property>
    <!-- 指定每个NameNode的HTTP地址(Web UI) -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>nn1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>nn2:50070</value>
    </property>
    <!-- JournalNode同步目录(元数据持久化) -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://journal1:8485;journal2:8485;journal3:8485/mycluster</value>
    </property>
    <!-- JournalNode本地数据目录 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/module/hadoop-3.3.2/data/journal</value>
    </property>
    <!-- 客户端故障转移代理(自动选择Active NameNode) -->
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!-- 自动故障转移(依赖ZooKeeper) -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!-- 故障转移隔离机制(SSH方式) -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value> <!-- SSH私钥路径 -->
    </property>
</configuration>

3. 启动JournalNode

在3个JournalNode节点上启动JournalNode服务(每个节点均需运行):

$HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode

使用jps命令验证JournalNode进程是否启动(显示JournalNode进程即为成功)。

4. 格式化NameNode

在第一个NameNode节点(如nn1)上格式化NameNode(仅首次启动需执行):

hdfs namenode -format

5. 启动NameNode

6. 启动ZKFC(自动故障转移控制器)

在两个NameNode节点上启动ZKFC进程(用于监控NameNode状态并触发故障转移):

$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc

7. 验证HDFS HA

三、YARN高可用性配置

YARN HA的核心是通过ZooKeeper实现ResourceManager的主备切换

1. 配置yarn-site.xml

$HADOOP_CONF_DIR/yarn-site.xml中添加以下配置,定义ResourceManager的HA逻辑:

<configuration>
    <!-- 启用ResourceManager HA -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 定义逻辑集群ID -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn-cluster</value>
    </property>
    <!-- 定义ResourceManager节点(rm1、rm2为逻辑名称) -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 指定每个ResourceManager的hostname -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>rm1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>rm2</value>
    </property>
    <!-- ZooKeeper集群地址(用于ResourceManager状态同步) -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>zk1:2181,zk2:2181,zk3:2181</value>
    </property>
    <!-- 故障转移超时时间(毫秒) -->
    <property>
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>

2. 启动ResourceManager

在两个ResourceManager节点上启动ResourceManager进程:

$HADOOP_HOME/sbin/start-yarn.sh

使用jps命令验证ResourceManager进程是否启动(显示ResourceManager进程即为成功)。

3. 验证YARN HA

四、测试故障转移

  1. HDFS故障转移
    • 停止nn1的NameNode进程,等待1-2分钟,nn2应自动切换为Active状态。
    • 再次启动nn1,其应自动切换为Standby状态。
  2. YARN故障转移
    • 停止rm1的ResourceManager进程,rm2应自动切换为Active状态。
    • 再次启动rm1,其应自动切换为Standby状态。

通过以上步骤,Hadoop集群即可实现HDFS和YARN的高可用性,确保在节点故障时服务不中断。

0
看了该问题的人还看了