一、xsync集群分发脚本
需求
循环复制文件到所有节点的相同目录下
分析
- rsync命令原始拷贝:
rsync -av /opt/module root@hadoop102:/opt/
- 期望脚本:期望脚本xsync要同步的文件名称
- 说明:在/home/yobhel/bin这个目录下存放的脚本,yobhel用户可以在系统任何地方直接执行。
实现
- 在用的家目录/home/yobhel下创建bin文件夹
[yobhel@hadoop101 ~]$ mkdir bin
- 在/home/yobhel/bin目录下创建xsync文件,以便全局调用
[yobhel@hadoop101 ~]$ cd /home/yobhel/bin
[yobhel@hadoop101 ~]$ vim xsync
在该文件中编写如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103
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具有执行权限
[yobhel@hadoop101 bin]$ chmod +x xsync
- 测试脚本
[yobhel@hadoop101 bin]$ xsync xsync
二、Hadoop群起脚本
[yobhel@hadoop101 bin]$ pwd
/home/yobhel/bin
[yobhel@hadoop101 bin]$ vim hdp.sh
输入如下内容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop101 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop101 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
[yobhel@hadoop101 bin]$ chmod 777 hdp.sh
三、ZK集群启动停止脚本
1)在hadoop101的/home/yobhel/bin目录下创建脚本
[yobhel@hadoop101 bin]$ vim zk.sh
在脚本中编写如下内容
#!/bin/bash
case $1 in
"start"){
for i in hadoop101 hadoop102 hadoop103
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop101 hadoop102 hadoop103
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop101 hadoop102 hadoop103
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
done
};;
esac
2)增加脚本执行权限
[yobhel@hadoop101 bin]$ chmod +x zk.sh
3)Zookeeper集群启动脚本
[yobhel@hadoop101 module]$ zk.sh start
4)Zookeeper集群停止脚本
[yobhel@hadoop101 module]$ zk.sh stop
3.kafka集群启停脚本
1)在/home/yobhel/bin目录下创建文件kf.sh脚本文件
[yobhel@hadoop101 bin]$ vim kf.sh
脚本如下:
#! /bin/bash
case $1 in
"start"){
for i in hadoop101 hadoop102 hadoop103
do
echo " --------启动 $i Kafka-------"
ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties"
done
};;
"stop"){
for i in hadoop101 hadoop102 hadoop103
do
echo " --------停止 $i Kafka-------"
ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh "
done
};;
esac
2)添加执行权限
[yobhel@hadoop101 bin]$ chmod +x kf.sh
3)启动集群命令
[yobhel@hadoop101 ~]$ kf.sh start
4)停止集群命令
[yobhel@hadoop101 ~]$ kf.sh stop
注意:停止Kafka集群时,一定要等Kafka所有节点进程全部停止后再停止Zookeeper集群。因为Zookeeper集群当中记录着Kafka集群相关信息,Zookeeper集群一旦先停止,Kafka集群就没有办法再获取停止进程的信息,只能手动杀死Kafka进程了。