011 Hdfs的ha高可用配置 Hdfs的ha测试

如下图 单节点故障问题 就是老大只有一个 一旦老大挂掉了 服务就结束了 如果NameNode挂掉后 其他节点也无法使用
在这里插入图片描述
那么2.x
多了这么一个 Quorun-based Storage Share Data 是 共享日志的存储
ZKFC是Zookeeper的失败控制转移器
Health Monitor,Failover 是健康监控

就是说吧 先看左边 的NameNode是Active状态 ZKFC监控着NameNode 如果 NameNode不健康了
就转移到右边的准备状态的的NameNode
就是左边的坏了没关系 右边的还能继续提供服务
在这里插入图片描述

在这里插入图片描述
即用QJM的方式快速搭建HA hdfs的集群

1.Hdfs的ha配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
namenode弄两个
jouranlnode奇数个

在这里插入图片描述

现在开始弄了

第一步 如果你开了集群 先停止掉 stop-all.sh
然后要备份一下 万一以后有什么需要用到普通集群了 所以需要备份
mv /usr/local/hadoop-2.7.1/ /usr/local/hadoop-2.7.1_bak
(这里使用了mv 直接移动了 改了名字 做成了备份 然后吧
重新解压hadoop安装包 重新安装了
我觉得吧 肯定是视频上忘了copy 这个东西 哈哈 不过只能跟着做 谁让咱不会呢)

在这里插入图片描述

在这里插入图片描述
记住是三个机子的hadoop都要移动备份

第二步 然后重新解压在home下的hadoop安装包(在hadoop01下进行)

tar -zxvf /home/hadoop-2.7.1.tar.gz -C /usr/local/

别忘了大C

在这里插入图片描述
进入hadoop目录 删除doc文件 便于发送


这里我们使用notepad++的插件操作
使用的插件名为NppFTP 至于怎么安装
在这里插入图片描述
然后点击这个 再点击Profile Setting 然后新建一个在这里插入图片描述
连接hadoop01
在这里插入图片描述
然后连接一下
在这里插入图片描述
上图右上角就是hadoop01的根目录
找到local下面的usr下面的hadoop-2.7.1安装目录 etc下面的hadoop的配置文件
在这里插入图片描述
在修改之前注意右下角的编码格式
在这里插入图片描述
要改成utf-8
最上面菜单栏有调编码的一栏

总共配置4个文件
①先修改hadoop-env.sh

在这里插入图片描述
查找jdk目录修改
在这里插入图片描述
改成这个
这样第一个文件就修改好了
在这里插入图片描述
②core-site.xml
在这里插入图片描述

<!--配置hdfs文件系统的命名空间-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://qf</value>
</property>
<!--配置操作hdfs的缓存大小-->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!--配置临时数据存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hahadoopdata/tmp</value>
</property>
<!-- 指定zk的集群地址 用来协调namenode的服务 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>

以前配hdfs不是写的hadoop01吗 这里写qf是因为到时候01 02 不一定用的哪一个 所以写一个虚拟的qf名

③hdfs-site.xml

这里有个错误 不要急着复制上 看看下面测试启动上传文件部分 写出来了 改了之后再复制

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
这个网址有相关内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


<!--副本数 也叫副本因子 不是容错嘛-->
<!--副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--块大小_hadoop2_128M_hadoop1_64M_hadoop3.0_256M-->
<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>
<!--hdfs的元数据存储位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hahadoopdata/dfs/name</value>
</property>
<!--hdfs的数据存储位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hahadoopdata/dfs/data</value>
</property>


<!--指定hdfs的虚拟服务名-->
<property>
  <name>dfs.nameservices</name>
  <value>qf</value>
</property>
<!--指定hdfs的虚拟服务名下的namenode的名字-->
<property>
  <name>dfs.ha.namenodes.qf</name>
  <value>nn1,nn2</value>
</property>
<!--指定namenode的rpc内部通信地址-->
<property>
  <name>dfs.namenode.rpc-address.qf.nn1</name>
  <value>hadoop01:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.qf.nn2</name>
  <value>hadoop02:8020</value>
</property>
<!--指定namenode的web ui界面地址-->
<property>
  <name>dfs.namenode.http-address.qf.nn1</name>
  <value>hadoop01:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.qf.nn2</name>
  <value>hadoop02:50070</value>
</property>
<!--指定jouranlnode数据共享目录 namenode存放元数据信息的Linux本地地址 这个目录不需要我们自己创建-->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/qf</value>
</property>
<!--指定jouranlnode本地数据共享目录-->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/hahadoopdata/jouranl/data</value>
</property>
<!-- 开启namenode失败进行自动切换 -->
 <property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>
<!--指定namenode失败进行自动切换的主类 datanode存放用户提交的大文件的本地Linux地址 这个目录不需要我们自己创建-->
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!--防止多个namenode同时active(脑裂)的方式 采用某种方式杀死其中一个-->
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
</property>
<property>
  <name>dfs.ha.fencing.ssh.connect-timeout</name>
  <value>30000</value>
</property>

跟视频中不一样的地方
在这里插入图片描述
视频中使用9000这个端口

④slaves
添加三个主机名
在这里插入图片描述

这样ha就配置完成(hadoop01)的
然后我们看一下再说
在这里插入图片描述
在这里插入图片描述
有内容 感觉没啥问题 保存退出wq

