当前位置:   article > 正文

8.Hadoop的HA(高可用)模式集群搭建_hadoopha搭建

hadoopha搭建

本案例软件包:链接:https://pan.baidu.com/s/1ighxbTNAWqobGpsX0qkD8w
提取码:lkjh(若链接失效在下面评论,我会及时更新)
搭建环境:hadoop-3.1.3,jdk1.8.0_162

一、HA模式简介

Hadoop的HA模式是在Hadoop全分布式基础上,利用ZooKeeper等协调工具配置的高可用Hadoop集群。
如果还没有配置全分布式的Hadoop和ZooKeeper可以去这三篇博客查看如何配置
Linux虚拟机的JDK和Hadoop安装
Hadoop的完全分布式搭建
ZooKeeper的完全分布式

Hadoop的HA模式搭建规划

二、HDFS的HA模式

行式存储
由于HDFS的HA模式搭建步骤较多,建议在搭建之前先对虚拟机master,slave01,slvae02拍摄快照,这样如果出现错误可以快速恢复。

1、修改master的/usr/local/hadoop/etc/hadoop/core-site.xml文件

cd /usr/local/hadoop/etc/hadoop/
sudo vim core-site.xml
  • 1
  • 2

将其中中的内容替换为如下内容

<!--指定文件系统的名称-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ggb</value>
    </property>
<!--配置Hadoop运行产生的临时数据存储目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>                 
        <description>Abase for other temporary directories.</description>
    </property>
<!--配置操作HDFS的缓存大小-->
    <property>
        <name>io.file.buffer.size</name>
        <value>4096</value>
    </property>
<!--指定自动故障转移的集群-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave01:2181,slave02:2181</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2、修改master的hdfs-site.xml文件

sudo vim hdfs-site.xml
  • 1

将其中中的内容替换为如下内容

<!--配置HDFS块的副本数(全分布式默认副本为3,最大副本512)-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
<!--设置HDFS块的大小-->
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value>
    </property>
<!--配置HDFS元数据的存储目录-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
<!--配置HDFS真正的数据内容(数据块)的存储目录-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
<!--开启通过Web操作HDFS-->
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
<!--关闭HDFS文件的权限检查-->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
<!--配置虚拟服务名-->
    <property>
        <name>dfs.nameservices</name>
        <value>ggb</value>
    </property>
<!--为虚拟服务指定两个NameNode(目前每个服务器最多两个NameNode)-->
    <property>
        <name>dfs.ha.namenodes.ggb</name>
        <value>nn1,nn2</value>
    </property>
<!--配置NameNode(nn1)的RPC地址-->
    <property>
        <name>dfs.namenode.rpc-address.ggb.nn1</name>
        <value>master:8020</value>
    </property>
<!--配置NameNode(nn2)的RPC地址-->
    <property>
        <name>dfs.namenode.rpc-address.ggb.nn2</name>
        <value>slave01:8020</value>
    </property>
<!--配置NameNode(nn1)的HTTP地址-->
    <property>
        <name>dfs.namenode.http-address.ggb.nn1</name>
        <value>master:50070</value>
    </property>
<!--配置NameNode(nn2)的HTTP地址-->
    <property>
        <name>dfs.namenode.http-address.ggb.nn2</name>
        <value>slave01:50070</value>
    </property>
<!--配置JournalNode通信地址-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;slave01:8485;slave02:8485/ggb</value>
    </property>
<!--配置NameNode出现故障时,启用备用NameNode的代理-->
    <property>
        <name>dfs.client.failover.proxy.provider.ggb</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
<!--配置自动故障转移-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
<!--配置防止脑裂的手段,shell脚本-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>shell(/bin/true)</value>
    </property>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

3、将master的Hadoop目录分发到虚拟机slave01,slave02

sudo scp -r /usr/local/hadoop slave01:/usr/local
sudo scp -r /usr/local/hadoop slave02:/usr/local
  • 1
  • 2

