注意事项:框架选型尽量不要选择最新的框架,选择最新框架半年前左右的稳定版。
框架 | 旧版本 | 新版本 |
Hadoop | 3.1.3 | 3.3.4 |
Zookeeper | 3.5.7 | 3.7.1 |
MySQL | 5.7.16 | 8.0.31 |
Hive | 3.1.2 | 3.1.3(修改源码) |
Flume | 1.9.0 | 1.10.1 |
Kafka | 3.0.0 | 3.3.1 |
Spark | 3.0.0 | 3.3.1 |
DataX | 3.0 | 3.0(master分支向前,修改源码) |
Superset | 1.5.3 | 2.0.0 |
DolphinScheduler | 1.3.9 | 2.0.5 |
Maxwell | 1.29.2 | 1.29.2(修改源码) |
Flink | 1.13.0 | 1.16.1 |
Redis | 6.0.8 | |
Hbase | 2.4.11 | |
ClickHouse | 20.4.5.36-2 |
测试集群服务器规划
服务名称 | 子服务 | 服务器 hadoop102 | 服务器 hadoop103 | 服务器 hadoop104 |
HDFS | NameNode | √ | ||
DataNode | √ | √ | √ | |
SecondaryNameNode | √ | |||
Yarn | NodeManager | √ | √ | √ |
Resourcemanager | √ | |||
Zookeeper | Zookeeper Server | √ | √ | √ |
Flume(采集日志) | Flume | √ | √ | |
Kafka | Kafka | √ | √ | √ |
Flume (消费Kafka日志) | Flume | √ | ||
Flume (消费Kafka业务) | Flume | √ | ||
Hive | √ | √ | √ | |
MySQL | MySQL | √ | ||
DataX | √ | √ | √ | |
Spark | √ | √ | √ | |
DolphinScheduler | ApiApplicationServer | √ | ||
AlertServer | √ | |||
MasterServer | √ | |||
WorkerServer | √ | √ | √ | |
LoggerServer | √ | √ | √ | |
Superset | Superset | √ | ||
Flink | √ | |||
ClickHouse | √ | |||
Redis | √ | |||
Hbase | √ | |||
服务数总计 | 20 | 11 | 12 |
前期准备工作
1、购买三台阿里云服务器
修改三台服务器的hosts文件
vim /etc/hosts
172.16.94.130 hadoop102 hadoop102
172.16.94.131 hadoop103 hadoop103
172.16.94.132 hadoop104 hadoop104
配置mac本地的hosts文件
120.55.15.183 hadoop102
118.178.235.141 hadoop103
101.37.22.127 hadoop104
开通以下端口
因为采用了阿里云服务器,访问需要开通端口
服务 | 端口 |
Cloudera Manager Server(WebUI) | 7180 |
HDFS NameNode(WebUI) | 9870 |
SecondaryNameNode | 9868 |
Yarn ResourceManager(WebUI) | 8088 |
JobHistory Server(WebUI) | 19888 |
HBase Master(WebUI) | 16010 |
HiveServer2 (WebUI) | 10002 |
HUE Server(WebUI) | 8888/8889 |
Oozie Server | 11000 |
Sentry Server | 51000 |
Spark Master/Worker/History Server | 18080/18081/18088 |
Kerberos | 88 |
MySQL | 3306 |
1.2、环境前期准备 (以下操作三台机子都要执行)
1)联网情况检测
[root@hadoop102 ~]# ping www.baidu.com
PING www.a.shifen.com (180.101.50.188) 56(84) bytes of data.
64 bytes from 180.101.50.188 (180.101.50.188): icmp_seq=1 ttl=50 time=15.8 ms
64 bytes from 180.101.50.188 (180.101.50.188): icmp_seq=2 ttl=50 time=15.8 ms
64 bytes from 180.101.50.188 (180.101.50.188): icmp_seq=3 ttl=50 time=15.8 ms
2)安装epel-release
注:Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库,大多数rpm包在官方 repository 中是找不到的)
[root@hadoop102 ~]# yum install -y epel-release
3)关闭防火墙,关闭防火墙开机自启
[root@hadoop102 ~]# systemctl stop firewalld
[root@hadoop102 ~]# systemctl disable firewalld.service
注意:在企业开发时,通常单个服务器的防火墙时关闭的。公司整体对外会设置非常安全的防火墙
4)创建shuidi用户,并修改shuidi用户的密码
[root@hadoop102 ~]# useradd shuidi
[root@hadoop102 ~]# passwd shuidi
更改用户 shuidi 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
5)配置shuidi用户具有root权限,方便后期加sudo执行root权限的命令
[root@hadoop102 ~]# vim /etc/sudoers
修改/etc/sudoers文件,在%wheel这行下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
shuidi ALL=(ALL) NOPASSWD:ALL
注意:shuid这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了shuid具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以shuid要放到%wheel这行下面。
后面的操作切换 shuidi 用户执行
6)在/opt目录下创建文件夹,并修改所属主和所属组
(1)在/opt目录下创建module、software文件夹
[shuidi@hadoop102 ~]$ sudo mkdir /opt/module
[shuidi@hadoop102 opt]$ sudo mkdir /opt/software
(2)修改module、software文件夹的所有者和所属组均为shuidi用户
[shuidi@hadoop102 opt]$ sudo chown shuidi:shuidi /opt/module
[shuidi@hadoop102 opt]$ sudo chown shuidi:shuidi /opt/software
(3)查看module、software文件夹的所有者和所属组
[shuidi@hadoop102 opt]$ cd /opt/
[shuidi@hadoop102 opt]$ ll
总用量 8
drwxr-xr-x 2 shuidi shuidi 4096 6月 23 13:17 module
drwxr-xr-x 2 shuidi shuidi 4096 6月 23 13:17 software
1.3、编写集群分发脚本xsync
1)xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析
①rsync命令原始拷贝:
rsync -av /opt/module root@hadoop103:/opt/
②期望脚本:
xsync要同步的文件名称
③说明:在/home/shuidi/bin这个目录下存放的脚本,shuidi用户可以在系统任何地方直接执行。
(3)脚本实现
①在用的家目录/home/shuidi下创建bin文件夹
[shuidi@hadoop102 ~]$ mkdir bin
②在/home/shuidi/bin目录下创建xsync文件,以便全局调用
[shuidi@hadoop102 bin]$ cd /home/shuidi/bin
[shuidi@hadoop102 bin]$ vim xsync
在该文件中编写如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
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
③修改脚本xsync具有执行权限
[shuidi@hadoop102 bin]$ chmod +x xsync
④测试脚本
[shuidi@hadoop102 bin]$ xsync xsync
1.4、 SSH无密登录配置
(1)hadoop102上生成公钥和私钥:
[shuidi@hadoop102 .ssh]$ pwd
/home/shuidi/.ssh
[shuidi@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
[shuidi@hadoop102 .ssh]$ ssh-copy-id hadoop102
[shuidi@hadoop102 .ssh]$ ssh-copy-id hadoop103
[shuidi@hadoop102 .ssh]$ ssh-copy-id hadoop104
(2)hadoop103上生成公钥和私钥:
[shuidi@hadoop103 .ssh]$ pwd
/home/shuidi/.ssh
[shuidi@hadoop103 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
[shuidi@hadoop103 .ssh]$ ssh-copy-id hadoop102
[shuidi@hadoop103 .ssh]$ ssh-copy-id hadoop103
[shuidi@hadoop103 .ssh]$ ssh-copy-id hadoop104
(3)hadoop104上生成公钥和私钥:
[shuidi@hadoop104 .ssh]$ pwd
/home/shuidi/.ssh
[shuidi@hadoop104 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
[shuidi@hadoop104 .ssh]$ ssh-copy-id hadoop102
[shuidi@hadoop104 .ssh]$ ssh-copy-id hadoop103
[shuidi@hadoop104 .ssh]$ ssh-copy-id hadoop104
1.5、安装JDK
1)将JDK导入到hadoop102的/opt/software文件夹下面
[shuidi@hadoop102 software]$ cd /opt/software/
[shuidi@hadoop102 software]$ ll
总用量 190444
-rw-rw-r-- 1 shuidi shuidi 195013152 6月 23 13:42 jdk-8u212-linux-x64.tar.gz
2)解压JDK到/opt/module目录下
[shuidi@hadoop102 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
[shuidi@hadoop102 module]$ mv jdk1.8.0_212/ jdk-1.8.0
3)配置JDK环境变量
(1)新建/etc/profile.d/my_env.sh文件
[shuidi@hadoop102 module]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容,然后保存(:wq)退出。
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk-1.8.0
export PATH=$PATH:$JAVA_HOME/bin
(2)让环境变量生效
[shuidi@hadoop102 module]$ source /etc/profile.d/my_env.sh
4)测试JDK是否安装成功
[shuidi@hadoop102 module]$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
5)分发JDK
[shuidi@hadoop102 module]$ xsync /opt/module/jdk-1.8.0
6)分发环境变量配置文件
[shuidi@hadoop102 module]$ sudo /home/shuidi/bin/xsync /etc/profile.d/my_env.sh
7)分别在hadoop103、hadoop104上执行source
[atguigu@hadoop103 module]$ source /etc/profile.d/my_env.sh
[atguigu@hadoop104 module]$ source /etc/profile.d/my_env.sh
环境变量配置说明
Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bashrc,~/.bash_profile等,下面说明上述几个文件之间的关系和区别。
bash的运行模式可分为login shell和non-login shell。
例如,我们通过终端,输入用户名、密码,登录系统之后,得到就是一个login shell。而当我们执行以下命令ssh hadoop103 command,在hadoop103执行command的就是一个non-login shell。
这两种shell的主要区别在于,它们启动时会加载不同的配置文件,login shell启动时会加载/etc/profile,~/.bash_profile,~/.bashrc。non-login shell启动时会加载~/.bashrc。
而在加载~/.bashrc(实际是~/.bashrc中加载的/etc/bashrc)或/etc/profile时,都会执行如下代码片段,
因此不管是login shell还是non-login shell,启动时都会加载/etc/profile.d/*.sh中的环境变量。
1.6、集群命令批量执行脚本
1)在/home/shuidi/bin目录下创建脚本xcall
[shuidi@hadoop102 bin]$ vim xcall
2)在脚本中编写如下内容
#! /bin/bash
for i in hadoop102 hadoop103 hadoop104
do
echo --------- $i ----------
ssh $i "$*"
done
3)修改脚本执行权限
[shuidi@hadoop102 bin]$ chmod 777 xcall
4)启动脚本
[shuidi@hadoop102 bin]$ xcall jps