然后最后一步
分发 到02 03的机子上
在这里插入图片描述

scp -r ../hadoop-2.7.1 hadoop02:/usr/local/

scp -r ../hadoop-2.7.1 hadoop03:/usr/local/

这样之后 我们开始做免登陆的配置
之前我们做了01到01 02 03 的免登陆
现在我们做 02 到 01 02 03的 因为现在02也有老大namenode了

在02下 输入这个 然后一直回车 直至出现图案

ssh-keygen -t rsa

在这里插入图片描述
在这里插入图片描述
然后
登录 ssh hadoop02 是需要输入密码的
exit退出
输入这句话 ssh-copy-id hadoop02 输入yes 再输入密码
ssh hadoop02 再登录 不需要输入密码
exit 退出

在这里插入图片描述
同样的方法 设置01 03 免登陆(在02下)
输入这句话 ssh-copy-id hadoop01输入yes 再输入密码
ssh hadoop01 再登录 不需要输入密码
exit 退出

输入这句话 ssh-copy-id hadoop03 输入yes 再输入密码
ssh hadoop03 再登录 不需要输入密码
exit 退出


这样 到此为止
免登陆 配置完了
四个文件配置完了

然后就是 这里我们已经发送了 先发送的(就是上面的scp)

在这里插入图片描述
现在我们按照顺序执行 启动

先启动zk zkServer.sh 三台都要启动
然后jps查看服务是否启动 QuorumPeerMain
在这里插入图片描述
②启动journalnode服务 我们使用多个服务一次启动

hadoop-daemons.sh start journalnode

在这里插入图片描述
jps会显示journalnode进程服务
在这里插入图片描述

挑选01 02 任意一台格式化 然后启动namenode
这里我们选02

hdfs namenode -format

格式化后会创建下图这个文件夹 我们在配置文件里写的那个
在这里插入图片描述
而且下面是有东西的
在这里插入图片描述
然后单个启动namenode

hadoop-daemon.sh start namenode

在这里插入图片描述

在另外一台namenode的机子上拉取元数据 (也可以使用复制)
即在01上

hdfs namenode -bootstrapStandby

在执行这条命令之前 我们01是没有这个目录的
在这里插入图片描述

在这里插入图片描述
执行完成之后我们再看看 有了 这就代表拉取元数据成功
在这里插入图片描述
当然拉取也行 你要是直接将目录copy过来也行

格式化zkfc

我们在01下登录 zkCli.sh
然后ls / 结果发现还有别的 我们先删掉rmr 吧 只留下zookeeper这一个根节点就行
在这里插入图片描述
然后我们在02下 格式化 记得先登录zkCli.sh

hdfs zkfc -formatZK

在这里插入图片描述
执行前后对比
在这里插入图片描述
多了一个hadoop-ha节点
该节点下面还有qf
在这里插入图片描述
qf下面没有东西 启动之后就有东西了
在这里插入图片描述

启动

start-dfs.sh

在这里插入图片描述

这样我们看到
01
在这里插入图片描述
02
在这里插入图片描述
03
在这里插入图片描述
我们看到01 02都是5个服务(01多了个ZookeeperMain是因为我连接着notepad++还没断开)
03是三个

测试

一 先看对应的进程是否对 (就是上面的jps后看 已经完成)
二 再看web ui是否正常

192.168.37.111:50070

在这里插入图片描述
112
即hadoop02
是active的
在这里插入图片描述

三 在hdfs读写文件

在这里我遇到了一个问题
如下图 就是告诉我qf这个虚拟主机名出问题了
导致hdfs 等这一系列命令不可用
那咋办 我重新2倍速回看了安装的那个视频
发现我有个地方(是配置文件hdfs-site.xml文件)有个没有改成qf还是官网上的mycluster
难受
这样我就重新 一个一个01 02 03 改了三个地方vi /usr/local/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
再次使用hdfs的相关命令就好了
在这里插入图片描述
在这里插入图片描述

首先 hdfs dfs -ls / 查看hdfs根目录下是否有东西
是没有东西的
在这里插入图片描述
然后我们将home下的一个文件上传到hdfs上

hdfs dfs -put /home/shell/if.sh /

我们查看web网页的 已经上传了
在这里插入图片描述
我们在03 即小弟下面查看
hdfs dfs -cat /if.sh
在这里插入图片描述
四 然后制造一个namenonde失败 关闭即可 查看是否能自动切换
就是杀死02的namenode的进程
先用jps查看02的namenode进程的前边的号
然后使用kii -9 号码 杀死进程
在这里插入图片描述
然后我们看web
02刷新后不能访问
01由standby变为active
在这里插入图片描述
这样一个老大挂掉了还能有另外一个老大顶上
我们再次使用小弟查看文件
在这里插入图片描述
仍然能查看 运行正确

然后我们如果发现02异常了 启动02的namenode

hadoop-daemon.sh start namenode

在这里插入图片描述
启动成功 但是我们查看.web
02的状态是standby
因为01的namenode没有出问题 所以还是01为老大
在这里插入图片描述
但是如果我们把01切掉
在这里插入图片描述
02就会变回active
在这里插入图片描述
查看文件仍能查看
在这里插入图片描述
没有问题了
ok
2.Hdfs的ha测试

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值