(六)Hadoop之HDFS高可用HA集群部署

本文详细介绍了Hadoop 2.0以上版本中引入的高可用性(HA)特性,通过设置主动/被动的冗余NameNode,解决了单点故障问题,确保了HDFS集群的稳定性和可靠性。文章提供了具体的硬件资源配置建议,以及详细的部署步骤,包括配置hdfs-site.xml和core-site.xml文件,启动JournalNode和NameNode进程,进行元数据同步等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(参考官方文档http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html#Hardware_resources

1.背景

在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF)。每个群集都有一个NameNode,如果该机器或进程变得不可用,整个群集将无法使用,直到NameNode重新启动或在单独的计算机上启动。

这在两个主要方面影响了HDFS集群的总体可用性:

对于计划外事件(例如计算机崩溃),在重新启动NameNode之前,群集将不可用。

计划维护事件(如NameNode计算机上的软件或硬件升级)将导致群集停机时间窗口。

HDFS高可用性功能通过提供在具有热备用的主动/被动配置中的同一群集中运行两个冗余NameNode的选项来解决上述问题。这允许在机器崩溃的情况下快速故障转移到新的NameNode,或者为了计划维护而优雅地管理员启动的故障转移。

2.架构

两个名称节点,一个active(激活态),一个是standby(slave待命),slave节点维护足够多状态以便于容灾。

两个节点都和JN守护进程构成组的进行通信。

数据节点配置两个名称节点,分别报告各自的信息。

同一时刻只能有一个激活态名称节点。

为防止脑裂(两个节点都是激活态),JNs只允许同一时刻只有一个节点向其写数据。容灾发生时,active节点的namenode

接管,向jn写入工作。

3.硬件资源

名称节点:硬件配置相同。
JN节点:轻量级进程,至少3个节点,允许挂掉的节点数 (n - 1) / 2.
                不需要再运行辅助名称节点。

4.部署

(1)准备工作

在之前的基础上我们一共有5台客户机,s200(主节点)、s201(从节点)、s202(从节点)、s203(从节点)、s204(辅助名称节点),对应的ip分别为192.168.231.200、192.168.231.201、192.168.231.202、192.168.231.203、192.168.231.204。

保证主节点s200(名称节点)能通过ssh命令无密登录s200(localhost)、201、s202、s203、s204,保证s204(辅助名称节点)能通过ssh命令无密登录s200、s201、s202、s203、s204(localhost)。

我们把之前的/soft/hadoop/etc/目录下的full(完全分布式)文件拷贝并更名为ha,放到/soft/hadoop/etc/目录下。

(2)配置hdfs-site.xml文件

vi /soft/hadoop/etc/hdfs-site.xml

加入以下配置:

<!--配置 nameservice -->
<property>
	<name>dfs.nameservices</name>
	<value>mycluster</value>
</property>

<!-- myucluster下的名称节点两个id -->
<property>
	<name>dfs.ha.namenodes.mycluster</name>
	<value>nn1,nn2</value>
</property>

<!-- 配置每个nn的rpc地址 -->
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn1</name>
	<value>192.168.231.200:8020</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn2</name>
	<value>192.168.231.204:8020</value>
</property>
	
<!-- 配置webui端口 -->
<property>
	<name>dfs.namenode.http-address.mycluster.nn1</name>
	<value>192.168.231.200:50070</value>
</property>
<property>
	<name>dfs.namenode.http-address.mycluster.nn2</name>
	<value>192.168.231.204:50070</value>
</property>

<!-- 名称节点共享编辑目录 -->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://192.168.231.201:8485;192.168.231.202:8485;192.168.231.203:8485/mycluster</value>
</property>

<!-- java类,client使用它判断哪个节点是激活态 -->
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
	
<!-- 脚本列表或者java类,在容灾保护激活态的nn -->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>
		sshfence
		shell(/bin/true)
	</value>
</property>
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/home/gao/.ssh/id_rsa</value>
</property>

<!-- 配置JN存放edit的本地路径 -->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/home/gao/hadoop/journal</value>
</property>


(3)配置core-site.xml文件

vi /soft/hadoop/etc/core-site.xml

加入以下配置:

<!-- 配置hdfs文件系统名称服务 -->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://mycluster</value>
</property>

(4)通过之前的脚本文件xcall.sh把ha文件分发到所有的客户机。

cd /soft/hadoop/etc/

xcall.sh ha

(5)在jn节点(s201、s202、s203)分别启动jn进程
hadoop-daemon.sh start journalnode

(6)启动jn之后,在两个NN(名称节点)之间进行disk元数据同步

(a)如果是全新集群,先格式化文件系统,只需要在一个名称节点(s200)上执行。
 hadoop namenode -format

(b)如果将非HA集群转换成HA集群,复制原nn(名称节点)的metadata到另一个nn.

步骤一
scp -r /home/gao/hadoop/dfs gao@s204:/home/gao/hadoop/

步骤二
 在新的nn(未格式化的名称节点)上运行一下命令,实现待命状态引导。
hdfs namenode -bootstrapStandby        //需要s200为启动状态,提示是否格式化,选择N.
                
在一个NN(名称节点)上执行以下命令,完成edit日志到jn节点的传输。
hdfs namenode -initializeSharedEdits
查看s202,s203是否有edit数据.

启动所有节点.

在名称节点s200中:
hadoop-daemon.sh start namenode        //启动名称节点
hadoop-daemons.sh start datanode        //启动所有数据节点

在辅助名称节点s204中:
hadoop-daemon.sh start namenode        //启动名称节点
 

5.HA管理
    hdfs haadmin -transitionToActive nn1                //切成激活态
    hdfs haadmin -transitionToStandby nn1             //切成待命态
            

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值