前言
感谢我关注的朋友,我亦无他,收集整理的大部分脚本。
基础版
群发脚本XSync(xsync)
#!/bin/bash
#1 获取参数,如果不够直接退出
pcount=$#
if ((pcount==0)); then
echo 没有输入需要传递的文件或文件夹!!;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环遍历工作主机 执行分发命令
for host in hadoop102 hadoop103 hadoop104
do
echo ------------------- $host --------------
rsync -e 'ssh -p 22' -av $pdir/$fname $user@$host:$pdir
done
群控命令脚本XCall(xcall)
#!/bin/bash
#接收命令
params=$@
#验证参数
if(($#==0))
then
echo 请传入要执行的命令!
exit;
fi
echo "要执行的命令是:$params"
for((i=102 ;i<=104 ;i=$i+1 ));
do
echo ==========hadoop$i $params==========
ssh hadoop$i "source /etc/profile;$params"
done
群起journalNode
#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
echo "================ $i ================"
#根据自己的zkServer.sh所在位置适当修改
ssh $i 'source /etc/profile && /opt/module/hadoop-2.7.2/sbin/hadoop-daemon.sh start journalnode'
done
群关journalNode
#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
echo "================ $i ================"
#根据自己的zkServer.sh所在位置适当修改
ssh $i 'source /etc/profile && /opt/module/hadoop-2.7.2/sbin/hadoop-daemon.sh stop journalnode'
done
群起ZK(zkstart)
#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
echo "================ $i ================"
#根据自己的zkServer.sh所在位置适当修改
ssh $i 'source /etc/profile && /opt/module/zookeeper-3.4.10/bin/zkServer.sh start'
done
群关zk(zkstop)
#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
echo "================ $i ================"
#根据自己的zkServer.sh所在位置适当修改
ssh $i 'source /etc/profile && /opt/module/zookeeper-3.4.10/bin/zkServer.sh stop'
done
群起zk及hadoop相关进程(zhstart)
#!/bin/bash
echo "================ 开始启动所有节点服务 ==========="
echo "================ 正在启动Zookeeper ==========="
for i in hadoop102 hadoop103 hadoop104
do
ssh $i 'source /etc/profile && /opt/module/zookeeper-3.4.10/bin/zkServer.sh start'
done
echo "================ 正在启动HDFS ==========="
#根据自身情况修改用户名
ssh zhengkw@hadoop102 '/opt/module/hadoop-2.7.2/sbin/start-dfs.sh'
echo "================ 正在启动YARN ==========="
ssh zhengkw@hadoop103 '/opt/module/hadoop-2.7.2/sbin/start-yarn.sh'
echo "================ 正在开启JobHistoryServer ==========="
ssh zhengkw@hadoop103 '/opt/module/hadoop-2.7.2/sbin/mr-jobhistory-daemon.sh start historyserver'
群关zk及hadoop相关进程(zhstop)
#!/bin/bash
echo "================ 开始关闭所有节点服务 ==========="
echo "================ 正在关闭Zookeeper ==========="
for i in hadoop102 hadoop103 hadoop104
do
ssh $i 'source /etc/profile && /opt/module/zookeeper-3.4.10/bin/zkServer.sh stop'
done
echo "================ 正在关闭HDFS ==========="
ssh zhengkw@hadoop102 '/opt/module/hadoop-2.7.2/sbin/stop-dfs.sh'
echo "================ 正在关闭YARN ==========="
ssh zhengkw@hadoop103 '/opt/module/hadoop-2.7.2/sbin/stop-yarn.sh'
echo "================ 正在关闭JobHistoryServer ==========="
ssh zhengkw@hadoop103 '/opt/module/hadoop-2.7.2/sbin/mr-jobhistory-daemon.sh stop historyserver'
群起kafka脚本kstart
#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
echo "================ $i ================"
#根据自己的kafka所在位置适当修改
ssh $i 'source /etc/profile && /opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties'
done
群关kafka脚本kstop
#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
echo "================ $i ================"
#根据自己的kafka所在位置适当修改
ssh $i 'source /etc/profile && /opt/module/kafka/bin/kafka-server-stop.sh'
done
特别注意
官方的kafka服务关闭脚本存在失效的可能,这里放一个链接来解决!
注意
- 所有脚本创建好后配置好ssh免密服务,可参照点我!here!!里面的ssh免密配置。
- 给予脚本执行权限!
- 根据自己的配置修改用户名或者是主机名!!!!
- 适当分发脚本到/home/用户名/bin/下
- 如果想root用户也可以执行脚本,可以将脚本移动到
/usr/local/bin下!
进阶版!
xsync
#!/bin/bash
#脚本必须跟一个文件的相对路径或绝对路径
if(($#!=1))
then
echo 请输入要分发单个文件的路径!
exit;
fi
#获取分发文件的物理绝对路径
dirpath=$(cd -P `dirname $1` ; pwd)
filename=`basename $1`
echo "要分发的绝对路径是:$dirpath/$filename"
#获取当前用户的名称
username=`whoami`
#分发
for((i=102;i<=104;i++))
do
echo "--------------------hadoop$i--------------------"
rsync -rvlt $dirpath/$filename $username@hadoop$i:$dirpath
done
xcall
#!/bin/bash
#校验是否传入了命令
if(($#==0))
then
echo 请输入要执行的命令!
exit;
fi
echo "要执行的命令是:$@"
#使用ssh登录到目标机器执行命令
for((i=102;i<=104;i++))
do
echo "--------------------hadoop$i--------------------"
ssh hadoop$i $@
done
时间同步脚本 dt.sh
#!/bin/bash
#dt.sh 日期,可以让集群中所有机器的时间同步到此日期
#如果用户没有传入要同步的日期,同步日期到当前的最新时间
if(($#==0))
then
xcall sudo ntpdate -u ntp1.aliyun.com
exit;
fi
#dt.sh 日期,可以让集群中所有机器的时间同步到此日期
for((i=102;i<=104;i++))
do
echo "--------------同步hadoop$i--------------"
ssh hadoop$i "sudo date -s '$@'"
done
kafka启停脚本 kafka.sh
#!/bin/bash
#kafka集群的一键启动脚本,只接收单个start或stop参数
if(($#!=1))
then
echo 请输入单个start或stop参数!
exit
fi
##kafka alive count
function countKafkaBrokers(){
count=0
for((i=1;i<=3;i++))
do
result=`ssh hadoop10$i "source /etc/profile;jps | grep Kafka | wc -l"`
count=$[$result +$count]
done
return $count
}
#对传入的单个参数进行校验,且执行相应的启动和停止命令
if [ $1 = start ]
then
xcall kafka-server-start.sh -daemon '$KAFKA_HOME/config/server.properties'
elif [ $1 = stop ]
then xcall kafka-server-stop.sh
sleep 2s
while [ 1 ]
do
countKafkaBrokers
if(($?==0))
then
break
fi
sleep 2s
done
xcall jps
else
echo 请输入单个start或stop参数!
fi
zk.sh
#!/bin/bash
#脚本只接受start或stop或status三个参数中任意一个
#参数数量校验
if(($#!=1))
then
echo 脚本只接受start或stop或status三个参数中任意一个
exit;
fi
#对参数的内容进行校验,通过后,执行启动或停止或查看状态的命令
if [ $1 = start ] || [ $1 = stop ] || [ $1 = status ]
then
xcall /opt/module/zookeeper-3.4.10/bin/zkServer.sh $1
else
echo 脚本只接受start或stop或status三个参数中任意一个
fi
journalnode 启停
#!/bin/bash
case $1 in
start)
for i in hadoop102 hadoop103 hadoop101
do
echo "================ $i ================"
#根据自己的zkServer.sh所在位置适当修改
ssh $i 'source /etc/profile && /home/zhengkw/model/hadoop-3.2.0/sbin/hadoop-daemon.sh start journalnode'
done
;;
stop)
for i in hadoop102 hadoop103 hadoop101
do
echo "================ $i ================"
#根据自己的zkServer.sh所在位置适当修改
ssh $i 'source /etc/profile && /home/zhengkw/model/hadoop-3.2.0/sbin/hadoop-daemon.sh stop journalnode'
done
;;
*)
echo "脚本的正确使用方式: "
echo " start 启动 "
echo " stop 停止 "
;;
esac
hd-yar.sh
#!/bin/bash
#提供对hadoop集群的一键启动和停止,只接受start或stop参数中的一个
#判断参数的个数
if(($#!=1))
then
echo 请输入start或stop参数中的任意一个
exit;
fi
#校验参数内容
if [ $1 = start ] || [ $1 = stop ]
then
$1-dfs.sh
#根据RM配置启动
ssh hadoop103 $1-yarn.sh
#高可用单启RM
ssh hadoop104 yarn-daemon.sh start resourcemanager
#根据历史所在配置启动历史服务
ssh hadoop103 mr-jobhistory-daemon.sh $1 historyserver
xcall jps
else
echo 请输入start或stop参数中的任意一个
fi
个人用一键启动
#!/bin/bash
if(($#!=1))
then
echo 请输入start或stop中的任意一个参数
exit;
fi
function countKafkaBrokers(){
count=0
for((i=102;i<=104;i++))
do
result=`ssh hadoop$i "jps | grep Kafka | wc -l"`
count=$[$result +$count]
done
return $count
}
function countHiveRunJar(){
count=0
jps | grep RunJar| awk -F ' ' '{print $1 }'|tail -n 1|xargs kill -9
echo `jps | grep RunJar`
count=`jps | grep RunJar| wc -l`
return $count
}
if [ $1 = start ]
then
zhstart
kstart
while [ 1 ]
do
countKafkaBrokers
if(($?==3))
then
break
fi
sleep 2s
done
f2.sh start
f1.sh start
nohup hive --service metastore &
nohup hiveserver2 &
sleep 2s
xcall jps
elif [ $1 = stop ]
then
f1.sh stop
f2.sh stop
sleep 2s
kstop
while [ 1 ]
do
countKafkaBrokers
if(($?==0))
then
break
fi
sleep 2s
done
zhstop
echo ------------关闭hive------------
while [ 1 ]
do
countHiveRunJar
if(($?==0))
then
break
fi
sleep 2s
done
xcall jps
else
echo 请输入start或stop中的任意一个参数
fi
个人用2
#!/bin/bash
project_home=/zhengkw/gmall-logger
#kafka节点启动数量
function countKafkaBrokers(){
count=0
for((i=102;i<=104;i++))
do
result=`ssh hadoop$i "jps | grep Kafka | wc -l"`
count=$[$result +$count]
done
return $count
}
# 起一个nginx, 三个log服务器 log.sh start/stop/
case $1 in
start)
zkstart
kstart
while [ 1 ]
do
countKafkaBrokers
if(($?==3))
then
break
fi
sleep 2s
done
echo "======在 hadoop102 启动 nginx======"
sudo /usr/local/webserver/nginx/sbin/nginx
for host in hadoop102 hadoop103 hadoop104 ; do
echo "=====$host 启动日志服务器===== "
ssh $host "source /etc/profile ; nohup java -jar $project_home/gmall-logger-0.0.1-SNAPSHOT.jar 1>$project_home/log.log 2>$project_home/error.log &"
done
;;
stop)
echo "======在 hadoop102 停止 nginx======"
sudo /usr/local/webserver/nginx/sbin/nginx -s stop
for host in hadoop102 hadoop103 hadoop104 ; do
echo "=====$host 停止日志服务器===== "
ssh $host "source /etc/profile ; ps -ef | awk '/gmall-logger/ && !/awk/{print \$2}'| xargs kill -9"
done
kstop
while [ 1 ]
do
countKafkaBrokers
if(($?==0))
then
break
fi
sleep 2s
done
zkstop
;;
*)
echo "脚本的正确使用方式: "
echo " start 启动nginx和日志服务器 "
echo " stop 停止nginx和日志服务器 "
;;
esac
# jps | grep gmall | awk '{print $1}' | xargs kill -9
# ps -ef | grep gmall-logger | grep -v grep | awk '{print $2}' | xargs kill -9
# ps -ef | awk '/gmall-logger/ && !/awk/{print $2}'
#1. java -jar ....jar jar包内已经打包的主类
#2. 如果打的jar包中没有主类
# java -cp gmall-logger-0.0.1-SNAPSHOT.jar org.springframework.boot.loader.JarLauncher
#3. 如果打的jar包中没有主类
# java -jar gmall-logger-0.0.1-SNAPSHOT.jar org.springframework.boot.loader.JarLauncher
特别栏目!
总结
由于kafka很脆弱,但是关起来又很麻烦,经常还没有正常关完,我就把zk给关了,为了解决这个问题,就把kafka关闭的时候统计他的节点,当节点大于0时就等待!
核心
function countKafkaBrokers(){
count=0
for((i=102;i<=104;i++))
do
result=`ssh hadoop$i "jps | grep Kafka | wc -l"`
count=$[$result +$count]
done
return $count
}
#当执行停止后就开始进入死循环判断节点个数是否大于0 如果判断结果==0则跳出循环!
kstop
while [ 1 ]
do
countKafkaBrokers
if(($?==0))
then
break
fi
sleep 2s
done
zkstop