大数据学习之hadoopHA版本的搭建

前言:

本篇文章针对于2020秋季学期的复习操作,一是对该学期的巩固,二是让老师知道他的努力没有白费,同时,在此感谢徐老师对我们的精心教导…

一、概述

集群规模

在这里插入图片描述

大致步骤

①、上传解压重命名环境变量source生效

②、修改配置文件

hadoop-env.sh
yarn-env.sh
hdfs-site.xml
core-site.xml
mapred-site.xml
yarn-site.xml
slaves (直接翻译为“奴隶”,作用是:用来标识从节点的ip地址的别名)

③启动集群

④验证并完善shell脚本

二、实操开始

前提(准备)

jdk、hadoop、zk、三台机器

在这里插入图片描述
删除我以前的普通hadoop文件
在这里插入图片描述
配置Myslave01root到Myslave01、Myslave02的免密登陆
原因→我们的Myslave01是我们的第二个NameNode设计的节点有必要设置免密登陆
在这里插入图片描述
这里我主机名打成slave01所以第一次出错了

解压重命名→环境已经配置了就不用配置了前提是你的目录是一样的

[root@Mymaster soft]# tar -zxvf hadoop-2.7.6.tar.gz -C ../
。。。。。。。。

在这里插入图片描述

修改配置文件

还记得前面介绍的notepad++吗?现在的配置文件多而且乱,建议使用它来操作

hdfs→core-site.xml, hdfs-site.xml,slaves

hdfs-site.xml

<configuration>
			<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
			<property>
				<name>dfs.nameservices</name>
				<value>ns1</value>
			</property>
			<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
			<property>
				 <name>dfs.ha.namenodes.ns1</name>
				 <value>nn1,nn2</value>
			</property>
			<!-- 
				nn1的RPC通信地址, hadoop version 1,
				hdfs协议,NameNode进程的端口号是:9000,hadoop2 :8020 
			-->
			<property>
				<name>dfs.namenode.rpc-address.ns1.nn1</name>
				<value>Mymaster:8020</value>
			</property>
			<!-- nn1的http通信地址 -->
			<property>
				<name>dfs.namenode.http-address.ns1.nn1</name>
				<value>Mymaster:50070</value>
			</property>
			<!-- nn2的RPC通信地址 -->
			<property>
				<name>dfs.namenode.rpc-address.ns1.nn2</name>
				<value>Myslave01:8020</value>
			</property>
			<!-- nn2的http通信地址 -->
			<property>
				<name>dfs.namenode.http-address.ns1.nn2</name>
				<value>Myslave01:50070</value>
			</property>
			<!-- 指定NameNode的edits数据在JournalNode上的存放位置 -->
			<property>
				<name>dfs.namenode.shared.edits.dir</name>
				<value>qjournal://Mymaster:8485;Myslave01:8485;Myslave02:8485/ns1</value>
			</property>
			<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
			<property>
				<name>dfs.journalnode.edits.dir</name>
				<value>/opt/hadoop-repo/journal</value>
			</property>
			<property>  
				<name>dfs.namenode.name.dir</name>  
				<value>/opt/hadoop-repo/name</value>  
			</property>  
			<property>  
				<name>dfs.datanode.data.dir</name>  
				<value>/opt/hadoop-repo/data</value>  
			</property> 
			<!-- 开启NameNode失败自动切换 -->
			<property>
				<name>dfs.ha.automatic-failover.enabled</name>
				<value>true</value>
			</property>
			<!-- 配置失败自动切换实现方式 -->
			<property>
				<name>dfs.client.failover.proxy.provider.ns1</name>		
				<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
			</property>
			<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制占用一行-->
			<property>
				<name>dfs.ha.fencing.methods</name>
				<value>
				   sshfence
				   shell(/bin/true)
				</value>
			</property>
			<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
			<property>
				<name>dfs.ha.fencing.ssh.private-key-files</name>
				<value>/root/.ssh/id_rsa</value>
			</property>
			<!-- 配置sshfence隔离机制超时时间 -->
			<property>
				<name>dfs.ha.fencing.ssh.connect-timeout</name>
				<value>30000</value>
			</property>
		</configuration>

在这里插入图片描述
ctrl + s保存


core-site.xml

