前言:

一、概述

集群规模

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop

大致步骤

①、上传解压重命名环境变量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怎么修改文件名字 hadoop修改slaves文件_xml_02


删除我以前的普通hadoop文件

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_03


配置Myslave01root到Myslave01、Myslave02的免密登陆

原因→我们的Myslave01是我们的第二个NameNode设计的节点有必要设置免密登陆

hadoop怎么修改文件名字 hadoop修改slaves文件_hdfs_04


这里我主机名打成slave01所以第一次出错了

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

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

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_05

修改配置文件

还记得前面介绍的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>

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_06


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>

hadoop怎么修改文件名字 hadoop修改slaves文件_hdfs_07


slaves

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_08


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>

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_09


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怎么修改文件名字 hadoop修改slaves文件_xml_10


搞定!!!!

删除以往其他节点的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集群

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_11

启动JournalNode进程

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_12

格式化NomeNode

hadoop怎么修改文件名字 hadoop修改slaves文件_hdfs_13

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

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_14

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

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop_15

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

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_16

在Myslave01启动yarn

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop_17

在Myslave02启动ResourceManager

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_18

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

三、验证

查看webNameNode状态

Mymaster的

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_19

Myslave01的

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_20

验证上传下载查看

相关操作

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_21

Mymasterweb查看

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_22

Myslave01web查看

hadoop怎么修改文件名字 hadoop修改slaves文件_hdfs_23

验证yarn的可用性

ResourceManager的状态

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_24


并且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

hadoop怎么修改文件名字 hadoop修改slaves文件_hdfs_25

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_26


hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_27

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

四、优化启动shell文件

myself-start-all.sh

hadoop怎么修改文件名字 hadoop修改slaves文件_hdfs_28

#!/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

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_29

#!/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

关集群测试

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_30

开集群测试

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop_31

五、验证HA可用

验证NameNode进程的HA

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

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop_32

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

hadoop怎么修改文件名字 hadoop修改slaves文件_hdfs_33


hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_34

当然这种情况的集群是没问题的增删改查等等

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop_35


hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_36

再次重启Mymaster节点的NameNode

hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop怎么修改文件名字_37


查看web并不会变成active,可知状态切换的条件是处于active的节点宕机

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_38

验证ResourceManager进程的HA

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

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_39

查看ResourceManager web

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_40


hadoop怎么修改文件名字 hadoop修改slaves文件_hadoop_41

运行mapreduce验证

略,正常的是可以运行的

重启ResourceManager

hadoop怎么修改文件名字 hadoop修改slaves文件_hdfs_42


http://Myslave01:8088/ →自动跳转到active状态的ResourceManager节点上

完美搭建hadoopHA版本!!!!!!!!!!!!

最后,关闭集群

hadoop怎么修改文件名字 hadoop修改slaves文件_xml_43