【Hadoop】HA高可用搭建保姆级教程(大二学长的万字笔记)_hadoop的高可用搭建

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

            echo $file does not exists!
    fi
done

done


* ***myHA***



#! /bin/bash
if [ $# -lt 1 ]
then
echo “No Args Input…”
exit;
fi

case $1 in
“start”){
echo “----------启动zookeeper----------”
for i in hadoop103 hadoop104 hadoop105
do
echo ---------- zookeeper $i 启动 ------------
ssh $i “/opt/module/HA/zookeeper/bin/zkServer.sh start”
done
echo “---------- 启动hdfs------------”
ssh hadoop102 “/opt/module/HA/hadoop-3.1.3/sbin/start-dfs.sh”
echo “---------- hadoop HA启动成功------------”
};;
“stop”){
echo “----------关闭hdfs----------”
ssh hadoop102 “/opt/module/HA/hadoop-3.1.3/sbin/stop-dfs.sh”
echo “----------关闭zookeeper----------”
for i in hadoop103 hadoop104 hadoop105
do
echo ---------- zookeeper $i 停止 ------------
ssh $i “/opt/module/HA/zookeeper/bin/zkServer.sh stop”
done
echo “---------- hadoop HA停止成功------------”
};;
“status”){
for i in hadoop103 hadoop104 hadoop105
do
echo ---------- zookeeper $i 状态 ------------
ssh $i “/opt/module/HA/zookeeper/bin/zkServer.sh status”
done
};;
*)
echo “Input Args Error”
;;
esac


* ***jpsall***



#! /bin/bash

for host in hadoop102 hadoop103 hadoop104 hadoop105
do
echo ----------$host----------
ssh $host jps
done


### 4.3 配置文件准备


由于篇幅原因,这里不展示配置文件的具体内容,**但是却是非常重要,重中之重**,大家可以私信我获取!这是搭建HA高可用中的关键,是减少我们遇到 **`报错风暴`** 的必由之路。


**这里要用到的配置文件有**:core-site.xml,hdfs-site.xml,hadoop-env.sh,workers,yarn-site.xml,mapred-site.xml(都在hadoop/etc/hadoop目录下)zoo.cfg(zookeeper/conf/目录下),my\_env.sh(/etc/profile.d/目录下),共8个文件。


**`这8个配置文件均已上传百度网盘!`**[点我获取资料]( )。


至此,我们的资料也准备好了!


## 五、解压与修改文件🍉


### 5.1 解压软件包


将上述我们准备好的Zookeeper、Hadoop、JDK软件包通过Xshell+Xftp上传到 /opt/software 目录下,并解压到 /opt/module/HA 目录下。


![](https://img-blog.csdnimg.cn/9bae9db49fe4480c966d2a962e43f2e1.png)


上传文件过程请大家自己完成哦!下面是解压过程:**`(该过程只需要在一台节点上完成即可,我这里使用的hadoop102,其他的节点后面使用克隆)。`**


* ***创建HA目录***



mkdir /opt/module/HA


* ***解压JDK***



tar -xzvf /opt/software/jdk-8u202-linux-x64.tar.gz -C /opt/module/HA/


* ***解压Hadoop***



tar -xzvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module/HA/


* ***解压Zookeeper***



tar -xzvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/HA/


* ***重命名Zookeeper***



mv apache-zookeeper-3.5.7-bin/ zookeeper


* ***重命名JDK***



mv jdk1.8.0_202/ jdk1.8


### 5.2 修改配置文件



> 
> **hadoop目录下的文件共六个,在资料中已经给出,下面仅展示一部分要特别注意的配置文件。**
> 
> 
> 


* ***1.core-site.xml***
* ***2.hdfs-site.xml***
* ***3.hadoop-env.sh***
* ***4.workers***



hadoop103
hadoop104
hadoop105


* ***5.yarn-site.xml***
* ***6.mapre-site.xml***



> 
> **zookeeper目录下的文件**
> 
> 
> 


* ***1.zoo.cfg***



server.1=hadoop103:2888:3888
server.2=hadoop104:2888:3888
server.3=hadoop105:2888:3888


* ***2.myid***


这个节点上没有使用Zookeeper,所以未使用myid文件。



> 
> **/etc/profile.d目录下的文件**
> 
> 
> 


* ***my\_env.sh***



JAVA_HOME

只需修改java_home 因人而异 是自己的jdk安装目录

export JAVA_HOME=/opt/module/jdk1.8
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

HADOOP_HOME

同理 这里只需修改Hadoop_home,是Hadoop安装目录

export HADOOP_HOME=/opt/module/HA/hadoop-3.1.3

export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin
export PATH= P A T H : PATH: PATH:HADOOP_HOME/sbin

export HDFS_NAMENODE_USER=sky
export HDFS_DATANODE_USER=sky
export HDFS_SECONDARYNAMENODE_USER=sky
export YARN_RESOURCEMANAGER_USER=sky
export YARN_NODEMANAGER_USER=sky

ZOOKEEPER_HOME

export ZOOKEEPER_HOME=/opt/module/HA/zookeeper
export PATH= P A T H : PATH: PATH:ZOOKEEPER_HOME/bin


之后记得刷新环境变量:



source /etc/profile.d/my_env.sh


### 5.3 创建目录


创建Hadoop数据临时目录:



mkdir /opt/module/HA/tmp


创建JournalNode日志目录:



mkdir /opt/module/HA/logs


创建Zookeeper数据目录:



mkdir /opt/module/HA/zookeeper/zkData


### 5.4 分发HA目录


分发HA目录下的所有内容到hadoop103,hadoop104,hadoop105上。



xsync /opt/module/HA/


## 六、启动HA集群🎈


### 6.1 Zookeeper启动测试


分别在hadoop103,hadoop104,hadoop105三个节点上启动Zookeeper,因为这三个节点在集群规划中有ZK。



zkServer.sh start


![](https://img-blog.csdnimg.cn/130ac4ccb8874241a37a789bd677a915.png)


![](https://img-blog.csdnimg.cn/1c4f310fa20a4d8a8bbe42360749980b.png)


![](https://img-blog.csdnimg.cn/a6ac51c8737b42ad80dcaafd76c7c133.png)


三个节点上的Zookeeper均启动成功!


### 6.2 启动JournalNode


分别在hadoop102,hadoop103,hadoop104三个节点上启动Zookeeper,因为这三个节点在集群规划中有JNN。


并且,JournalNode只需要手动启动一次,以后启动Hadoop HA高可用集群均不需要再次手动启动。



hdfs --daemon start journalnode


现在,我们通过jps来查看进程,ZK和JNN是否按照集群规划启动好了?


![](https://img-blog.csdnimg.cn/a48ea2f5952643d885cb55f65a2fd9a0.png)  
 ![](https://img-blog.csdnimg.cn/de4844bedb974c9298ed1da5ad8c9cd2.png)  
 ![](https://img-blog.csdnimg.cn/2b5004d8b34a46ac80aa3852e8c3a0b4.png)  
 ![](https://img-blog.csdnimg.cn/2ab887fc42ad418d86eed39522972c9f.png)


可以看到,目前集群规划正确,下面我们就可以进行下一步操作啦。


### 6.3 初始化NameNode


在是NameNode节点上的任意一个节点上初始化NameNode,并且只需要初始化一遍,这里我的集群中,hadoop102和hadoop103上都有NameNode,但是因为hadoop103上有DataNode,所以我 **`选择使用hadoop102作为初始化节点`** 。



hdfs namenode -format


![](https://img-blog.csdnimg.cn/a01ce063c80a4300887dff97e94bf050.png)


### 6.4 初始化Zookeeper


在具有Zookeeper节点上的任意一个节点上初始化Zookeeper,并且只需要初始化一遍。这里我选择在hadoop103上进行初始化。



hdfs zkfc -formatZK


![](https://img-blog.csdnimg.cn/bd76c1d4efe0433599c136f388511cb0.png)


判断是否初始化成功:(在三台都查看一下)



zkCli.sh



ls \


![](https://img-blog.csdnimg.cn/52e56bd93b984bb8a334a7e9382e68c4.png)


### 6.5 启动集群


分别在hadoop102,hadoop103上启动NameNode。


hadoop102上执行:(`只需执行一次`)



hdfs --daemon start namenode


hadoop103上执行:(`只需执行一次`)



hdfs namenode -bootstrapStandby


![](https://img-blog.csdnimg.cn/3c74e758ee0a4d6485769f97125802c2.png)


在hadoop102上启动集群:



start-dfs.sh


![](https://img-blog.csdnimg.cn/42e5d5249b7e4596b8fce591187eca50.png)


至此,集群中的NameNode,DataNode,Zookeeper,ZKFC,JournalNode都已经启动好了。下面,让我们一起来看看,我们的集群能否经得住检验吧!


## 七、检验集群✨


### 7.1 jps检查


使用jpsall脚本分别查看四个节点上的jps进程信息,是否和集群规划相符,集群规划图再放一遍:



jpsall


![](https://img-blog.csdnimg.cn/d474d288de9c4e6f9f73efe8d9939f30.png)  
 ![](https://img-blog.csdnimg.cn/676e93faccaf42e1b04cfb4fd2eadbdf.png)  
 和集群规划完全一致!


### 7.2 网页检查


分别访问NameNode1和NameNode2的两个Web页面,网址是http://hadoop102:9870,http://hadoop103:9870,结果如下:  
 ![](https://img-blog.csdnimg.cn/a8e47fc205b34879b74496f8d0d83e4a.png)  
 ![](https://img-blog.csdnimg.cn/d06b55bb1bb64d1ab438fe86f1e4cdd0.png)  
 网站访问中hadoop102的NameNode是active状态,hadoop103中的NameNode是standby状态。


### 7.3 自动故障转移检查


使用如下命令kill掉hadoop102上的NameNode进程:


![](https://img-blog.csdnimg.cn/3c78e6dfeb0f4995b4ac6c6fe73bf28c.png)  
 ![](https://img-blog.csdnimg.cn/64698ccefa0043878d48fbc777f53434.png)  
 ![](https://img-blog.csdnimg.cn/133291f061fc4774a7e1768ccd6b0ab8.png)


**`这里,我们遇到了将NameNode-1的进程kill掉之后,另外一个NameNode没有变成active状态的问题,也就是说并没有实现自动故障转转移!`**


让我们一起来解决吧!


### 7.4 解决NameNode无法自动故障转移问题


这里引入一个 **`“脑裂”`** 的概念。


active namenode工作不正常后,zkfc在zookeeper中写入一些数据,表明异常,这时standby namenode中的zkfc读到异常信息,并将standby节点置为active。


但是,如果之前的active namenode并没有真的死掉,出现了假死(死了一会儿后又正常了),这样,就有两台namenode同时工作了。这种现象称为 **`脑裂`** 。


这里提供两种解决方案:


* ***法一:改变kill方式——安装psmisc插件***


上述中,我们使用kill掉NameNode进程的方法是:



kill -9 进程号


但是这种方式不一定能够完全 kill 掉NameNode的状态,可能就会出现残余从而出现“脑裂”现象,所以我们采用 **`psmisc插件`** 的方式来**彻底结束进程**。


**`更加神奇的是,这个插件安装好了,并不需要我们手动使用,而是系统自己调用的!`** 


![](https://img-blog.csdnimg.cn/a9f42b540f874066a74f0059ec17c28e.png)


在hadoop102、hadoop103上按照psmisc插件:



sudo yum install -y psmisc


* ***感受psmisc插件的威力***


这里,我们先手动将hadoop102的NameNode启动起来,它目前是standby状态:



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
![img](https://img-blog.csdnimg.cn/img_convert/fbe0a16faa4a6233ede7d21a57a1cbaf.png)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

 的方式来**彻底结束进程**。


**`更加神奇的是,这个插件安装好了,并不需要我们手动使用,而是系统自己调用的!`** 


![](https://img-blog.csdnimg.cn/a9f42b540f874066a74f0059ec17c28e.png)


在hadoop102、hadoop103上按照psmisc插件:



sudo yum install -y psmisc


* ***感受psmisc插件的威力***


这里,我们先手动将hadoop102的NameNode启动起来,它目前是standby状态:



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
[外链图片转存中...(img-RaWqAq9E-1713342290702)]

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值