blob: e6ea70c80a0090ee953f2dc3577ea659725b95bc [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.
# Resolve our absolute path
# resolve links - $0 may be a softlink
import os
import sys
import glob
import subprocess
# Determine our absolute path, resolving any symbolic links
this = os.path.realpath(sys.argv[0])
bindir = os.path.dirname(this) + os.path.sep
# Add the libexec directory to our search path so we can find the hcat-config
# module
sys.path.append(os.path.join(bindir, os.path.pardir, "libexec"))
import hcatcfg
# Find our config directory and Hadoop
hcatcfg.findCfgFile()
hcatcfg.findHadoop()
# See if any debug flags have been turned on
debug = 0
try:
sys.argv.remove('-secretDebugCmd')
debug = 1
except ValueError:
pass
dumpClasspath = 0
try:
sys.argv.remove('-classpath')
dumpClasspath = 1
except ValueError:
pass
# find HIVE installation directory
hcatcfg.findHive()
if 'HIVE_HOME' not in os.environ:
sys.exit("Hive not found. Set HIVE_HOME to directory containing Hive.")
if 'HIVE_LIB_DIR' not in os.environ:
sys.exit("Cannot find lib dir within HIVE_HOME %s" % (os.environ['HIVE_HOME'] + os.path.sep + "lib"))
if 'HIVE_CONF_DIR' not in os.environ:
sys.exit("Cannot find conf dir within HIVE_HOME %s" % (os.environ['HIVE_HOME'] + os.path.sep + "conf"))
##### jars addition
# find the hcatalog jar and add it to hadoop classpath
hcatPrefix = hcatcfg.findHCatPrefix(bindir)
hcatJars = glob.glob(os.path.join(hcatPrefix, 'share', 'hcatalog', 'hive-hcatalog-core-*.jar'))
if len(hcatJars) > 1:
sys.exit("Found more than one hcatalog jar in the prefix path")
if len(hcatJars) < 1:
sys.exit("HCatalog jar not found in directory %s" % (os.path.join(hcatPrefix, 'share', 'hcatalog', 'hive-hcatalog-core-*.jar')))
if 'HADOOP_CLASSPATH' not in os.environ:
os.putenv('HADOOP_CLASSPATH', '')
os.environ['HADOOP_CLASSPATH'] = ''
os.environ['HADOOP_CLASSPATH'] += os.pathsep + hcatJars[0]
# done adding the hcatalog jar to the hadoop classpath
# add all the other jars
hcatLibJarFiles = os.path.join(hcatPrefix, 'share', 'hcatalog', 'lib', '*')
os.environ['HADOOP_CLASSPATH'] += os.pathsep + hcatLibJarFiles
# adding hive jars
hiveJars = os.path.join(os.environ['HIVE_LIB_DIR'], '*')
os.environ['HADOOP_CLASSPATH'] += os.pathsep + hiveJars
# adding hbase jars in classpath
if 'HBASE_HOME' in os.environ and os.path.isdir(os.path.join(os.environ['HBASE_HOME'], 'lib')):
os.environ['HADOOP_CLASSPATH'] += os.pathsep + os.path.join(os.environ['HBASE_HOME'], 'lib', '*');
##### done with addition of jars
##### add conf dirs to the classpath
# add the hive conf dir and if exists hbase conf dir
os.environ['HADOOP_CLASSPATH'] += os.pathsep + os.environ['HIVE_CONF_DIR']
# if the hbase conf dir is present in the environment, add it.
# there are no checks to see if that path exists
# FIXME add check - original shell script does not do much if the path
# does not exist either
try:
if os.environ['HBASE_CONF_DIR'] != "":
os.environ['HADOOP_CLASSPATH'] += os.pathsep + os.environ['HBASE_CONF_DIR']
except:
pass
##### done with adding conf dirs to the classpath
sys.stdout.flush()
if os.name == "posix":
hadoopcmd = "hadoop"
else:
hadoopcmd = "hadoop.cmd"
if 'HADOOP_OPTS' not in os.environ:
os.environ['HADOOP_OPTS'] = ''
# log under the Hive log dir but use a separate log file for HCat logs
os.environ['HADOOP_OPTS'] += " " + "-Dhive.log.file=hcat.log" + " " + "-Dhive.log.dir=" + os.path.join(os.environ['HIVE_HOME'], "logs")
##### Uncomment to debug log4j configuration
#os.environ['HADOOP_OPTS'] += " -Dlog4j.debug"
cmdLine = os.path.join(os.environ['HADOOP_PREFIX'], "bin", hadoopcmd)
if os.name == "posix":
cmd = [cmdLine, "jar", hcatJars[0], "org.apache.hive.hcatalog.cli.HCatCli"] + sys.argv[1:len(sys.argv)]
else:
cmd = ["call", cmdLine, "jar", hcatJars[0], "org.apache.hive.hcatalog.cli.HCatCli"] + sys.argv[1:len(sys.argv)]
if debug == 1:
print "Would run:"
print "exec " + str(cmd)
print " with HADOOP_CLASSPATH set to %s" % (os.environ['HADOOP_CLASSPATH'])
try:
print " and HADOOP_OPTS set to %s" % (os.environ['HADOOP_OPTS'])
except:
pass
else:
if dumpClasspath == 1:
print os.environ['HADOOP_CLASSPATH']
else:
if os.name == "posix":
retval = subprocess.call(cmd)
else:
retval = subprocess.call(cmd, stdin=None, stdout=None, stderr=None, shell=True)
os.environ['errorlevel'] = str(retval)
sys.exit(retval)