zoukankan      html  css  js  c++  java
  • 集群一键启动/停止脚本

    集群一键启动/停止脚本

    1.集群一键启停脚本:mysh

    #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    p1=$1
    p2=$2
    user=`whoami`
    FT=`dirname $0`
    FT=`cd $FT; pwd`
    ARGS_CONFIG=$FT/args_config.pro
    
    # 获取参数
    LINUX_VERSION=`grep -w LINUX_VERSION $ARGS_CONFIG |gawk -F"=" '{ print $2 }'`
    HOSTS=(`grep -w HOSTS $ARGS_CONFIG |gawk -F"=" '{ print $2 }'`)
    ZOOKEEPER_HOME=`grep -w ZOOKEEPER_HOME $ARGS_CONFIG |gawk -F"=" '{ print $2 }'`
    HADOOP_HOME=`grep -w HADOOP_HOME $ARGS_CONFIG |gawk -F"=" '{ print $2 }'`
    HIVE_HOME=`grep -w HIVE_HOME $ARGS_CONFIG |gawk -F"=" '{ print $2 }'`
    
    
    # 打印使用说明
    function print_usage(){
        echo "Usage: mysh jps|zk|hadoop|hive [start | stop]"
        echo "mysh options:		                 describe:"
        echo "      jps                               查看三台设备启动的java程序"
        echo "      zk|zookeeper start|stop           启动或停止zookeeper"
        echo "      hadoop|hdp start|stop             启动或停止hadoop"
        echo "      hive|hiveserver2|hs2 start|stop   启动或停止hive(hiveserver2)"
    	echo "Examples:"
    	echo "      mysh jps"
    	echo "      mysh zk start"
    }
    
    # 检测Hadoop是否启动
    function check_hadoop(){
    	nncount=`mysh jps |grep NameNode |wc -l`
    	dncount=`mysh jps |grep DataNode |wc -l`
    	nmcount=`mysh jps |grep NodeManager |wc -l`
    	rmcount=`mysh jps |grep ResourceManager |wc -l`
    	if [ $nncount -eq 2 -a $dncount -eq 3 -a $nmcount -eq 3 -a $rmcount -eq 1 ]; then
    		echo "--------hadoop had started!--------"
    		echo "NameNode'number:$nncount [need 2]"
    		echo "DataNode'number:$dncount [need 3]"
    		echo "NodeManager'number:$nmcount [need 3]"
    		echo "ResourceManager'number:$rmcount [need 1]"
    	else	
    		echo "--------hadoop had no started or hadoop start faild!--------"
    		echo "NameNode'number:$nncount [need 2]"
    		echo "DataNode'number:$dncount [need 3]"
    		echo "NodeManager'number:$nmcount [need 3]"
    		echo "ResourceManager'number:$rmcount [need 1]"
    		mysh jps
    		exit
    	fi
    }
    
    # 检查zookeeper是否启动
    function check_zookeeper(){
    	zkcount=`mysh jps |grep QuorumPeerMain |wc -l`
    	if [ $zkcount -eq 3 ]; then
    		echo "--------zookeeper had started!--------"
    		echo `mysh jps |grep QuorumPeerMain`
    	else
    		echo "--------zookeeper had no started or zookeeper start faild!--------"
    		echo `mysh jps |grep QuorumPeerMain`
    		exit
    	fi
    }
    
    # 检查MySQL服务是否已经启动
    function check_mysql(){
    	mysqlcount=`ps -e | grep mysqld |wc -l`
    	if [ $mysqlcount -ge 1 ]; then
    		echo "--------mysql had started [hadoop01]--------"
    		echo `ps -e | grep mysqld`
    	else	
    		if [ $LINUX_VERSION -ge 8 ]; then
    			systemctl start mysqld.service
    		else
    			service mysqld start
    		fi
    		
    		if [ $? -ne 0 ]; then
    			echo "--------mysql server start faild!!!--------"
    			echo `ps -e | grep mysqld`
    			exit
    		else 
    			echo "--------mysql server start secced [hadoop01]--------"
    			echo `ps -e | grep mysqld`
    		fi
    	fi
    }
    
    if [ $# = 0 ]; then
      print_usage
      exit
    fi
    
    COMMAND=$1
    case $COMMAND in
      # usage flags
      --help|-help|-h)
        print_usage
        exit
        ;;
    	
      jps)
    	for host in ${HOSTS[*]}; do
    		echo ------------------- $host --------------
    		ssh $user@$host "$JAVA_HOME/bin/jps"
    	done
    	;;
    	
      zk|zookeeper)
    	if [[ $# -lt 2 ]]; then
    		echo "zk lease args"
    		echo "please input ${1} start|stop"
    		exit
    	fi
    	
    	if [[ $2 == "start" ]]; then
    		for i in ${HOSTS[*]}; do
    			echo ------------------- $2 $i zookeeper -------------------
    			ssh $i "source /etc/profile;$ZOOKEEPER_HOME/bin/zkServer.sh $2"
    		done
    		echo =====================================================
    		echo =====================================================
    		sleep 5
    		for j in ${HOSTS[*]}; do
    			echo ------------------- $j zookeeper status -------------------
    			ssh $j "source /etc/profile;$ZOOKEEPER_HOME/bin/zkServer.sh status"
    		done
    	elif [[ $2 == "stop" ]]; then
    		for i in ${HOSTS[*]}; do
    			echo ------------------- $2 $i zookeeper -------------------
    			ssh $i "source /etc/profile;$ZOOKEEPER_HOME/bin/zkServer.sh $2"
    		done
    		echo =====================================================
    		echo =====================================================
    		mysh jps
    	else 
    		echo "please input ${1} start|stop";
    		exit;
    	fi
    	;;
    	
      hdp|hadoop)
    	if [[ $# -lt 2 ]]; then
    		echo hadoop lease args;
    		echo "please input ${1} start|stop";
    		exit;
    	fi
    	
    	if [[ $2 == "start" ]]; then
    		# 检查zookeeper是否启动
    		check_zookeeper
    		
    		for i in ${HOSTS[0]}; do
    			echo ------------------- $i 正在启动hdfs --------------
    			ssh $i "source /etc/profile;$HADOOP_HOME/sbin/start-dfs.sh"
    		done
    		for i in ${HOSTS[1]}; do
    			echo ------------------- $i 正在启动yarn --------------
    			ssh $i "source /etc/profile;$HADOOP_HOME/sbin/start-yarn.sh"
    		done
    		for i in ${HOSTS[2]}; do
    			echo ------------------- $i 正在启动JobHistory --------------
    			ssh $i "source /etc/profile;$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver"
    		done
    		
    		echo =====================================================
    		echo =====================================================
    		sleep 5
    		check_hadoop
    		mysh jps
    	elif [[ $2 == "stop" ]]; then
    		for i in ${HOSTS[2]}; do
    			echo ------------------- $i 正在关闭JobHistory --------------
    			ssh $i "source /etc/profile;$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh stop historyserver"
    		done
    		for i in ${HOSTS[1]}; do
    			echo ------------------- $i 正在关闭yarn --------------
    			ssh $i "source /etc/profile;$HADOOP_HOME/sbin/stop-yarn.sh"
    		done
    		for i in ${HOSTS[0]}; do
    			echo ------------------- $i 正在关闭hdfs --------------
    			ssh $i "source /etc/profile;$HADOOP_HOME/sbin/stop-dfs.sh"
    		done
    
    		echo =====================================================
    		echo =====================================================
    		mysh jps
    	else
    		echo "please input ${1} start|stop";
    		exit;
    	fi
    	;;
    	
      hive|hiveserver2|hs2)
      	if [[ $# -lt 2 ]]; then
    		echo "hiveserver2 lease args";
    		echo "please input ${1} start|stop";
    		exit;
    	fi
    	
    	if [ $2 == "start" ]; then
    		# 检查MySQL服务是否已经启动
    		check_mysql
    		
    		# 检测Hadoop是否启动
    		check_hadoop
    		
    		echo "------------------- hadoop01 正在启动hiveserver2 --------------"
    		hiveserver2_count=`jps |grep RunJar |wc -l`
    		if [ $hiveserver2_count -ge 1 ]; then
    			jps |grep RunJar
    			echo "直接启动beeline"
    			beeline -u jdbc:hive2://hadoop01:10000/hivesql -nroot -proot
    		else
    			echo 'nohup hiveserver2 >/dev/null 2>&1 &'
    			nohup hiveserver2 >/dev/null 2>&1 &
    			if [ $? -eq 0 ]; then
    				sleep 20   # 这个一定要等20秒,以便hiveserver2完全启动......
    				jps |grep RunJar
    				echo "后启动hiveserver2"
    				beeline -u jdbc:hive2://hadoop01:10000/hivesql -nroot -proot
    			else
    				echo "-------------------hiveserver2 start faild!-------------------"
    			fi
    		fi
    	elif [ $2 == "stop" ]; then
    		echo "------------------- hadoop01 正在关闭hiveserver2 --------------"
    		hiveserver2_count=`jps |grep RunJar |wc -l`
    		if [ $hiveserver2_count -ge 1 ]; then
    			jps |grep RunJar
    			echo `jps |grep RunJar |awk -F" " {'print $1'}` |xargs kill -9
    		fi
    		mysh jps
    	else
    		echo "please input ${1} start|stop";
    		exit;
    	fi
    	;;
      *)
    	print_usage
    	exit
    	;;
    esac
    
    
    

    2.集群配置文件:args_config.pro

    LINUX_VERSION=8=
    HOSTS=hadoop01 hadoop02 hadoop03=
    ZOOKEEPER_HOME=/root/servers/zookeeper-3.5.5=
    HADOOP_HOME=/root/servers/hadoop-2.8.5=
    HIVE_HOME=/root/servers/hive-apache-2.3.6=
    

    3.说明:

    1.mysh 与 args_config.pro 在同一目录下
    2.args_config.pro中第二个等号不能省略(否则得到文本后面会多一个换行符)
    
  • 相关阅读:
    pandas 修改指定列中所有内容
    Python 实现获取【昨天】【今天】【明天】日期
    Selenium定位不到指定元素原因之iframe(unable to locate element)
    Pandas 通过追加方式合并多个csv
    python setup.py install 报错:error: [WinError 3] 系统找不到指定的路径。: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\PlatformSDK\lib
    pandas 如何判断指定列是否(全部)为NaN(空值)
    报错:PermissionError: [WinError 5] Access is denied: 'C:\Program Files\Anaconda3\Lib\site-packages\pywebhdfs'
    Node.js的函数返回值
    在Eclipse中使用JSHint检查JavaScript
    Node.js前端自动化工具:gulp
  • 原文地址:https://www.cnblogs.com/-xiaoyu-/p/12189618.html
Copyright © 2011-2022 走看看