美文网首页
hive的脚本

hive的脚本

作者: 程序员的交流电 | 来源:发表于2020-09-10 15:37 被阅读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}'
    

    相关文章

      网友评论

          本文标题:hive的脚本

          本文链接:https://www.haomeiwen.com/subject/qzueektx.html