hive的脚本

2020-09-10  本文已影响0人  程序员的交流电

本脚本主要有三个功能:
1.启动metasore和hiveserver2
2.关闭metastore和hiveserver2
3.查看metatore和hiveserver2进程情况

#!/bin/bash

# 使用case语句进行不同功能的判断
case $1 in
"start"){
        # metastoe和hiveserver2都是前台启动的,这里改成后台启动,并且将日志输出到/dev/null
        nohup /opt/module/hive/bin/hive  --service metastore > /dev/null 2>&1 &
        # 这里sleep 10S 因为如果hive配置里面配置了metasote.url的话
        # hiveserver2不会启动内部的连接元数据的metatsote,先启动的话,会报错
        sleep 10s
        nohup /opt/module/hive/bin/hive  --service hiveserver2 > /dev/null 2>&1 &
};;
"stop"){
        # hive,没有自己的关闭命令,一般都是使用kill
        # metastore和hivesever2在jps里面都是RunJar,获取他们的PID,然后kill -9
        jps | grep RunJar  | awk '{print \$1}'  | xargs kill -9
};;
"status"){
        # status功能主要是因为metastore和hiveServer2在jps里面都是只会显示RunJar,不好区分,所以添加这个功能
        #首先查询是否存在两个进程
        meta=`jps -m | grep metastore`
        server=`jps -m | grep HiveServer2`

        # 判断是否存在
        if [ -n "$meta" ]
        then
                # 如果存在进程的话,使用下面的这句命令输出 PID metastore格式,方便观察
                jps -m | grep metastore | awk '{print $1}' | xargs echo metastore | awk '{print $2,$1}'
        else
                # 如果没有启动的话,输出metastore stopped
                echo "metastore stopped"
        fi
        if [ -n "$server" ]
        then
                jps -m | grep HiveServer2 | awk '{print $1}' | xargs echo hiveserver2 | awk '{print $2,$1}'
        else
                echo "hiveserver2 stopped"
        fi
};;
"help"){
        echo "args:hive.sh  start|stop|status|"
};;
# 注意case语句一定要这个esac的结尾,我就经常忘记加,esac其实就是case的倒序
esac

本脚本知识点总结

1. case的语句格式
case $1 in
"start"){
    echo "start"
};;
"stop"){
    echo "stop"
};;
esac
2.nohup后台运行进程 并丢弃日志
nohup commond > /dev/null 2>&1 &
3.关闭没有关闭命令的进程

这里分为两种情况,一种是jsp,另外一种是ps -ef
首先是ps -ef命令,jps只能看到java进程,ps -ef可以看到所有进程,包括grep进程,这个是我们不想要的
假如现在我们找一个abc的进程,注意这里的abc必须是唯一的,一般打印出来的有两个进程,一个是abc进程一个是grep进程

ps -ef | grep abc

这个时候我们需要排除grep,这的-v参数就是排除的意思,剩下的就只有abc进程了

ps -ef | grep abc | grep -v grep

然后我们使用awk,获取进程的PID,awk默认的分隔符是逗号,并且PID是在第一列,
这里有一个注意点,当脚本远程执行的时候,需要转义 \

ps -ef | grep abc | grep -v grep | awk '{print $1}'

最后就是xargs,这个是把上一个输出,作为后面命令的参数的
kill -9 将xargs传过来的PID作为参数杀掉

ps -ef | grep file-flume-kafka | grep -v grep |awk  '{print \$2}' | xargs kill -9

jps的话就不用使用grep -v grep了

jps | grep RunJar  | awk '{print \$1}'  | xargs kill -9
4.将命令执行结果赋值给一个变量,反双引号里面的命令是可以执行的

注意赋值给变量等号两边不可以有空格

mate=`jps -m | grep metastore`
5.判断变量是否为空那个
if [ -n $mate ]
6.使用jps,打印的hive相关进程现实Runjar的,这里将他变成对应hive进程名

awk将PID获取,然后通过xargs传值到后面的echo里面,这里打印是metastore PID
我希望将PID放到前面,使用awk,交互答应的位置,注意awk默认的间隔是空格awk '{print $2,$1}'

jps -m | grep metastore | awk '{print $1}' | xargs echo metastore | awk '{print $2,$1}'
上一篇 下一篇

猜你喜欢

热点阅读