既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
* ***NN-2***
**`NameNode节点2,也是在 core-site.xml 文件中配置。`**
* ***DN***
**`DataNode,在workers中配置。`** workers中的主机名要提前在/etc/hosts文件中做好主机名与IP的映射。
![](https://img-blog.csdnimg.cn/4669ea6e78954a029201eaaace4b61ba.png)
* ***ZK***
**`Zookeeper,在 zoo.cfg 文件中配置。`** 注意要将 zoo\_sample.cfg 文件改名为 zoo.cfg,这个文件在 zookeeper 目录的 conf 目录下。不需要启动Zookeeper的节点,不需要配置进来。
* ***ZKFC***
**`ZKFailOverController,不需要主动配置,哪里的NameNode正常启动了ZKFC就会启动。`** ZKFailOverController是Hadoop中通过ZK实现FC(故障转移)功能的一个实用工具。
* ***JNN***
**`JournalNode,在需要启动的节点上启动,仅第一次启动Hadoop时需要手动启动,后面都不需要手动启动。`**
## 三、说明🔑
### 3.1 主机名说明
据了解,很多朋友使用的四个节点的名称 **`并不是 hadoop102,hadoop103,hadoop104,hadoop105`** ,有是master、slave1,slave2,slave3的;有namenode,datanode1,datanode2,datanode3的。**`没关系,只是主机名不一样而已!`** 只需要将对应的地方修改一下,就可以。(如果你足够熟练,就知道哪些地方要用自己的主机名)
### 3.2 用户名说明
在搭建过程中,**`我也没有使用 root 账号,使用的是一个可以执行 sudo 命令的普通用户账号。`**
**为什么不使用root账号?**
试问一下大家,如果你在公司上班,如果你不是运维人员,只是普通的开发人员,你可以拿到root账号的权限吗?显然是不可以的,我认为我们在平时的训练中就要养成使用普通用户账号的习惯,实际操作中才能游刃有余。**(类似于接受自己的平庸哈哈哈)**
### 3.3 操作目录说明
所有操作均在 /opt/module/HA 目录下,当然如果需要修改环境变量就要切换到 /etc/profile.d/ 目录下。
### 3.3 必要工具说明
这里使用到的就是VMware(安装虚拟机),XShell(远程连接工具)、Xftp(文件传输工具)。
至此,我们的需求、要求以及硬件设备就准备好了。下面开始准备软件吧!
## 四、上传资料🌵
**`磨刀不误砍柴工!充分的准备可以让我们的搭建过程事半功倍,流畅无比!`** ,而且,这也是减少返工(软件工程中的名词)的重要条件,大家一定要做好哦!
### 4.1 资料准备
这里用到的安装包有:jdk-8u202-linux-x64.tar.gz,[点我下载jdk]( ),hadoop-3.1.3.tar.gz,[点我下载hadoop]( ),apache-zookeeper-3.5.7-bin.tar.gz。[点我下载Zookeeper]( ),**如果没有这些文件的可以私信我获取,我都上传到百度网盘了。**
### 4.2 脚本准备
这里,我主要使用到了分发脚本(脚本名xsync),Hadoop HA一键启动脚本(脚本名myHA),查看所有节点jps进程脚本(脚本名jpsall)。
脚本的使用之前有提到过,这里不再赘述,大家可以参考我的这篇文章或其他文章:[hadoop集群启停脚本分享]( )。
**`下面是脚本内容,需要注意的是如果你的主机名和我不同,记得修改文中代码!`**
* ***xsync***
#! /bin/bash
1.判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Argument!
exit;
fi
2.遍历所有集群机器
for host in hadoop102 hadoop103 hadoop104 hadoop105
do
echo ==================== $host ===================
# 3.遍历所有目录,挨个发送
for file in $@
do
# 4.判断文件是否存在
if [ -e $file ]
then
# 5.获取父目录
pdir=$(cd -P $(dirname $file); pwd)
# 6.获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
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
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
ls \
6.5 启动集群
分别在hadoop102,hadoop103上启动NameNode。
hadoop102上执行:(只需执行一次
)
hdfs --daemon start namenode
[外链图片转存中...(img-PQhkDuMl-1714986886494)]
[外链图片转存中...(img-QQ9KZfft-1714986886494)]
[外链图片转存中...(img-zVQ5EGR5-1714986886495)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**