Linux企业运维——Hadoop大数据平台(下)hdfs高可用、Yarn高可用、hbase高可用

一、Hadoop高可用

1.1、zoomkeeper集群部署

由于一个HDFS集群由一个NameNode节点和多个DataNode节点组成,一旦NameNode节点宕机,那么HDFS将不能进行文件的上传与下载。
Hadoop依赖Zookeeper实现HDFS集群的高可用,由状态为Active的NameNode节点对外提供服务,而状态为StandBy的NameNode节点则负责数据的同步,一旦状态为Active的NameNode节点宕机,则状态为StandBy的NameNode节点将会切换为Active状态对外提供服务。

需要五台虚拟机:两个主节点做高可用server1、server5(2G内存),其余是DN(1G内存)
真实主机再开启一台虚拟机server5
在这里插入图片描述
server1停止所有运行的节点,删除/tmp目录下的所有数据,清理hadoop
在这里插入图片描述
server2、server3和server4也都把/tmp目录下的数据清空
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
server5安装nfs
在这里插入图片描述
server5添加hadoop用户,挂载nfs中server1分享的/home/hadoop目录到本地的/home/hadoop目录,然后切换到hadoop用户进行测试
在这里插入图片描述
真实主机将zookeeper包发送到server1的/home/hadoop目录下
在这里插入图片描述
server1解压zookeeper包然后切换到zookeeper目录下,复制zoo_sample.cfg文件为zoo.cfg,然后编辑,因为是nfs文件系统所以其他节点的内容也同步修改了
在这里插入图片描述
指定数据目录为/tmp/zookeeper,指定server2在zk集群中节点编号为1,依次类推,server3的编号为2,server4的编号为3,2888端口用来同步数据,3888端口用来选举leader
在这里插入图片描述
server2创建/tmp/zookeeper目录,将自己的编号1输入到zookeeper/myid内,开启zkServer
在这里插入图片描述
server3创建/tmp/zookeeper目录,将自己的编号2输入到zookeeper/myid内,开启zkServer
在这里插入图片描述
server4创建/tmp/zookeeper目录,将自己的编号3输入到zookeeper/myid内,开启zkServer
在这里插入图片描述
server2查看自己的zk集群状态,显示follower
在这里插入图片描述
server3查看自己的zk集群状态,显示leader
在这里插入图片描述
server4查看自己的zk集群状态,显示follower
在这里插入图片描述
server2连接zookeeper作为查询窗口
在这里插入图片描述
查看DFS虚拟目录
在这里插入图片描述

1.2、hdfs高可用

server1编辑core-site.xml文件,指定hdfs的NN为master,指定zookeeper集群主机的地址和端口

[hadoop@server1 hadoop]$ cat core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://masters</value>
    </property>

    <property>
        <name>ha.zookeeper.quorum</name>
        <value>172.25.33.2:2181,172.25.33.3:2181,172.25.33.4:2181</value>
    </property>
</configuration>

在这里插入图片描述
再编辑hdfs-site.xml
在这里插入图片描述

[hadoop@server1 hadoop]$ cat hdfs-site.xml 
<!-- Put site-specific property overrides in this file. -->

<configuration>
	##	指定副本数为3
    <property>
        <name>dfs.replication</name>
        <value>3</value>   
    </property>

	##	指定 hdfs 的 nameservices 为 masters,要与 core-site.xml 中的设置一致
	<property>
		<name>dfs.nameservices</name>
		<value>masters</value>
	</property>
	
	##	masters 含有两个 namenode 节点,名称为 h1 和 h2 (名称可自定义)
	<property>
		<name>dfs.ha.namenodes.masters</name>
		<value>h1,h2</value>
	</property>
	
	##	h1 节点的 rpc 通信地址
	<property>
		<name>dfs.namenode.rpc-address.masters.h1</name>
		<value>172.25.33.1:9000</value>
	</property>
	
	##	h1 节点的 http 通信地址
	<property>
		<name>dfs.namenode.http-address.masters.h1</name>
		<value>172.25.33.1:9870</value>
	</property>
	
	##	h2 节点的 rpc 通信地址
	<property>
		<name>dfs.namenode.rpc-address.masters.h2</name>
		<value>172.25.33.5:9000</value>
	</property>
	
	##	h2 节点的 http 通信地址
	<property>
		<name>dfs.namenode.http-address.masters.h2</name>
		<value>172.25.33.5:9870</value>
	</property>
	
	##	NameNode 元数据在 JournalNode 上的存放位置
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://172.25.33.2:8485;172.25.33.3:8485;172.25.33.4:8485/masters</value>
	</property>
	
	##	JournalNode 在本地磁盘存放数据的位置
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/tmp/journaldata</value>
	</property>
	
	##	开启 NameNode 失败自动切换
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
	
	##	配置失败自动切换实现方式
	<property>
		<name>dfs.client.failover.proxy.provider.masters</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>/home/hadoop/.ssh/id_rsa</value>
	</property>
	
	##	sshfence 隔离机制超时时间
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>30000</value>
	</property>
