Hadoop在Linux中的高可用性配置指南
一、前置准备
在配置Hadoop高可用性(HA)前,需完成以下基础准备:
- 环境要求:至少3台Linux节点(用于NameNode、JournalNode、ResourceManager等角色),安装相同版本的Hadoop(建议2.7.2及以上)、JDK 1.8+;节点间网络互通,能通过主机名互相访问。
- 基础配置:
- 免密登录:在所有节点间配置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 nn1、192.168.1.102 nn2)。
- 免密登录:在所有节点间配置SSH无密码登录(
- 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.defaultFSname>
<value>hdfs://myclustervalue>
property>
<property>
<name>ha.zookeeper.quorumname>
<value>zk1:2181,zk2:2181,zk3:2181value>
property>
configuration>
2. 配置hdfs-site.xml
在$HADOOP_CONF_DIR/hdfs-site.xml中添加以下配置,定义NameNode、JournalNode和故障转移机制:
<configuration>
<property>
<name>dfs.nameservicesname>
<value>myclustervalue>
property>
<property>
<name>dfs.ha.namenodes.myclustername>
<value>nn1,nn2value>
property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1name>
<value>nn1:8020value>
property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2name>
<value>nn2:8020value>
property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1name>
<value>nn1:50070value>
property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2name>
<value>nn2:50070value>
property>
<property>
<name>dfs.namenode.shared.edits.dirname>
<value>qjournal://journal1:8485;journal2:8485;journal3:8485/myclustervalue>
property>
<property>
<name>dfs.journalnode.edits.dirname>
<value>/opt/module/hadoop-3.3.2/data/journalvalue>
property>
<property>
<name>dfs.client.failover.proxy.provider.myclustername>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
property>
<property>
<name>dfs.ha.automatic-failover.enabledname>
<value>truevalue>
property>
<property>
<name>dfs.ha.fencing.methodsname>
<value>sshfencevalue>
property>
<property>
<name>dfs.ha.fencing.ssh.private-key-filesname>
<value>/home/hadoop/.ssh/id_rsavalue>
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
- 在
nn1上启动第一个NameNode:$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode - 在
nn2上同步元数据并启动第二个NameNode:hdfs namenode -bootstrapStandby # 同步nn1的元数据 $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
6. 启动ZKFC(自动故障转移控制器)
在两个NameNode节点上启动ZKFC进程(用于监控NameNode状态并触发故障转移):
$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc
7. 验证HDFS HA
- 使用
hdfs haadmin命令查看NameNode状态:hdfs haadmin -getServiceState nn1 # 应显示"active" hdfs haadmin -getServiceState nn2 # 应显示"standby" - 访问Web UI(
http://nn1:50070、http://nn2:50070),确认NameNode状态正常。 - 模拟故障:停止
nn1的NameNode进程(hdfs-daemon.sh stop namenode),观察nn2是否自动切换为Active状态。
三、YARN高可用性配置
YARN HA的核心是通过ZooKeeper实现ResourceManager的主备切换。
1. 配置yarn-site.xml
在$HADOOP_CONF_DIR/yarn-site.xml中添加以下配置,定义ResourceManager的HA逻辑:
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabledname>
<value>truevalue>
property>
<property>
<name>yarn.resourcemanager.cluster-idname>
<value>yarn-clustervalue>
property>
<property>
<name>yarn.resourcemanager.ha.rm-idsname>
<value>rm1,rm2value>
property>
<property>
<name>yarn.resourcemanager.hostname.rm1name>
<value>rm1value>
property>
<property>
<name>yarn.resourcemanager.hostname.rm2name>
<value>rm2value>
property>
<property>
<name>yarn.resourcemanager.zk-addressname>
<value>zk1:2181,zk2:2181,zk3:2181value>
property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabledname>
<value>truevalue>
property>
configuration>
2. 启动ResourceManager
在两个ResourceManager节点上启动ResourceManager进程:
$HADOOP_HOME/sbin/start-yarn.sh
使用jps命令验证ResourceManager进程是否启动(显示ResourceManager进程即为成功)。
3. 验证YARN HA
- 访问ResourceManager Web UI(
http://rm1:8088、http://rm2:8088),确认ResourceManager状态正常。 - 模拟故障:停止
rm1的ResourceManager进程(yarn-daemon.sh stop resourcemanager),观察rm2是否自动切换为Active状态。
四、测试故障转移
- HDFS故障转移:
- 停止
nn1的NameNode进程,等待1-2分钟,nn2应自动切换为Active状态。 - 再次启动
nn1,其应自动切换为Standby状态。
- 停止
- YARN故障转移:
- 停止
rm1的ResourceManager进程,rm2应自动切换为Active状态。 - 再次启动
rm1,其应自动切换为Standby状态。
- 停止
通过以上步骤,Hadoop集群即可实现HDFS和YARN的高可用性,确保在节点故障时服务不中断。
以上就是关于“Hadoop在Linux中的高可用性怎么配置”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm