1. 环境搭建
1.1 基础环境及规划
所有节点执行以下命令,安装以下工具:
#安装 vim wget rz sz等工具
yum -y install rsync vim wget tree lrzsz
#安装chrony工具
yum install -y chrony
#永久设置同步时间服务器(修改配置文件)
vim /etc/chrony.conf
#注释掉第三行原有的时间服务器地址,设置为阿里云的时间服务地址
#pool 2.centos.pool.ntp.org iburst
server ntp.aliyun.com iburst
#重启时间服务
[root@localhost ~]# systemctl restart chronyd.service
#设置时间同步服务开机启动
[root@localhost ~]# systemctl enable chronyd.service
#查看防火墙开启状态【执行】
systemctl status firewalld
#关闭防火墙【执行】
systemctl stop firewalld
#禁止开机启动防火墙【执行】
systemctl disable firewalld
修改**hosts**
文件,添加以下内容【IP与主机名的映射】,所有节点均执行此操作【操作目的在于将来使用的时候直接使用主机名,而不需要去记忆IP。】
注意: 删除或注释掉该文件的前两行,注释的话请在每行的最前面输入#
[root@node01 ~]$ vim /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.101 node01
192.168.100.102 node02
192.168.100.103 node03
集群规划
组件 | 版本号 | 服务名 | 端口 | node01 | node02 | node03 |
---|---|---|---|---|---|---|
Java | 1.8.361 | √ | √ | √ | ||
Zookeeper | 3.7.1 | Qu | 2181 | √ | √ | √ |
Hadoop | 3.2.4 | NameNode | 9000 | √ | ||
DataNode | √ | √ | √ | |||
SecondaryNameNode | √ | |||||
HDFS WebUI | 9870 | √ | ||||
ResourceManager | √ | |||||
NodeManager | √ | √ | √ | |||
Yarn UI | 8088 | √ | ||||
1.2 免密配置
在所有节点上进入当前用户的.ssh
目录,执行以下命令,然后一路回车ssh-keygen -t rsa -P ''
将所有节点的~/.ssh/id_rsa.pub
的内容合并到node01
节点的~/.ssh/id_rsa.pub
文件中,因此在所有节点上执行以下命令cat ~/.ssh/id_rsa.pub | ssh root@node01 'cat >> ~/.ssh/authorized_keys'
将node01
的authorized_keys
文件拷贝到其他节点上,在node01
上执行以下命令:scp ~/.ssh/authorized_keys root@node02:~/.ssh/
scp ~/.ssh/authorized_keys root@node03:~/.ssh/
最终所有节点相互执行ssh操作,直到相互之间不需要输入yes
或者密码。
# 每台机器之间进行ssh免密码登录操作,包括自己与自己
[root@node01 ~]$ ssh node01
[root@node01 ~]$ ssh node02
[root@node02 ~]$ ssh node01
[root@node01 ~]$ ssh node03
[root@node03 ~]$ ssh node01
[root@node01 ~]$ ssh node02
[root@node02 ~]$ ssh node02
[root@node02 ~]$ ssh node03
[root@node03 ~]$ ssh node02
[root@node02 ~]$ ssh node03
[root@node03 ~]$ ssh node03
创建文件同步脚本
#创建并编写xsync脚本
cd /usr/local/bin/
vim xsync
#在xsync中写入如下代码
#!/bin/bash
#自动读取所有的hosts中的主机列表
hosts=$(cat /etc/hosts | grep -v "^#" | awk '{print $2}')
current_host=${hostname}
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo "参数个数为0,没有要同步的文件"!
exit;
fi
#2. 遍历集群所有机器
for host in $hosts
do
if [ "${current_host}" != "${host}" ];then
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
fi
done
#修改脚本xsync使其具有执行权限
chmod 777 xsync
#测试脚本
xsync xsync
创建远程调用脚本
#创建并编写xcall脚本
cd /usr/local/bin/
vim xcall
#在xsync中写入如下代码
#! /bin/bash
hosts=$(cat /etc/hosts | grep -v "^#" | awk '{print $2}')
for i in $hosts
do
echo --------- $i ----------
ssh $i "$*"
done
#修改脚本xsync使其具有执行权限
chmod 777 xcall
#测试脚本
xcall jps
--------- node01 ----------
2570 Jps
--------- node02 ----------
1837 Jps
--------- node03 ----------
2026 Jps
1.3 Java环境配置
大部分环境镜像
https://archive.apache.org/
# 在node01主节点上创建指定目录
[root@node01 ~]$ mkdir -p /opt/module
# 进入到module目录
[root@node01 ~]$ cd /opt/module/
# 使用rz命令从Windows主机上传jdk压缩包到node01节点,也可以直接拖拽至XShell命令窗口
[root@node01 module]$ rz
# 解压到当前目录
[root@node01 module]$ tar -zxvf jdk-8u361-linux-x64.tar.gz
# 配置环境变量,亦可配置到 /etc/bashrc 中
[root@node01 module]$ vim /etc/profile.d/my_env.sh
# 在该文件后面追加一下内容
export JAVA_HOME=/opt/module/jdk1.8.0_361
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
# 使刚才的设置生效
[root@node01 module]$ source /etc/profile.d/my_env.sh
#! 检测是否配置成功
[root@node01 module]$ java -version
java version "1.8.0_361"
Java(TM) SE Runtime Environment (build 1.8.0_361-b09