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