| #!/usr/bin/env bash |
| |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| bin=`which $0` |
| bin=`dirname ${bin}` |
| bin=`cd "$bin"; pwd` |
| |
| HCAT_LOG_DIR="$bin"/../var/log |
| |
| if [ -e "$bin/../libexec/hcat-config.sh" ]; then |
| . "$bin"/../libexec/hcat-config.sh |
| else |
| . "$bin"/hcat-config.sh |
| fi |
| |
| function print_usage() { |
| echo "Usage: $0 [--config confdir] COMMAND" |
| echo " start Start HCatalog Server" |
| echo " stop Stop HCatalog Server" |
| } |
| |
| function start_hcat() { |
| # back ground the metastore service and record the pid |
| PID_FILE=${HCAT_LOG_DIR}/hcat.pid |
| SLEEP_TIME_AFTER_START=15 |
| |
| # check if service is already running, if so exit |
| if [ -s "$PID_FILE" ] |
| then |
| echo "HCatalog server appears to be running. If you are SURE it is not" \ |
| " remove $PID_FILE and re-run this script." |
| exit 1 |
| fi |
| |
| HIVE_SITE_XML=${HIVE_HOME}/conf/hive-site.xml |
| if [ ! -e $HIVE_SITE_XML ] |
| then |
| echo "Missing hive-site.xml, expected at [$HIVE_SITE_XML]"; |
| exit 1 |
| fi |
| |
| # Find our Warehouse dir from the config file |
| # WAREHOUSE_DIR=`sed -n '/<name>hive.metastore.warehouse.dir<\/name>/ { |
| # n |
| # s/.*<value>\(.*\)<\/value>.*/\1/p |
| # }' $HIVE_SITE_XML` |
| # HADOOP_OPTS="$HADOOP_OPTS -Dhive.metastore.warehouse.dir=$WAREHOUSE_DIR " |
| |
| # add in hive-site.xml to classpath |
| AUX_CLASSPATH=${AUX_CLASSPATH}:`dirname ${HIVE_SITE_XML}` |
| |
| # add jars from db connectivity dir - be careful to not point to something like /lib |
| for f in ${DBROOT}/*.jar; do |
| AUX_CLASSPATH=${AUX_CLASSPATH}:$f |
| done |
| |
| # add jars from lib dir |
| for f in ${HCAT_PREFIX}/share/hcatalog/lib/*.jar ; do |
| AUX_CLASSPATH=${AUX_CLASSPATH}:$f |
| done |
| |
| for f in ${HCAT_PREFIX}/share/hcatalog/*.jar ; do |
| AUX_CLASSPATH=${AUX_CLASSPATH}:$f |
| done |
| |
| # echo AUX_CLASSPATH = ${AUX_CLASSPATH} |
| export AUX_CLASSPATH=${AUX_CLASSPATH} |
| |
| export HADOOP_HOME=$HADOOP_HOME |
| #export HADOOP_OPTS="-Dlog4j.configuration=file://${HCAT_PREFIX}/conf/log4j.properties" |
| export HADOOP_OPTS="${HADOOP_OPTS} -server -XX:+UseConcMarkSweepGC -XX:ErrorFile=${HCAT_LOG_DIR}/hcat_err_pid%p.log -Xloggc:${HCAT_LOG_DIR}/hcat_gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps" |
| export HADOOP_HEAPSIZE=2048 # 8G is better if you have it |
| export METASTORE_PORT=${METASTORE_PORT} |
| nohup ${HIVE_HOME}/bin/hive --service metastore >${HCAT_LOG_DIR}/hcat.out 2>${HCAT_LOG_DIR}/hcat.err & |
| |
| PID=$! |
| |
| if [ "${PID}x" == "x" ] ; then # we failed right off |
| echo "Metastore startup failed, see ${HCAT_LOG_DIR}/hcat.err" |
| exit 1 |
| fi |
| |
| echo Started metastore server init, testing if initialized correctly... |
| sleep $SLEEP_TIME_AFTER_START |
| |
| if ps -p $PID > /dev/null |
| then |
| echo $PID > $PID_FILE |
| echo "Metastore initialized successfully on port[${METASTORE_PORT}]." |
| else |
| echo "Metastore startup failed, see ${HCAT_LOG_DIR}/hcat.err" |
| exit 1 |
| fi |
| } |
| |
| function stop_hcat() { |
| SLEEP_TIME_AFTER_KILL=30 |
| |
| PID_FILE=${HCAT_LOG_DIR}/hcat.pid |
| echo looking for $PID_FILE |
| |
| # check if service is already running, if so exit |
| if [ -s "$PID_FILE" ] ; then |
| PID=`cat $PID_FILE` |
| echo "Found metastore server process $PID, killing..." |
| kill $PID |
| sleep $SLEEP_TIME_AFTER_KILL |
| |
| # if process is still around, use kill -9 |
| if ps -p $PID > /dev/null ; then |
| echo "Initial kill failed, getting serious now..." |
| kill -9 $PID |
| fi |
| if ps -p $PID > /dev/null ; then |
| echo "Wow, even kill -9 failed, giving up; sorry" |
| exit 1 |
| else |
| rm -rf $PID_FILE |
| echo "Successfully shutdown metastore" |
| fi |
| fi |
| } |
| |
| if [ $# = 0 ]; then |
| print_usage |
| exit |
| fi |
| |
| COMMAND=$1 |
| case $COMMAND in |
| start) |
| start_hcat |
| ;; |
| stop) |
| stop_hcat |
| ;; |
| esac |
| |