Ubuntu与Hadoop高可用性(HA)配置指南
高可用性(HA)配置是Hadoop生产环境的核心需求,旨在通过NameNode主备切换、ResourceManager主备切换及ZooKeeper协调,解决单点故障问题,保障集群稳定运行。以下是基于Ubuntu系统的详细配置步骤:
环境要求
node1、node2、node3),建议4台(区分NameNode、DataNode、JournalNode角色);sudo apt install openjdk-8-jdk);node1对应192.168.1.101)及**/etc/hosts**映射(避免DNS依赖);ssh-keygen -t rsa生成密钥,ssh-copy-id分发公钥);zkServer.sh status显示Leader/Follower状态正常)。Hadoop安装
/usr/local/hadoop;~/.bashrc中添加export HADOOP_HOME=/usr/local/hadoop、export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin,执行source ~/.bashrc生效)。NameNode HA通过**QJM(Quorum Journal Manager)**实现元数据同步,确保主备NameNode数据一致。
core-site.xml(定义HDFS命名空间及ZooKeeper地址):<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value> <!-- 集群命名空间 -->
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value> <!-- ZooKeeper集群地址 -->
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value> <!-- 启用自动故障转移 -->
</property>
hdfs-site.xml(配置主备NameNode、JournalNode及故障转移机制):<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>node1:8020</value> <!-- nn1的RPC地址 -->
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node2:8020</value> <!-- nn2的RPC地址 -->
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node1:50070</value> <!-- nn1的HTTP地址 -->
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node2:50070</value> <!-- nn2的HTTP地址 -->
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value> <!-- JournalNode共享编辑日志地址 -->
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/data/journalnode</value> <!-- JournalNode本地存储路径 -->
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value> <!-- 隔离机制:通过SSH杀死备用NameNode进程 -->
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value> <!-- SSH私钥路径 -->
</property>
hdfs namenode -format
hdfs --daemon start journalnode
hdfs namenode -initializeSharedEdits
start-dfs.sh
ResourceManager HA通过主备RM实现资源管理高可用,配置步骤类似NameNode。
yarn-site.xml(启用RM HA及故障转移):<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value> <!-- 集群唯一标识 -->
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value> <!-- 主备RM标识 -->
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node1</value> <!-- rm1的主机名 -->
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node2</value> <!-- rm2的主机名 -->
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node1:2181,node2:2181,node3:2181</value> <!-- ZooKeeper地址 -->
</property>
<property>
<name>yarn.resourcemanager.failover.enabled</name>
<value>true</value> <!-- 启用自动故障转移 -->
</property>
<property>
<name>yarn.resourcemanager.failover.type</name>
<value>zookeeper</value> <!-- 基于ZooKeeper的自动故障转移 -->
</property>
start-yarn.sh
jps,确认主备NameNode、ResourceManager及JournalNode进程正常运行(如NameNode、StandbyNameNode、ResourceManager、NodeManager)。http://node1:50070(HDFS Web UI)和http://node1:8088(YARN Web UI),查看集群状态及主备角色切换情况。kill -9 <NameNode_PID>),观察备用NameNode是否自动接管(jps中StandbyNameNode变为NameNode);/user/hadoop目录),使用hdfs dfs -cp命令复制到异地节点;dfs.blocksize,默认128MB,大文件可设为256MB)、YARN容器资源分配(yarn.scheduler.maximum-allocation-mb,根据节点内存调整)。通过以上步骤,可在Ubuntu系统上实现Hadoop集群的高可用性,确保元数据及资源管理服务的高可靠性,满足生产环境需求。