HDFS HA 搭建以及配置 ZooKeeper 自动故障转移

30 篇文章 0 订阅

HDFS HA 搭建

配置之前最好将三个基节点的配置文件与Hadoop数据文件夹备份一下,即备份$HADOOP_HOME/etc/hadoop文件夹与$HADOOP_HOME/tmp文件夹:

cp -r hadoop/ backup-hadoop
cp -r tmp/ backup-tmp

在这里插入图片描述

hdfs-site.xml配置

<configuration>
<property>
<name>dfs.replication</name>
<value>2</value> 
</property>
<!-- mycluster为自定义的值,下方配置要使用该值 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value> 
</property>
<!-- 配置两个NameNode的标识符 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value> 
</property>
<!-- 配置两个NameNode所在节点与访问端口 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>centos01:8020</value> 
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>centos02:8020</value> 
</property>
<!-- 配置两个NameNode的web页面访问地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>centos01:50070</value> 
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>centos02:50070</value> 
</property>
<!-- 设置一组JournalNode的URI地址 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://centos01:8485;centos02:8485;centos03:8485/mycluster</value> 
</property>
<!-- JournalNode用于存放元数据和状态信息的目录 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/modules/hadoop-2.8.2/tmp/dfs/jn</value> 
</property>
<!-- 客户端与NameNode通信的Java类 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
</property>
<!-- 解决HA集群脑裂问题 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value> 
</property>
<!-- 上述属性SSH通信使用的密钥文件 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value> 
</property>
</configuration>

core-site.xml配置

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/opt/modules/hadoop-2.8.2/tmp</value>
  </property>
</configuration>

发送到其他集群

scp etc/hadoop/hdfs-site.xml hadoop@centos02:/opt/modules/hadoop-2.8.2/etc/hadoop/
scp etc/hadoop/hdfs-site.xml hadoop@centos03:/opt/modules/hadoop-2.8.2/etc/hadoop/

scp etc/hadoop/core-site.xml hadoop@centos02:/opt/modules/hadoop-2.8.2/etc/hadoop/
scp etc/hadoop/core-site.xml hadoop@centos03:/opt/modules/hadoop-2.8.2/etc/hadoop/

在这里插入图片描述

启动与测试

启动JournalNode进程

删除各个节点$HADOOP_HOME/tmp目录下的所有文件。分别进入各个节点的Hadoop安装目录,执行以下命令,启动三个节点的JournalNode进程:

sbin/hadoop-daemon.sh start journalnode

格式化NameNode

在节点centos01

bin/hdfs namenode -format

启动NameNode1

在节点centos01

sbin/hadoop-daemon.sh start namenode

在节点centos02

bin/hdfs namenode -bootstrapStandby

启动NameNode2

在节点centos02

sbin/hadoop-daemon.sh start namenode

打开浏览器:http://centos01:50070,http://centos02:50070
在这里插入图片描述
在这里插入图片描述

将NameNode1的状态置为active

在节点centos01

bin/hdfs haadmin -transitionToActive nn1

在这里插入图片描述

重新启动HDFS

在节点centos01

sbin/stop-dfs.sh
sbin/start-dfs.sh

再次将NameNode的状态置为active

在节点centos01

bin/hdfs haadmin -transitionToActive nn1

在各节点执行jps命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ZooKeeper进行HDFS自动故障转移

开启自动故障转移功能

在节点centos01:

修改hdfs-site.xml文件,在文件下方加入以下内容:

<!-- 开启自动故障转移,mycluster为自定义配置的nameservice ID值 -->
<property>
	<name>dfs.ha.automatic-failover.enabled.mycluster</name>
    <value>true</value>
</property>

指定ZooKeeper集群

在节点centos01:

修改core-site.xml文件,在文件下方加入以下内容:

<property>
	<name>ha.zookeeper.quorum</name>
    <value>centos01:2181,centos02:2181,centos03:2181</value>
</property>

同步其他节点

在节点centos01:

scp etc/hadoop/hdfs-site.xml hadoop@centos02:/opt/modules/hadoop-2.8.2/etc/hadoop/
scp etc/hadoop/hdfs-site.xml hadoop@centos03:/opt/modules/hadoop-2.8.2/etc/hadoop/

scp etc/hadoop/core-site.xml hadoop@centos02:/opt/modules/hadoop-2.8.2/etc/hadoop/
scp etc/hadoop/core-site.xml hadoop@centos03:/opt/modules/hadoop-2.8.2/etc/hadoop/

停止HDFS集群

sbin/stop-dfs.sh

启动ZooKeeper集群

在三个节点中分别执行:

bin/zkServer.sh start

初始化在ZooKeeper中的状态

在节点centos01:

bin/hdfs zkfc -formatZK

启动HDFS集群

在节点centos01:

sbin/start-dfs.sh

启动ZKFC守护进程

在节点centos01centos02:

sbin/hadoop-daemon.sh start zkfc

先启动谁谁就是active(我先启动的centos01)

在这里插入图片描述
在这里插入图片描述

测试HDFS自动故障转移

首先在节点centos01中杀掉NameNode的进程,然后执行hdfs命令。若能成功,说明自动故障转移成功

在这里插入图片描述

此时centos01节点的NameNode已失效,centos02节点的NameNode自动激活为active(说明自动故障转移成功)
在这里插入图片描述

在这里插入图片描述

再测试hdfs命令,虽然有报错,但是的确还是可以成功执行:
在这里插入图片描述


在这里插入图片描述

接下来我们再在节点centos01重启NameNode:

sbin/hadoop-daemon.sh start namenode

在这里插入图片描述

此时centos01节点复活自动变为standby状态,centos02节点依旧为active:
在这里插入图片描述

在这里插入图片描述

再次测试hdfs命令,成功,没有报错:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop High Availability (HA) 集群是为了提高Apache Hadoop集群的可靠性和可用性而设计的一种架构。它通过将关键服务(如NameNode和JobTracker)冗余部署,并在主节点故障自动切换到备用节点,保证了数据处理任务的持续进行。下面是Hadoop HA集群搭建的基本步骤: 1. **安装并配置Hadoop**: - 安装Hadoop到两个或更多节点上,每个节点都是一个独立的Hadoop集群实例。 - 配置`core-site.xml`和`hdfs-site.xml`文件,设置集群的名称节点(NameNode)和数据节点(DataNodes)。 2. **启用HDFS HA**: - 在`hdfs-site.xml`中,设置`ha.fencing.methods`指定节点之间的心跳检测方法,例如SSH或JMX。 - 创建一个HDFS HA配置文件,如`core-site.xml.template`,并在实际集群中创建对应的配置文件。 3. **配置高可用NameNode**: - 设置`ha.zookeeper.quorum`为ZooKeeper集群地址,用于选举新的Active NameNode。 - 配置`dfs.nameservice.id`定义NameNode服务名。 - 在`hdfs-site.xml`中启用`dfs.ha.namenodes.<nameservice-id>`属性。 4. **设置Secondary NameNode**: - 在`hdfs-site.xml`中启用`dfs.ha.automatic-failover.enabled`,并配置`dfs.ha.automatic-failover.retry-interval`和`dfs.ha.automatic-failover.timeout`。 5. **配置ZooKeeper**: - 如果没有使用ZooKeeper,需要配置一个或多个ZooKeeper服务器作为NameNode服务选举的协调器。 6. **启动HDFS服务**: - 启动HDFS集群,包括两个NameNode(一个为主,一个为备)和足够的DataNodes。 7. **验证集群状态**: 使用`hdfs haadmin`命令检查集群状态、启动/关闭心跳检测和手动触发Failover。 8. **配置YARN HA**: 对于YARN资源管理器,类似地,需要配置ResourceManager HA(RMHA),并设置HA模式。 9. **测试和监控**: 确保服务可用,执行负载测试,并设置监控工具(如Hadoop Metrics2或Ganglia)来监控性能和异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值