将脚本放在/usr/local/bin/目录下,在任何位置都可以使用脚本
注:本脚本建立在已经配置免密登录的基础上
1、xcall脚本,实现远程登录,在三台虚拟机上使用命令
#! /bin/bash
if [ $# -eq 0 ]
then
echo '没有提供参数'
exit
fi
for i in 11 12 13
do
echo --------------- hadoop$i -----------
ssh root@hadoop$i "source /etc/profile;$*"
done
使用说明:xcall
2、开机脚本,启动的服务有,三个节点上的zookeeper,HDFS,yarn,yarn的历史服务
#!/bin/bash
# 确保脚本有足够的权限执行(虽然作为系统服务运行时通常由root执行)
echo "开始启动ZooKeeper服务..."
# 检查zkServer.sh脚本是否存在并具有执行权限
if [ -x "$(command -v zkServer.sh)" ]; then
xcall zkServer.sh start
if [ $? -eq 0 ]; then
echo "ZooKeeper服务启动成功"
else
echo "ZooKeeper服务启动失败"
exit 1 # 如果ZooKeeper启动失败,可以选择退出脚本或继续执行其他任务
fi
else
echo "找不到或无法执行zkServer.sh脚本"
exit 1
fi
# 在这里,你可以添加更多命令来启动其他服务,比如Hadoop
# ...
# 例如,如果你有一个start-all.sh脚本来启动Hadoop集群:
echo "ZooKeeper服务已启动,接下来尝试启动Hadoop集群..."
# 检查start-all.sh脚本是否存在并具有执行权限
if [ -x "$(command -v start-all.sh)" ]; then
start-all.sh
if [ $? -eq 0 ]; then
echo "Hadoop集群启动成功"
else
echo "Hadoop集群启动失败"
# 注意:即使Hadoop启动失败,你可能也不希望立即退出脚本
# 取决于你的具体需求,你可能想要记录错误并继续,或者执行一些清理操作
fi
else
echo "找不到或无法执行start-all.sh脚本"
# 这里你也可以选择是否要因为Hadoop无法启动而退出脚本
fi
echo "====启动historyserver====="
# 检查start-all.sh脚本是否存在并具有执行权限
if [ -x "$(command -v start-all.sh)" ]; then
mr-jobhistory-daemon.sh start historyserver
if [ $? -eq 0 ]; then
echo "historyserver启动成功"
else
echo "historyserver启动失败"
# 注意:即使Hadoop启动失败,你可能也不希望立即退出脚本
# 取决于你的具体需求,你可能想要记录错误并继续,或者执行一些清理操作
fi
else
echo "找不到或无法执行historyserver"
# 这里你也可以选择是否要因为Hadoop无法启动而退出脚本
fi
#echo "====启动metastore====="
#nohup hive --service metastore >> /root/hive2.log 2>&1 &
# 脚本执行结束
echo "所有服务启动完成"
exit 0
3、关机脚本,关闭yarn,HDFS,zookeeper,并最终将三个节点关机
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo "此脚本必须以root权限运行" 1>&2
exit 1
fi
echo "开始停止Hadoop集群..."
# 检查stop-all.sh脚本是否存在并具有执行权限
if [ -x "$(command -v stop-all.sh)" ]; then
stop-all.sh
if [ $? -eq 0 ]; then
echo "Hadoop集群停止成功"
else
echo "Hadoop集群停止失败"
exit 1
fi
else
echo "找不到或无法执行stop-all.sh脚本"
exit 1
fi
echo "开始停止ZooKeeper服务..."
# 检查zkServer.sh脚本是否存在并具有执行权限
if [ -x "$(command -v zkServer.sh)" ]; then
for((i=11;i<=13;i++))
do
echo "========= hadoop$i ============="
ssh hadoop$i "source /etc/profile; zkServer.sh stop"
echo "$i:ZooKeeper服务停止成功"
done
else
echo "找不到或无法执行zkServer.sh脚本"
exit 1
fi
echo "所有服务停止完成"
echo "所有服务停止完成,是否希望关闭所有机器?(y/n): "
read answer
# 转换为小写并检查有效输入
answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]')
if [ "$answer" = "y" ]; then
echo "正在关闭所有机器,从 hadoop13 开始..."
# 逆序遍历数组以从 hadoop13 开始关闭
for((i=13;i>=11;i--))
do
echo "========= hadoop$i ============="
if ssh hadoop$i "source /etc/profile; shutdown now"; then
echo "$hadoop$i:关机成功"
else
echo"$hadoop$i:关机失败"
fi
done
else
echo "不会关闭任何机器。"
fi
exit 0