<configuration>
			<!-- 指定hdfs的nameservice为ns1 -->
			<property>
				<name>fs.defaultFS</name>
				<value>hdfs://ns1</value>
			</property>
			<!-- 指定hadoop临时目录 -->
			<property>
				<name>hadoop.tmp.dir</name>
				<value>/opt/hadoop-repo/tmp</value>
			</property>
			<!-- 指定zookeeper地址 -->
			<property>
				<name>ha.zookeeper.quorum</name>
				<value>Mymaster:2181,Myslave01:2181,Myslave02:2181</value>
			</property>
</configuration>

在这里插入图片描述


slaves
在这里插入图片描述


yarn→yarn-site.xml,mapred-site.xml

yarn-site.xml

<configuration>
			<!-- 开启RM高可靠 -->
			<property>
			   <name>yarn.resourcemanager.ha.enabled</name>
			   <value>true</value>
			</property>
			<!-- 指定RM的cluster id -->
			<property>
			   <name>yarn.resourcemanager.cluster-id</name>
			   <value>yrc</value>
			</property>
			<!-- 指定RM的名字 -->
			<property>
			   <name>yarn.resourcemanager.ha.rm-ids</name>
			   <value>rm1,rm2</value>
			</property>
			<!-- 分别指定RM的地址 -->
			<property>
			   <name>yarn.resourcemanager.hostname.rm1</name>
			   <value>Myslave01</value>
			</property>
			<property>
			   <name>yarn.resourcemanager.hostname.rm2</name>
			   <value>Myslave02</value>
			</property>
			<!-- 指定zk集群地址 -->
			<property>
			   <name>yarn.resourcemanager.zk-address</name>
			   <value>Mymaster:2181,Myslave01:2181,Myslave02:2181</value>
			</property>
			<property>
			   <name>yarn.nodemanager.aux-services</name>
			   <value>mapreduce_shuffle</value>
			</property>
			<!-- 开启日志输出-->
			<property>    
				<name>yarn.log-aggregation-enable</name>    
				<value>true</value>    
			</property>
</configuration>

在这里插入图片描述


mapred-site.xml

<configuration>
			<!-- mr依赖的框架名称 yarn-->
			<property>
				<name>mapreduce.framework.name</name>
				<value>yarn</value>
			</property>
			<!-- mr转化历史任务的rpc通信地址-->
			<property>  
				<name>mapreduce.jobhistory.address</name>  
				<value>Myslave01:10020</value>  
			</property>
			<!-- mr转化历史任务的http通信地址-->
			<property>  
				<name>mapreduce.jobhistory.webapp.address</name>  
				<value>Myslave01:19888</value>  
			</property>
			<!-- 会在hdfs的根目录下面创建一个history的文件夹,存放历史任务的相关运行情况-->
			<property>
				<name>yarn.app.mapreduce.am.staging-dir</name>
				<value>/history</value>
			</property>
			<!-- map和reduce的日志级别-->
			<property>
				<name>mapreduce.map.log.level</name>
				<value>INFO</value>
			</property>
			<property>
				<name>mapreduce.reduce.log.level</name>
				<value>INFO</value>
			</property>
</configuration>

在这里插入图片描述


搞定!!!!

删除以往其他节点的hadoop文件
[root@Mymaster hadoop-repo]# ssh Myslave01
Last login: Thu Feb  4 19:55:56 2021 from mymaster
[root@Myslave01 ~]# rm -rf /opt/hadoop
[root@Myslave01 ~]# rm -rf /opt/hadoop-repo/
[root@Myslave01 ~]# ssh Myslave02
Last login: Thu Feb  4 19:49:50 2021 from myslave01
[root@Myslave01 ~]# rm -rf /opt/hadoop
[root@Myslave01 ~]# rm -rf /opt/hadoop-repo/

同步到其他节点

[root@Mymaster hadoop]# scp -r /opt/hadoop/ root@Myslave01:/opt/hadoop/
。。。。。。。。
[root@Mymaster hadoop]# scp -r /opt/hadoop/ root@Myslave02:/opt/hadoop/
。。。。。。。。
[root@Mymaster hadoop]# ssh Myslave01 'source /etc/profile.d/bigdata-etc.sh '
[root@Mymaster hadoop]# ssh Myslave02 'source /etc/profile.d/bigdata-etc.sh '

