大数据之HDFS-HA高可用集群搭建
1)所谓HA(High Availablity),即高可用(7*24小时不中断服务)。
2)实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。
3)Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF)。
4)NameNode主要在以下两个方面影响HDFS集群 NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启
NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用 HDFS
HA功能通过配置Active/Standby两个NameNodes实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。
第一步:环境准备
- 修改IP
- 修改主机名及主机名和IP地址的映射
- 关闭防火墙
- ssh免密登录
- 安装JDK,配置环境变量等
参考第一篇文章:大数据之01虚拟机运行环境配置搭建
第二步:规划集群
第三步:配置Zookeeper集群
参考第三篇文章:大数据之03Zookeeper分布式集群搭建
第四步:配置HDFS-HA集群
-
在opt目录下创建一个ha文件夹
mkdir ha
-
hadoop-3.1.3拷贝到/opt/ha目录下
cp -r hadoop-3.1.3/ /opt/ha/
-
删除logs文件和data文件,保证Hadoop的纯净
4.编辑配置文件
配置core-site.xml文件 vim core-site.xml
<configuration>
<!--指定HDFS的NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!--指定Hadoop运行时产生文件的储存目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/ha/hadoop-3.1.3/data</value>
</property>
<!--zookeeper位置-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
</configuration>
配置hdfs-site.xml文件 vim hdfs-site.xml
<!--namenode存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/ha/hadoop-3.1.3/data/dir/name</value>
</property>
<!--DataNode存储目录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/ha/hadoop-3.1.3/data</value>
</property>
<!--nameservices-->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!--3个节点地址-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2,nn3</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop102:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop103:8020</value>
</property>
<!--三个节点的http目录-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn3</name>
<value>hadoop104:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop102:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop103:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn3</name>
<value>hadoop104:9870</value>
</property>
<!--QJM集群-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
</property>
<!--代理类-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--隔离机制-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/tan/.ssh/id_rsa</value>
</property>
<!--JN的存储目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/ha/hadoop-3.1.3/data/dir/jn</value>
</property>
<!--开启自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
5.把修改好的hadoop配置文件分发同步到各个节点
xsync /opt/ha/hadoop-3.1.3/etc/hadoop
6.修改HADOOP_HOME环境变量更改到HA目录
[tan@daoop102 hadoop]$ sudo vim /etc/profile.d/my_env.sh
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
改为
##HADOOP_HOME
export HADOOP_HOME=/opt/ha/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
7.把修改好的my_env.sh配置文件分发同步到各个节点
[tan@daoop102 hadoop]$ sudo xsync /etc/profile.d/my_env.sh
8.重启xsell窗口,使环境变量生效
第五步:启动HDFS-HA集群
1.在各个节点上,输入以下命令启动journalnode服务
hdfs --daemon start journalnode
2.查看节点,发现journalnode节点启动成功
[tan@daoop102 bin]$ jpsall
======== hadoop102 ========
11865 JournalNode
11066 QuorumPeerMain
======== hadoop103 ========
9797 QuorumPeerMain
10507 JournalNode
======== hadoop104 ========
9472 JournalNode
8922 QuorumPeerMain
3.在hadoop102上,对其进行格式化,并启动
[tan@daoop102 hadoop-3.1.3]$ pwd
/opt/ha/hadoop-3.1.3
[tan@daoop102 hadoop-3.1.3]$ bin/hdfs namenode -format #格式化
[tan@daoop102 hadoop-3.1.3]$ hdfs --daemon start namenode #启动namenode
4.在hadoop103,hadoop104上,同步hadoop102的元数据信息
[tan@hadoop103 ~]$ hdfs namenode -bootstrapStandby
[tan@hadoop103 ~]$ hdfs --daemon start namenode
[tan@hadoop104 ~]$ hdfs namenode -bootstrapStandby
[tan@hadoop104 ~]$ hdfs --daemon start namenode
第六步:查看web页面显示
第七步:群起节点
zk zkServer.sh start #所有节点启动zk
格式化zk hdfs zkfc -formatZK #在hadoop102上格式化zk
群起节点
[tan@daoop102 hadoop-3.1.3]$ staret-dfs.sh
查看所有启动节点
======== hadoop102 ========
12612 DataNode
13351 DFSZKFailoverController
11865 JournalNode
11066 QuorumPeerMain
12351 NameNode
======== hadoop103 ========
10832 NameNode
11344 DFSZKFailoverController
9797 QuorumPeerMain
11001 DataNode
10507 JournalNode
======== hadoop104 ========
9472 JournalNode
9940 DataNode
9768 NameNode
8922 QuorumPeerMain
10285 DFSZKFailoverController
补充:配置YARN—HA集群
- 环境准备
(1)修改IP
(2)修改主机名及主机名和IP地址的映射
(3)关闭防火墙
(4)ssh免密登录
(5)安装JDK,配置环境变量等
(6)配置Zookeeper集群
1.Yarn集群规划
2.具体配置:vim yarn.site.xml
添加如下配置:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--启用resourcemanager ha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--声明两台resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop102</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop103</value>
</property>
<!--指定zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
<!--启用自动恢复-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定resourcemanager的状态信息存储在zookeeper集群-->
<property>
<name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>
3.分发同步其他节点配置信息
[tan@daoop102 hadoop]$ xsync yarn-site.xml
4.在hadoop103中启动yarn集群
[tan@hadoop103 ~]$ start-yarn.sh
[tan@daoop102 hadoop]$ jpsall
======== hadoop102 ========
12612 DataNode
18198 NodeManager
13351 DFSZKFailoverController
18104 ResourceManager
11865 JournalNode
11066 QuorumPeerMain
12351 NameNode
======== hadoop103 ========
10832 NameNode
11344 DFSZKFailoverController
9797 QuorumPeerMain
16294 ResourceManager
16440 NodeManager
11001 DataNode
10507 JournalNode
======== hadoop104 ========
9472 JournalNode
9940 DataNode
13493 NodeManager
9768 NameNode
8922 QuorumPeerMain
10285 DFSZKFailoverController
3)查看服务状态,如图3-24所示
[tan@daoop102 hadoop]$ yarn rmadmin -getServiceState rm1
standby
[tan@daoop102 hadoop]$ yarn rmadmin -getServiceState rm2
active
查看web页面显示
在浏览器打开hadoop102:8088,会自动跳转为hadoop103:8088
因为hadoop103为active
注意:YARN—HA集群和HDFS—HA集群是俩个独立的过程
Hadoop安装包:
链接:https://pan.baidu.com/s/1008xOtUT21xBdVYIL0t4Cw 提取码:1907
复制这段内容后打开百度网盘手机App,操作更方便哦