Hive的启动和关闭服务脚本

一、脚本命令

  • nohup: 放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态 ;
  • /dev/null:是Linux文件系统中的一个文件,被称为黑洞,所有写入改文件的内容都会被自动丢弃 ;
  • 2>&1 : 表示将错误重定向到标准输出上;
  • &: 放在命令结尾,表示后台运行;
  • 一般会组合使用: nohup [xxx命令操作]> file 2>&1 &,表示将xxx命令运行的结果输出到file中,并保持命令启动的进程在后台运行。

二、脚本

前台启动的方式导致需要打开多个shell窗口,可以使用如下方式后台方式启动:

#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
#如果 $HIVE_LOG_DIR 不是文件目录,则新建一个存放日志的文件夹
if [ ! -d $HIVE_LOG_DIR ] 
then
  mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数1为进程名,参数2为进程端口 function check_process() { pid
=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}') ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1) echo $pid [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1 } function hive_start() { metapid=$(check_process HiveMetastore 9083) cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &" cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 2>&1" [ -z "$metapid" ] && eval $cmd || echo "Metastroe服务已启动" server2pid=$(check_process HiveServer2 10000) cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &" [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2服务已启动" } function hive_stop() { metapid=$(check_process HiveMetastore 9083) [ "$metapid" ] && kill $metapid || echo "Metastore服务未启动" server2pid=$(check_process HiveServer2 10000) [ "$server2pid" ] && kill $server2pid || echo "HiveServer2服务未启动" } case $1 in "start") hive_start ;; "stop") hive_stop ;; "restart") hive_stop sleep 2 hive_start ;; "status") check_process HiveMetastore 9083 >/dev/null && echo "Metastore服务运行正常" || echo "Metastore服务运行异常" check_process HiveServer2 10000 >/dev/null && echo "HiveServer2服务运行正常" || echo "HiveServer2服务运行异常" ;; *) echo Invalid Args! echo 'Usage: '$(basename $0)' start|stop|restart|status' ;; esac

 添加执行权限

$ chmod +x $HIVE_HOME/bin/hiveservices.sh 

启动Hive后台服务 (测试脚本)

$ hiveservices.sh start 

此时,可以注释掉hive-site.xml中的以下内容

        <!-- 指定存储元数据要连接的地址 -->
<!--    <property>  
           <name>hive.metastore.uris</name>  
           <value>thrift://node01:9083</value>  
        </property>                 -->

        <!-- 指定hiveserver2连接的host -->
<!--    <property>
           <name>hive.server2.thrift.bind.host</name>
           <value>192.168.71.128</value>
        </property>               -->

        <!-- 指定 hiveserver2 连接的端口号 -->
<!--    <property>
           <name>hive.server2.thrift.port</name>
           <value>10000</value>
        </property>  -->

 使用beeline连接

beeline> !connect jdbc:hive2://master:10000

 

posted @ 2022-02-24 14:43  干了这瓶老干妈  阅读(1447)  评论(0编辑  收藏  举报
Live2D