启动集群

先启动我们的zk集群

在这里插入图片描述

启动JournalNode进程

在这里插入图片描述

格式化NomeNode

在这里插入图片描述

将Mymaster节点上NameNode进程格式化后产生的元数据信息跨节点拷贝到slave01上

在这里插入图片描述

在NameNode进程所处的任何一台节点上格式化zkfc(此处选用Mymaster节点)

在这里插入图片描述

一样的分开启动,在Mymaster先启动dfs

在这里插入图片描述

在Myslave01启动yarn

在这里插入图片描述

在Myslave02启动ResourceManager

在这里插入图片描述

ok!!!所有进程启动都没有问题!!!

三、验证

查看webNameNode状态

Mymaster的

在这里插入图片描述

Myslave01的

在这里插入图片描述

验证上传下载查看

相关操作

在这里插入图片描述

Mymasterweb查看

在这里插入图片描述

Myslave01web查看

在这里插入图片描述

验证yarn的可用性

ResourceManager的状态

在这里插入图片描述
并且http://Myslave02:8088/ →自动跳转到active状态的ResourceManager节点上

运行官方提供的案例之wordcount(用来统计hdfs指定目录下各个单词出现的次数)

[root@Mymaster input]#  yarn jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount hdfs://Mymaster:8020/input hdfs://Mymaster:8020/output

在这里插入图片描述

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

mapreduce是比较慢的我们可以看到进度情况以及完成情况就是没有问题的

四、优化启动shell文件

myself-start-all.sh

在这里插入图片描述

#!/bin/sh

  #①停止hadoop集群
    #a)在Myslave02节点上关闭resourcemanager
ssh Myslave02 'yarn-daemon.sh stop resourcemanager'
    #  b)在Myslave01节点上执行stop-yarn.sh
ssh Myslave01 'stop-yarn.sh'
    # c)在Mymaster节点执行stop-dfs.sh
ssh Mymaster 'stop-dfs.sh'
nodes=$(cat /opt/myself-shells/nodes)
#echo $nodes
  #②停止zookeeper集群(通过循环来停止)
for zk in $nodes
do
    ssh root@$zk 'zkServer.sh stop'
done

myself-stop-all.sh

在这里插入图片描述

#!/bin/sh

  #①停止hadoop集群
    #a)在Myslave02节点上关闭resourcemanager
ssh Myslave02 'yarn-daemon.sh start resourcemanager'
    #  b)在Myslave01节点上执行stop-yarn.sh
ssh Myslave01 'stop-yarn.sh'
    # c)在Mymaster节点执行stop-dfs.sh
ssh Mymaster 'stop-dfs.sh'
nodes=$(cat /opt/myself-shells/nodes)
#echo $nodes
  #②停止zookeeper集群(通过循环来停止)
for zk in $nodes
do
    ssh root@$zk 'zkServer.sh stop'
done

关集群测试

在这里插入图片描述

开集群测试

在这里插入图片描述

五、验证HA可用

验证NameNode进程的HA

手动干掉处于active的NameNode→模拟active状态的NameNode突然宕机的情况

在这里插入图片描述

查看web情况可以看到我们的Myslave01的NameNode变成了active,master,通过http访问NameNode进程,会报错

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

当然这种情况的集群是没问题的增删改查等等
在这里插入图片描述
在这里插入图片描述

再次重启Mymaster节点的NameNode

在这里插入图片描述
查看web并不会变成active,可知状态切换的条件是处于active的节点宕机
在这里插入图片描述

验证ResourceManager进程的HA

手动干掉处于active的ResourceManager→模拟active状态的ResourceManager突然宕机的情况

在这里插入图片描述

查看ResourceManager web

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

运行mapreduce验证

略,正常的是可以运行的

重启ResourceManager

在这里插入图片描述
http://Myslave01:8088/ →自动跳转到active状态的ResourceManager节点上
完美搭建hadoopHA版本!!!!!!!!!!!!

最后,关闭集群

在这里插入图片描述

那么,本次的复习到此结束了!!!!!!祝北方的读者小年快乐!并且预祝南方的读者明天小年快乐鸭!!

编写于2021-2-4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值