</configuration>

server2查看java进程看到开启了QuorumPeerMain,再开启journalnode,三个DN节点按照编号顺序依次开启
在这里插入图片描述
server3开启journalnode
在这里插入图片描述
server4开启journalnode
在这里插入图片描述
server1格式化 HDFS 集群
在这里插入图片描述
将/tmp/hadoop-hadoop里的数据拷贝到server5的/tmp目录下,因为NN数据默认存放在/tmp目录下
在这里插入图片描述
在server1上执行格式化zookeeper
在这里插入图片描述
server2作为查询窗口连接zookeeper
在这里插入图片描述
可以正常访问文件系统
在这里插入图片描述
server1启动hdfs集群,完成后可以看到DFSZKFailoverController开启
在这里插入图片描述
server2刚才已经连接了zookeeper,查看NN主备,可以看到server1是主
在这里插入图片描述
在server1的hadoop管理页面也可以看到server1状态为活跃
在这里插入图片描述
server5 的状态为备用
在这里插入图片描述
server1新建/user/hadoop虚拟目录,上传input目录
在这里插入图片描述
先登录server1的hadoop管理页面查看,可以正常访问/user/hadoop/input里的内容
在这里插入图片描述
查看capacity-scheduler.xml文件可以看到server2、server3和server4为hadoop集群主机
在这里插入图片描述
而在server5的hadoop管理页面就无法查看目录内容
在这里插入图片描述

1.3、高可用测试

server1查看NN进程id,杀掉该进程
在这里插入图片描述
server2与zookeeper保持着连接,查看NN主备,可以看到现在server5是主
在这里插入图片描述
浏览器访问server1的hadoop主页,无法访问
在这里插入图片描述
再访问server5的hadoop管理页面,可以看到现在显示server5是active
在这里插入图片描述
server5现在也可以正常查看文件系统目录内容
在这里插入图片描述
server1查看input目录正常,现在重新开启namenode进程
在这里插入图片描述
server1的hadoop管理页面现在可以正常访问,显示状态为备用
在这里插入图片描述

二、Yarn高可用

1.1、RM高可用部署

由于一个Yarn集群由一个ResourceManager节点和多个NodeManager节点组成,一旦ResourceManager节点宕机,那么YARN集群将不能进行资源的调度。

server1编辑yarn-site.xml
在这里插入图片描述

[hadoop@server1 hadoop]$ cat yarn-site.xml
<configuration>
	##	配置可以在 nodemanager 上运行 mapreduce 程序
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    ##	指定环境变量
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
    </property>
	##	激活 RM 高可用
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	##	指定 RM 的集群 id
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>RM_CLUSTER</value>
	</property>
	##	定义 RM 的节点
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
	</property>
	##	指定 RM1 的地址
	<property>
		<name>yarn.resourcemanager.hostname.rm1</name>
		<value>172.25.33.1</value>
	</property>
	##	指定 RM2 的地址
	<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>172.25.33.5</value>
	</property>
	##	 激活 RM 自动恢复
	<property>
		<name>yarn.resourcemanager.recovery.enabled</name>
		<value>true</value>
	</property>
	##	配置 RM 状态信息存储方式,有 MemStore 和 ZKRMStateStore
	<property>
		<name>yarn.resourcemanager.store.class</name>
		<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
	</property>
	##	配置为 ZKRMStateStore 存储时,指定 zookeeper 集群的地址
	<property>
		<name>yarn.resourcemanager.zk-address</name>
		<value>172.25.33.2:2181,172.25.33.3:2181,172.25.33.4:2181</value>
	</property>
