hadoop一键启动关闭脚本(hadoop,hive,zeppelin,zookeeper,hbase)
一 新建文件
一键启动:
新建.sh文件:touch start.sh
修改文件权限:chmod u+x start.sh
新建.cnf文件:start.cnf
一键关闭:
新建.sh文件:touch stop.sh
修改文件权限:chmod u+x stopsh
新建.cnf文件:stop.cnf
二编写启动脚本
start.sh文件编写:最好添加 source/etc/profile,不添加也不要紧
在这里插入代码片
source /etc/profile
CNF_FILE='start.cnf'
if [ ! -e $CNF_FILE -o -d $CNF_FILE ]
then
echo $CNF_FILE" unavailable or directory, script will exit"
exit 0
fi
CNF_LINES=(`cat start.cnf`)
count=0
for item in ${CNF_LINES[@]}
do
((count++))
arr=(${item/->/ })
echo $count"、"${arr[0]}
done
read -p 'please input you choice : ' choice
if [[ $choice =~ ^[0-9]+$ ]]
then
if [ $choice -gt $count -o $choice -lt 1 ]
then
echo "choice must be between 1 and $count,script will exit"
exit 0
fi
else
echo 'choice must be a num, script will exit'
exit 0
fi
function killOnLeft(){
SIGN=$1
SERS=$2
SERS=(${SERS//_/ })
PIDS=()
count=0
for item in ${SERS[@]}
do
RST=`jps -ml|grep $item`
if [[ $RST ]]
then
RST=($RST)
PIDS[$count]=${RST[0]}
((count++))
fi
done
if [ $count -lt ${
then
if [ $count -gt 0 ]
then
for pid in ${PIDS[@]}
do
RST=`kill -9 $pid`
done
echo "$SIGN has service left and killed"
else
echo "$SIGN has no service left"
fi
echo 'no'
else
echo "$SIGN is running"
echo "ok"
fi
}
function startSers(){
SIGN=$1
SERS=$2
SERS=${SERS//_/ }
for cmd in $SERS
do
RST=`eval ${cmd//
done
echo $SIGN" has been started"
}
count=0
while (( $count<$choice ))
do
LINE=${CNF_LINES[$count]}
LINE=(${LINE//->/ })
SIGN=${LINE[0]}
LINE=${LINE[1]}
LINE=(${LINE//;/ })
SERS=${LINE[0]}
CMDS=${LINE[1]}
RST=`killOnLeft $SIGN $SERS`
echo $RST
if [[ $RST =~ no$ ]]
then
RST=`startSers $SIGN $CMDS`
echo $RST
fi
((count++))
done
start.cnf文件编写,后续需要添加别的一键启动,直接在里面添加即可;如果只要写其中之一的启动脚本,只要在start..cnf里面删除其对应行的启动命令,start.sh里面一切照旧
hadoop->NameNode_SecondaryNameNode_DataNode_ResourceManager_NodeManager;start-dfs.sh_start-yarn.sh
hive->HiveMetaStore_HiveServer2;nohup
zeppelin->ZeppelinServer;zeppelin-daemon.sh
zookeeper->QuorumPeerMain;zkServer.sh
hbase->HMaster_HRegionServer;start-hbase.sh
关闭脚本
stop.sh文件编写
LINE=(${LINE//@/ })
SERS=${LINE[0]}
SERS=${SERS//,/ }
COUNT=0
for item in $SERS
do
RST=`jps -ml|grep -w $item`
if [[ $RST ]]
then
COUNT=1
break
fi
done
if [ $COUNT -eq 1 ]
then
RST=`${LINE[1]//_/ }`
echo "STOPPED"
else
echo "NONE"
fi
}
function killSers(){
LINE=$1
LINE=${LINE//,/ }
COUNT=0
for item in $LINE
do
PID=`jps -ml|grep -w $item|awk {'print $1'}`
if [[ $PID ]]
then
PID=`kill -9 $PID`
((COUNT++))
fi
done
if [ $COUNT -gt 0 ]
then
echo "STOPPED"
else
echo "NONE"
fi
}
function stopByLine(){
SIGN=$1
TYPE=$2
LINE=$3
case $TYPE in
"STOP")
LINE=${LINE//;/ }
for item in $LINE
do
RST=`stopSers $item`
item=(${item//@/ })
item=${item[0]}
case $RST in
"STOPPED")
echo 'services_[_'$item'_]_stopped'
;;
"NONE")
echo 'no_services_[_'$item'_]_existed'
;;
esac
done
;;
"KILL")
RST=`killSers $LINE`
case $RST in
"STOPPED")
echo 'services_[_'$LINE'_]_stopped'
;;
"NONE")
echo 'no_services_[_'$LINE'_]_existed'
;;
esac
;;
esac
}
COUNT=0
while (( $COUNT<$choice ))
do
LINE=${CNF_LINES[$COUNT]}
LINE=(${LINE//->/ })
SIGN=${LINE[0]}
TYPE=${LINE[1]}
LINE=${LINE[2]}
RST=`stopByLine $SIGN $TYPE $LINE`
for item in $RST
do
echo ${item//_/ }
done
((COUNT++))
done
stop.cnf文件编写,添加删除关闭命令,跟启动是一样的,看start.cnf介绍即可
hbase->STOP->HMaster,HRegionServer@stop-hbase.sh
zookeeper->STOP->QuorumPeerMain@zkServer.sh_stop
zeppelin->STOP->ZeppelinServer@zeppelin-daemon.sh_stop
hive->KILL->HiveMetaStore,HiveServer2
hadoop->STOP->NameNode,SecondaryNameNode,DataNode@stop-dfs.sh;ResourceManager,NodeManager@stop-yarn.sh
运行脚本
启动命令:./start.sh
关闭命令:./stop.sh
注:必须在同一目录执行命令
然后根据提示选择对应选项
|