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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM