yum install -y epel-release
注:该工具相当于是一个软件仓库
yum install -y net-tools
安装vim:编辑器
yum install -y vim
安装一些其他工具
yum install -y psmisc nc rsync lrzsz ntp libzstd openssl-static tree iotop git
systemctl stop firewalld
systemctl disable firewalld.service
useradd flink
password flink
vim /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
flink ALL=(ALL) NOPASSWD:ALL
mkdir /opt/module
mkdir /opt/software
将两个文件夹的权限赋予给flink用户
chown flink:flink /opt/module
chown flink:flink /opt/software
克隆出虚拟机flink102、flink103、flink104三台虚拟机
vim /etc/sysconfig/network-scripts/ifcfg-ens33 # 这边会有不同,随机生成的
修改为
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
IPADDR=192.168.20.202
PREFIX=24
GATEWAY=192.168.20.1
DNS1=192.168.20.1
查看windows系统中网络适配器VMware Network Adapter VMnet8的IP地址(virtual box是VirtualBox Host-Only Ethernet Adapter)
默认网关设置为192.168.20.1
vim /etc/hostname
flink102
配置Linux克隆机主机映射hosts文件
vim /etc/hosts
192.168.20.202 flink102
192.168.20.203 flink103
192.168.20.204 flink104
192.168.20.205 flink105 # 备用
192.168.20.206 flink106 # 备用
重启虚拟机
reboot
添加如下内容:
192.168.20.202 flink102
192.168.20.203 flink103
192.168.20.204 flink104
192.168.20.205 flink105 # 备用
192.168.20.206 flink106 # 备用
将安装包传输到/opt/software,然后解压
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module
sudo vim /etc/profile.d/my_env.sh
添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
source /etc/proflie # source一下,让新环境变量Path生效
测试jdk1.8是否生效
java -version
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module
将Hadoop添加到环境变量中
vim /etc/profile.d/my_env.sh
添加如下设置:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
记得source一下,使环境变量生效
测试Hadoop是否安装成功
hadoop version
如果没生效可以重启虚拟机试试reboot
xsync脚本编写
cd /home/flink
mkdir bin
cd bin
vim xsync
具体脚本如下:
#!/bin/bash
#1.判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2.遍历集群所有机器
for host in flink102 flink103 flink104
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 dose not exists!
fi
done
done
将该脚本赋予执行权限
chmod 777 xsync
cd /opt/module
xsync jdk1.8.0_212
xsync hadoop-3.1.3
sudo xsync /etc/profile.d/my_env.sh
记得在flink103、flink104上source一下
注意:这边分发的时候比较麻烦是需要输好多遍密码的,下面设置一下公共钥匙就可以无密码登录了
先在102上生成公钥和私钥
cd /home/flink/.ssh
ssh-keygen -t rsa
然后敲三个回车,就会生成公钥和私钥
将公钥拷贝到要免密登录的机器
ssh-copy-id flink102
ssh-copy-id flink103
ssh-copy-id flink104
同样的操作需要在103和104上实施一遍
102上部署HDFS的NameNode和DataNode以及YARN的NodeManager
103上部署HDFS的DataNode以及YARN的ResourceManager和NodeManager
104上部署SecondaryNamNode和DataNode以及YARN的NodeManager
配置core-site.xml
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://flink102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为flink -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>flink</value>
</property>
</configuration>
HDFS配置文件
配置hdfs-site.xml
vim hdfs-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>flink102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>flink104:9868</value>
</property>
</configuration>
YARN配置文件
配置yarn-site.xml
vim yarn-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>flink103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
MapReduce配置文件
配置mapred-site.xml
vim mapred-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
去103和104上查看文件分发情况
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
配置workers
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
flink102
flink103
flink104
启动集群
1,如果集群是第一次启动,需要在102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
hdfs namenode -format
2,启动HDFS
sbin/start-dfs.sh
3,在配置了ResourceManager的节点(103)启动YARN
sbin/start-yarn.sh
4,Web端查看HDFS的NameNode
浏览器中输入:http://flink102:9870
查看HDFS上存储的数据信息
5,Web端查看YARN的ResourceManager
浏览器中输入:http://flink103:8088
查看YARN上运行的Job信息
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
1)配置mapred-site.xml
vim mapred-site.xml
在该文件里面增加如下配置。
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>flink102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>flink102:19888</value>
</property>
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3)在flink102启动历史服务器
mapred --daemon start historyserver
4)查看历史服务器是否启动
jps
5)查看JobHistory
http://flink102:19888/jobhistory
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。
开启日志聚集功能具体步骤如下:
1)配置yarn-site.xml
vim yarn-site.xml
在该文件里面增加如下配置。
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://flink102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
3)关闭NodeManager 、ResourceManager和HistoryServer(103节点)
sbin/stop-yarn.sh
mapred --daemon stop historyserver
4)启动NodeManager 、ResourceManage和HistoryServer
start-yarn.sh
mapred --daemon start historyserver
需要在写一个脚本来群起集群
cd /home/flink/bin
vim myhadoop.sh
脚本如下:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh flink102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh flink103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh flink102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh flink102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh flink103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh flink102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
脚本完成后别忘了给脚本加上执行权限
chmod 777 myhadoop.sh
上文有提到jps查看后台进程运行情况,但是不足的是我们的集群查看后台进程需要一台一台去看服务是否起来了,如果集群数量增加会很麻烦,所以需要编写一个集群后台进程查看脚本
cd /home/flink/bin
vim jpsall
脚本如下:
#!/bin/bash
for host in flink102 flink103 flink104
do
echo " ============ $host ============"
ssh $host jps
done
赋予其执行权限
chmod 777 jpsall
需要一台集群中的机器作为时间同步的标准,避免集群中各台机器时间不同步发生数据上的问题
修改102节点上的ntp配置文件
vim /etc/ntp.conf
修改内容如下
修改1(授权192.168.10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
为restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
修改2(集群在局域网中,不使用其他互联网上的时间)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
修改flink102的/etc/sysconfig/ntpd 文件
sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
重新启动ntpd服务
sudo systemctl start ntpd
设置ntpd服务开机启动
sudo systemctl enable ntpd
其他机器配置(必须root用户)
(1)关闭所有节点上ntp服务和自启动
[flink@flink103 ~]$ sudo systemctl stop ntpd
[flink@flink103 ~]$ sudo systemctl disable ntpd
[flink@flink104 ~]$ sudo systemctl stop ntpd
[flink@flink104 ~]$ sudo systemctl disable ntpd
(2)在其他机器配置1分钟与时间服务器同步一次
[flink@flink103 ~]$ sudo crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate flink102
(3)修改任意机器时间
[flink@flink103 ~]$ sudo date -s "2021-9-11 11:11:11"
(4)1分钟后查看机器是否与时间服务器同步
[flink@flink103 ~]$ sudo date