在三台虚拟机分别给予权限

cd /usr/local
 sudo chown -R hadoop:hadoop ./hadoop
  • 1
  • 2

4、在虚拟机slave01上新建ssh公私密钥对

不了解可以先查看一下这篇博客里面详细写了ssh的免密登录Linux虚拟机下的Hadoop集群搭建之Xshell及Xftp的使用和SSH服务配置

ssh-keygen -t rsa
ssh-copy-id hadoop@master
ssh-copy-id hadoop@slave01
ssh-copy-id hadoop@slave02
  • 1
  • 2
  • 3
  • 4

5、将master的HDFS元数据的存储目录分发到slave01

由于在配置文件中我将HDFS的元数据存储目录放置在了Hadoop的安装路径下,所以这步省略,大家根据自身情况上传。

6、启动HDFS的HA模式

(1)首先启动ZooKeeper集群
xzk-start.sh   
  • 1

这是我自己写的脚本命令具体可以看ZooKeeper的全分布式安装和常见问题这篇文章的最后部分,正常的启动命令为分别在三台虚拟机执行

zkServer.sh start
  • 1
(2)分别在三台虚拟机上启动JournalNode进程
hadoop-daemon.sh start journalnode
  • 1
(3)对NameNode进行格式化

一定要先启动JournaNode进程,否则会出错。
首先删除Hadoop下的临时文件,防止NameNode后续启动不起来

