Ubuntu环境下Hadoop高可用性(HA)实现指南
Hadoop高可用性(HA)旨在消除NameNode(HDFS核心元数据管理节点)和ResourceManager(YARN资源调度节点)的单点故障(SPOF),通过主备节点+共享存储+自动故障转移机制,确保集群持续提供服务。以下是Ubuntu系统下的具体实现步骤及关键要点:
环境要求
sudo apt-get install openjdk-8-jdk)。# 在主节点生成密钥对
ssh-keygen -t rsa
# 将公钥复制到所有从节点
ssh-copy-id node2
ssh-copy-id node3
# 测试无密码登录
ssh node2
/etc/hosts,避免DNS依赖):192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
192.168.1.104 node4
Hadoop基础安装
/usr/local/hadoop:tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local/
ln -s /usr/local/hadoop-3.3.4 /usr/local/hadoop
~/.bashrc):export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc
HDFS HA通过Active/Standby NameNode和JournalNode集群实现元数据同步,核心配置文件为core-site.xml和hdfs-site.xml。
core-site.xml(所有节点):
定义HDFS逻辑集群名称及ZooKeeper集群地址(用于故障转移协调):
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value> <!-- HDFS逻辑集群名 -->
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value> <!-- ZooKeeper集群地址 -->
</property>
hdfs-site.xml(所有节点):
配置NameNode主备角色、共享存储(JournalNode)、自动故障转移等:
<!-- 启用HDFS HA -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 定义NameNode ID(主备各一个) -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- 配置NameNode RPC地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node2:8020</value>
</property>
<!-- 配置JournalNode共享存储路径(QJM模式) -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
</property>
<!-- 启用自动故障转移 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- ZKFC使用的ZooKeeper路径 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<!-- 隔离机制(防止脑裂):SSH杀死原Active进程 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/ubuntu/.ssh/id_rsa</value> <!-- SSH私钥路径 -->
</property>
JournalNode负责存储NameNode的Edits日志(元数据变更记录),需在3台节点上启动:
# 在每台JournalNode节点执行
hdfs --daemon start journalnode
# 检查状态
jps | grep JournalNode
在其中一台NameNode(如node1)上执行,将本地元数据同步到JournalNode:
# 格式化NameNode(首次配置需执行)
hdfs namenode -format
# 初始化共享Edits日志
hdfs namenode -initializeSharedEdits
start-dfs.sh
jps命令),确认NameNode进程运行。YARN HA通过Active/Standby ResourceManager和ZooKeeper实现资源调度的高可用,核心配置文件为yarn-site.xml。
<!-- 启用YARN HA -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 定义ResourceManager集群名称 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value>
</property>
<!-- 定义ResourceManager ID(主备各一个) -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 配置ResourceManager RPC地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node3</value> <!-- Active RM节点 -->
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node4</value> <!-- Standby RM节点 -->
</property>
<!-- 配置ZooKeeper状态存储 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<!-- 启用自动故障转移 -->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
start-yarn.sh
jps命令),确认ResourceManager进程运行。HDFS验证
http://node1:9870),查看NameNode状态(Active/Standby)。YARN验证
http://node3:8088),查看ResourceManager状态(Active/Standby)。hadoop jar hadoop-mapreduce-examples-3.3.4.jar pi 10 100),模拟Active RM宕机,观察作业是否继续执行。/usr/local/hadoop/data)和ZooKeeper数据目录(/var/lib/zookeeper)。通过以上步骤,Ubuntu环境下的Hadoop集群可实现HDFS NameNode和YARN ResourceManager的高可用,确保集群在节点故障时快速恢复,保障大数据处理的连续性。