blob: bf3c3f1a9ff41cf4c32dfdaec3a08aa0166703d9 [file] [log] [blame]
#!/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=${HCAT_LOG_DIR:-"$bin"/../var/log}
HCAT_PID_DIR=${HCAT_PID_DIR:-$HCAT_LOG_DIR}
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_PID_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_PID_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