</configuration>

server1启动yarn服务,可以看到ResourceManager是server1和server5
在这里插入图片描述
在server1和server5上均可以看到ResourceManager进程
在这里插入图片描述
server2上运行NodeManager进程
在这里插入图片描述
server3上运行NodeManager进程
在这里插入图片描述
server4上运行NodeManager进程
在这里插入图片描述
server2与zookeeper保持着连接,查看主备,可以看到rm1是主
在这里插入图片描述
浏览器访问server1的yarn资源管理页面,可以看到状态是active
在这里插入图片描述
浏览器访问server5的yarn资源管理页面,查看状态是standby备用
在这里插入图片描述

1.2、RM高可用测试

server1查看RM进程的id,然后杀死该进程
在这里插入图片描述
浏览器访问server5的yarn资源管理页面,查看状态,现在变成了active活跃
在这里插入图片描述
server1再重新开启RM进程
在这里插入图片描述
浏览器访问server1的yarn资源管理页面,查看状态,现在server1是standby备用
在这里插入图片描述

三、hbase高可用

真实主机将hbase包发送到server1的/home/hadoop目录下
在这里插入图片描述
server1收到hbase压缩包后进行解压,然后进入hbase目录。再进入conf目录
在这里插入图片描述
编辑hbase-env.sh环境变量配置文件,HBASE_MANAGES_ZK参数设为false,因为hbase自带zk,而我们已经配置好了
在这里插入图片描述
填入java和hadoop的环境变量
在这里插入图片描述
再编辑hbase-site.xml文件

<configuration>

<property>
<name>hbase.rootdir</name>
<value>hdfs://masters/hbase</value>
</property>
##	启用 hbase 分布式模式
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
##	配置zk集群节点的地址
<property>
<name>hbase.zookeeper.quorum</name>
<value>172.25.33.2,172.25.33.3,172.25.33.4</value>
</property>
##	指定hbase的master
<property>
<name>hbase.master</name>
<value>h1</value>
</property>
</configuration>

在这里插入图片描述
编辑完成并保存
在这里插入图片描述
server1编辑regionservers文件,输入zk集群的节点ip
在这里插入图片描述
由于文件系统共享,server5可以直接进入到hbase目录下,作为主节点运行hbase,jps查看可以看到HMaster进程
在这里插入图片描述
server1作为备用节点运行hbase,jps查看可以看到HMaster进程
在这里插入图片描述
server2、server3和server4可以看到本地运行HRegionServer进程作为集群节点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
浏览器访问server5的16010端口进入hbase管理页面,可以看到身份是Master,还可以看到集群节点server2、3、4和备用节点server1
在这里插入图片描述
server2与zookeeper保持着连接,查看hbase的master,可以看到是server5
在这里插入图片描述
测试:
server5进入hbase shell,创建test表
在这里插入图片描述
向test中插入数据,查看test内容
在这里插入图片描述
server5查看HMaster进程ID,杀死该进程
在这里插入图片描述
浏览器访问server1的16010端口进入hbase管理页面,可以看到现在server1是Master,备用主节点无内容
在这里插入图片描述
浏览器访问server5的16010端口进入hbase管理页面,但是已经无法访问
在这里插入图片描述
server5作为备用主节点启动hbase
在这里插入图片描述
在hbase管理页面中可以看到server1还是master,备用主节点为server5
在这里插入图片描述
server2与zookeeper保持着连接,查看hbase的master,可以看到现在是server1
在这里插入图片描述
server5再次进入hbase shell,查看test内容,内容依然存在,正常显示
在这里插入图片描述
浏览器访问server5的9870端口进入hadoop页面,可以看到hbase目录
在这里插入图片描述
进入hbase目录下可以正常查看目录内的文件
在这里插入图片描述

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