cd /usr/local
sudo rm -rf ./hadoop/tmp
sudo rm -rf ./hadoop/logs/*
  • 1
  • 2
  • 3

在这里要注意,先格式化一个namenode,再用另一台namenode同步先前那台namenode。

在master虚拟机执行如下命令

hdfs namenode -format
格式化之后启动namenode
hadoop-daemon.sh start namenode
  • 1
  • 2
  • 3

在第二个namenode节点虚拟机即slave01执行如下命令

同步第一台namenode
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
  • 1
  • 2
  • 3

这时登录HDFS的web界面可以查看到都处于standby,手动切换nn1为强制激活。

hdfs haadmin -transitionToActive nn1
hdfs haadmin -transitionToActive --forcemanual nn1   //这里需要选择y
查看nn1,nn2状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
(4)在master上格式化ZooKeeper
hdfs zkfc -formatZK
  • 1
(5)在master上初始化共享编辑日志
hdfs namenode -initializeShareEdits
  • 1
(6)在master启动HDFS进程
hadoop.sh start
  • 1

这里由于我的虚拟机之前进程无法使用命令同时全部启动,需要单个进程命令启动,所以编写一个一键启动脚本,具体看Hadoop一键启动脚本编写
正常启动命令

start-dfs.sh
  • 1

如果出现以下进程,即为配置成功(由于我这里将yarn也启动了,对照的时候可以也将yarn启动,或者忽略yarn进程)

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

(7)测试

使用命令查看nn1,nn2状态

hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
  • 1
  • 2

当前nn1处于活跃状态,nn2处于备用状态
在这里插入图片描述
也可以通过NameNode Web界面查看nn1,nn2状态。
通过输入http://192.168.64.133:50070
http://192.168.64.133:50070可查看nn2处于备用,nn1处于活跃。
如果在虚拟机外无法访问该网站,在虚拟机内置浏览器可以的话,可能没有关闭防火墙和修改hosts文件,关闭防火墙命令如下

sudo service iptables stop
sudo chkconfig iptables off
  • 1
  • 2

hosts文件在windows10的路径:C:\Windows\System32\drivers\etc
在最下面添加映射例如
在这里插入图片描述

添加之后保存退出即可
在这里插入图片描述
在这里插入图片描述

(8)验证

使用jps命令在master查看NameNode的进程ID
在这里插入图片描述
在这里插入图片描述

使用kill命令强制关闭NameNode进程,使nn1出现故障

kill -9 5439
  • 1

在master上查看nn2的状态,nn2已切换为活跃状态
在这里插入图片描述
再次启动nn1,查看状态
在这里插入图片描述
使用kill命令强制关闭NameNode进程,使nn2出现故障
查看nn1状态,nn1已切换到活跃状态(可能会等待几秒钟)
在这里插入图片描述再次启动nn2,查看状态
在这里插入图片描述NameNode的HA模式配置成功!!!!

三、yarn的HA模式

首先确保Hadoop集群和ZooKeeper集群处于关闭状态

1、修改虚拟机master的yarn-site.xml文件

cd /usr/local/hadoop/etc/hadoop/
sudo vim yarn-site.xml
  • 1
  • 2

将内容修改为

<!--配置NodeManager启动时加载Shuffle服务-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
<!--启动yarn ResourceManager的HA模式-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
<!--配置yarn ResourceManager的集群ID-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>ggb</value>
    </property>
<!--指定yarn ResourceManager实现HA的节点名称-->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
<!--配置启动rm1的主机为虚拟机master-->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>master</value>
    </property>
<!--配置启动rm2的主机为虚拟机slave01-->
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>slave01</value>
    </property>

<!--配置rm1的web地址-->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>master:8088</value>
    </property>
<!--配置rm2的web地址-->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>slave01:8088</value>
    </property>
<!--配置zookeeper集群地址-->
   <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>master:2181,slave01:2181,slave02: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>
  <!--日志聚合-->
  <property>
       <name>yarn.log-aggregation-enable</name>
       <value>true</value>
  </property>
<!--任务历史服务-->
  <property>
       <name>yarn.log.server.url</name>
       <value>http://master:19888/jobhistory/logs/</value>
  </property>
  <property>
       <name>yarn.log-aggregation.retain-seconds</name>
       <value>86400</value>
  </property>


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

2、将master的yarn文件分发到虚拟机slave01,slave02

sudo scp -r yarn-site.xml slave01:/usr/local/hadoop/etc/hadoop
sudo scp -r yarn-site.xml slave02:/usr/local/hadoop/etc/hadoop
  • 1
  • 2

3、查看进程

先启动ZooKeeper,再启动YARN进程

xzk-start.sh //我自己写的脚本命令
start-yarn.sh
  • 1
  • 2

在这里插入图片描述
出现如下进程,即master,slave01均有resourcemanager进程
查看rm1,rm2状态

yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
  • 1
  • 2

在这里插入图片描述

当前rm1为活跃,rm2为备用
访问web页面
在这里插入图片描述
在这里插入图片描述

4、验证自动故障转移

首先使用jps查看master虚拟机中resourcemanager的进程ID
在这里插入图片描述
使用kill命令强制关闭进程

kill -9 9433
  • 1

查看rm2的状态
在这里插入图片描述
在几秒钟后rm2由备用转为活跃状态
重新启动rm1,kill掉rm2尝试
在slave01节点执行jps查询进程ID,使用kill命令强制关闭进程,与上面步骤一样,等待几秒查看rm1,rm2状态
在这里插入图片描述
自此!!!YARN的HA模式配置成功!!!

四、启动和关闭Hadoop的HA模式的注意事项

1、启动

启动Hadoop集群的HA模式,需要在master虚拟机上,先启动ZooKeeper集群,后启动Hadoop集群
如下

xzk-start.sh
hadoop.sh start
以上为我自己写的脚本,正常启动为
分别在三台机器执行
zkServer.sh start
然后在主节点master执行
start-dfs.sh
start-yarn.sh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

执行结果如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
各进程与最开始我们对集群的规划相匹配
请添加图片描述

2、关闭

为确保稳定,在关闭时我们要倒着关闭集群,也就是说先关闭Hadoop的HA模式,再关闭ZooKeeper集群
在这里插入图片描述自此,Hadoop的HA模式全部配置成功!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/852329
推荐阅读
相关标签
  

闽ICP备14008679号