blob: 6afc05e6b5108fddc8d8b2cb44e639d4c8ba16b8 [file] [log] [blame]
#!/usr/bin/env python
# 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.
import sys
import os
import subprocess
import time
import glob
from time import strftime
sleepTime = 3
def print_usage():
print "Usage: %s [--config confdir] COMMAND" % (sys.argv[0])
print " start Start HCatalog Server"
print " stop Stop HCatalog Server"
def start_hcat():
global sleepTime
# back ground the metastore service and record the pid
pidFile = os.path.join(os.environ['HCAT_LOG_DIR'], 'hcat.pid')
try:
pidFileDesc = open(pidFile, 'r')
for line in pidFileDesc:
pidWords = line.split()
for pidStr in pidWords:
pid = int(pidStr.rstrip('\n'))
pidFileDesc.close()
# check if service is already running, if so exit
os.kill(pid, 0)
sys.exit("HCatalog server appears to be running. If you are sure it is not remove %s and re-run this script" % (pidFile))
except:
pass
os.environ['HIVE_SITE_XML'] = os.path.join(os.environ['HIVE_HOME'], 'conf', 'hive-site.xml')
if os.path.exists(os.environ['HIVE_SITE_XML']) == False:
sys.exit("Missing hive-site.xml, expected at %s" % (os.environ['HIVE_SITE_XML']))
# 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
if 'AUX_CLASSPATH' not in os.environ:
os.environ['AUX_CLASSPATH'] = ''
os.environ['AUX_CLASSPATH'] += os.pathsep + os.path.dirname(os.environ['HIVE_SITE_XML'])
# add jars from db connectivity dir - be careful to not point to something like /lib
try:
for dbRootJars in glob.glob(os.path.join(os.environ['DBROOT'], '*.jar')):
os.environ['AUX_CLASSPATH'] += os.pathsep + dbRootJars
except:
pass
for hcatLibJars in glob.glob(os.path.join(os.environ['HCAT_PREFIX'], 'share', 'hcatalog', 'lib', '*.jar')):
os.environ['AUX_CLASSPATH'] += os.pathsep + hcatLibJars
for hcatJar in glob.glob(os.path.join(os.environ['HCAT_PREFIX'], 'share', 'hcatalog', '*.jar')):
os.environ['AUX_CLASSPATH'] += os.pathsep + hcatJar
if 'HADOOP_OPTS' not in os.environ:
os.environ['HADOOP_OPTS'] = ''
os.environ['HADOOP_OPTS'] += " -server -XX:+UseConcMarkSweepGC -XX:ErrorFile=" + os.path.join(os.environ['HCAT_LOG_DIR'], 'hcat_err_pid%p.log') + " -Xloggc:" + os.path.join(os.environ['HCAT_LOG_DIR'], 'hcat_gc.log-') + strftime("%Y%m%d%H%M") + " -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps"
os.environ['HADOOP_HEAPSIZE'] = '2048' # 8G is better if you have it
if os.name == "posix":
hivecmd = "hive"
else:
hivecmd = "hive.cmd"
command = os.path.join(os.environ['HIVE_HOME'], "bin", hivecmd)
outFile = os.path.join(os.environ['HCAT_LOG_DIR'], "hcat.out")
outfd = open(outFile, 'w')
errFile = os.path.join(os.environ['HCAT_LOG_DIR'], "hcat.err")
errfd = open(errFile, 'w')
windowsTmpFile = os.path.join(os.environ['HCAT_LOG_DIR'], "windows.tmp")
child = subprocess.Popen([command, "--service", "metastore"], stdout=outfd, stderr=errfd)
pid = child.pid
print "Started metastore server init, testing if initialized correctly..."
time.sleep(sleepTime)
try:
if os.name == "posix":
os.kill(pid, 0)
else:
ret = os.system("jps | find /I \"HiveMetaStore\" > " + windowsTmpFile + "")
if ret != 0:
raise Exception("error starting process")
windowsTmpFd = open(windowsTmpFile, 'r')
pid = int(windowsTmpFd.readline().split(" ")[0])
pidFileDesc = open(pidFile, 'w')
pidFileDesc.write(str(pid))
pidFileDesc.close()
print "Metastore initialized successfully"
except Exception as inst:
print inst
sys.exit("Metastore startup failed, see %s" % (errFile))
return
def stop_hcat():
pidFile = os.path.join(os.environ['HCAT_LOG_DIR'], 'hcat.pid')
pid = 0
kill = False
try:
pidFileDesc = open(pidFile, 'r')
for line in pidFileDesc:
words = line.split()
pid = int(words[0])
os.kill(pid, 6)
except:
kill = True
pass
if kill == True:
try:
os.kill(pid, 9)
except:
sys.exit("Failed to stop metastore server")
return
if __name__ == "__main__":
this = os.path.realpath(sys.argv[0])
bindir = os.path.dirname(this) + os.path.sep
import hcatcfg
hcatLogDir = hcatcfg.getHCatLogDir(bindir)
hcatcfg.findHCatPrefix(bindir)
os.environ['HCAT_LOG_DIR'] = hcatLogDir
if len(sys.argv) == 1:
print_usage()
sys.exit()
if sys.argv[1] == 'start':
start_hcat()
else:
stop_hcat()