| #!/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. |
| |
| cygwin=false |
| case "`uname`" in |
| CYGWIN*) cygwin=true;; |
| esac |
| |
| bin=`dirname "$0"` |
| bin=`cd "$bin"; pwd` |
| |
| . "$bin"/hive-config.sh |
| |
| SERVICE="" |
| HELP="" |
| SKIP_HBASECP=false |
| SKIP_HADOOPVERSION=false |
| EXECUTE_WITH_JAVA=false |
| |
| SERVICE_ARGS=() |
| while [ $# -gt 0 ]; do |
| case "$1" in |
| --version) |
| shift |
| SERVICE=version |
| ;; |
| --service) |
| shift |
| SERVICE=$1 |
| shift |
| ;; |
| --rcfilecat) |
| SERVICE=rcfilecat |
| shift |
| ;; |
| --orcfiledump) |
| SERVICE=orcfiledump |
| shift |
| ;; |
| --llapdump) |
| SERVICE=llapdump |
| shift |
| ;; |
| --replMigration) |
| SERVICE=replMigration |
| shift |
| ;; |
| --skiphadoopversion) |
| SKIP_HADOOPVERSION=true |
| shift |
| ;; |
| --skiphbasecp) |
| SKIP_HBASECP=true |
| shift |
| ;; |
| --help) |
| HELP=_help |
| shift |
| ;; |
| --debug*) |
| DEBUG=$1 |
| shift |
| ;; |
| *) |
| SERVICE_ARGS=("${SERVICE_ARGS[@]}" "$1") |
| shift |
| ;; |
| esac |
| done |
| |
| if [ "$SERVICE" = "" ] ; then |
| if [ "$HELP" = "_help" ] ; then |
| SERVICE="help" |
| else |
| SERVICE="cli" |
| fi |
| fi |
| |
| USE_BEELINE_FOR_HIVE_CLI="true" |
| if [[ "$SERVICE" == "cli" && "$USE_BEELINE_FOR_HIVE_CLI" == "true" ]] ; then |
| CLIUSER=`whoami` |
| SERVICE="beeline" |
| fi |
| |
| if [[ "$SERVICE" == "beeline" && ! -z "$BEELINE_URL_LEGACY" ]] ; then |
| SERVICE="beeline" |
| SERVICE_ARGS=("${SERVICE_ARGS[@]}" "-c" "${BEELINE_URL_LEGACY}") |
| fi |
| |
| if [[ "$SERVICE" =~ ^(help|version|orcfiledump|rcfilecat|schemaTool|cleardanglingscratchdir|beeline|llapstatus)$ ]] ; then |
| SKIP_HBASECP=true |
| fi |
| |
| if [[ "$SERVICE" =~ ^(help|schemaTool)$ ]] ; then |
| SKIP_HADOOPVERSION=true |
| fi |
| |
| if [ -f "${HIVE_CONF_DIR}/hive-env.sh" ]; then |
| . "${HIVE_CONF_DIR}/hive-env.sh" |
| fi |
| |
| CLASSPATH="${TEZ_CONF_DIR:-/etc/tez/conf}:${HIVE_CONF_DIR}" |
| |
| HIVE_LIB=${HIVE_HOME}/lib |
| |
| if [ "$SERVICE" != "beeline" ]; then |
| # needed for execution |
| if [ ! -f ${HIVE_LIB}/hive-exec-*.jar ]; then |
| echo "Missing Hive Execution Jar: ${HIVE_LIB}/hive-exec-*.jar" |
| exit 1; |
| fi |
| |
| if [ ! -f ${HIVE_LIB}/hive-metastore-*.jar ]; then |
| echo "Missing Hive MetaStore Jar" |
| exit 2; |
| fi |
| |
| # cli specific code |
| if [ ! -f ${HIVE_LIB}/hive-cli-*.jar ]; then |
| echo "Missing Hive CLI Jar" |
| exit 3; |
| fi |
| fi |
| |
| for f in ${HIVE_LIB}/*.jar; do |
| CLASSPATH=${CLASSPATH}:$f; |
| done |
| |
| # add the auxiliary jars such as serdes |
| if [ -d "${HIVE_AUX_JARS_PATH}" ]; then |
| hive_aux_jars_abspath=`cd ${HIVE_AUX_JARS_PATH} && pwd` |
| for f in $hive_aux_jars_abspath/*.jar; do |
| if [[ ! -f $f ]]; then |
| continue; |
| fi |
| if $cygwin; then |
| f=`cygpath -w "$f"` |
| fi |
| AUX_CLASSPATH=${AUX_CLASSPATH}:$f |
| if [ "${AUX_PARAM}" == "" ]; then |
| AUX_PARAM=file://$f |
| else |
| AUX_PARAM=${AUX_PARAM},file://$f; |
| fi |
| done |
| elif [ "${HIVE_AUX_JARS_PATH}" != "" ]; then |
| HIVE_AUX_JARS_PATH=`echo $HIVE_AUX_JARS_PATH | sed 's/,/:/g'` |
| if $cygwin; then |
| HIVE_AUX_JARS_PATH=`cygpath -p -w "$HIVE_AUX_JARS_PATH"` |
| HIVE_AUX_JARS_PATH=`echo $HIVE_AUX_JARS_PATH | sed 's/;/,/g'` |
| fi |
| AUX_CLASSPATH=${AUX_CLASSPATH}:${HIVE_AUX_JARS_PATH} |
| AUX_PARAM="file://$(echo ${HIVE_AUX_JARS_PATH} | sed 's/:/,file:\/\//g')" |
| fi |
| |
| # adding jars from auxlib directory |
| for f in ${HIVE_HOME}/auxlib/*.jar; do |
| if [[ ! -f $f ]]; then |
| continue; |
| fi |
| if $cygwin; then |
| f=`cygpath -w "$f"` |
| fi |
| AUX_CLASSPATH=${AUX_CLASSPATH}:$f |
| if [ "${AUX_PARAM}" == "" ]; then |
| AUX_PARAM=file://$f |
| else |
| AUX_PARAM=${AUX_PARAM},file://$f; |
| fi |
| done |
| if $cygwin; then |
| CLASSPATH=`cygpath -p -w "$CLASSPATH"` |
| CLASSPATH=${CLASSPATH};${AUX_CLASSPATH} |
| else |
| CLASSPATH=${CLASSPATH}:${AUX_CLASSPATH} |
| fi |
| |
| if [ "$SKIP_HBASECP" = false ]; then |
| # HBase detection. Need bin/hbase and a conf dir for building classpath entries. |
| # Start with BigTop defaults for HBASE_HOME and HBASE_CONF_DIR. |
| HBASE_HOME=${HBASE_HOME:-"/usr/lib/hbase"} |
| HBASE_CONF_DIR=${HBASE_CONF_DIR:-"/etc/hbase/conf"} |
| if [[ ! -d $HBASE_CONF_DIR ]] ; then |
| # not explicitly set, nor in BigTop location. Try looking in HBASE_HOME. |
| HBASE_CONF_DIR="$HBASE_HOME/conf" |
| fi |
| |
| # perhaps we've located the HBase config. if so, include it on classpath. |
| if [[ -d $HBASE_CONF_DIR ]] ; then |
| if [ "$HBASE_MR_CLASSPATH" != "" ]; then |
| HBASE_MR_CLASSPATH="${HBASE_MR_CLASSPATH},${HBASE_CONF_DIR}" |
| else |
| HBASE_MR_CLASSPATH="${HBASE_CONF_DIR}" |
| fi |
| CLASSPATH="${CLASSPATH}:${HBASE_CONF_DIR}" |
| fi |
| |
| # look for the hbase script. First check HBASE_HOME and then ask PATH. |
| if [[ -e $HBASE_HOME/bin/hbase ]] ; then |
| HBASE_BIN="$HBASE_HOME/bin/hbase" |
| fi |
| HBASE_BIN=${HBASE_BIN:-"$(which hbase)"} |
| |
| # perhaps we've located HBase. If so, include its details on the classpath |
| if [[ -n $HBASE_BIN ]] ; then |
| # exclude ZK, PB, and Guava (See HIVE-2055) |
| # depends on HBASE-8438 (hbase-0.94.14+, hbase-0.96.1+) for `hbase mapredcp` command |
| for x in $($HBASE_BIN mapredcp 2>&2 | tr ':' '\n') ; do |
| if [[ $x == *zookeeper* || $x == *protobuf-java* || $x == *guava* || $x == *slf4j* || $x == *log4j* ]] ; then |
| continue |
| fi |
| if [ "$HBASE_MR_CLASSPATH" != "" ]; then |
| HBASE_MR_CLASSPATH="${HBASE_MR_CLASSPATH},${x}" |
| else |
| HBASE_MR_CLASSPATH="${x}" |
| fi |
| CLASSPATH="${CLASSPATH}:${x}" |
| done |
| fi |
| fi |
| |
| if [[ "$SERVICE" == "llap" && ! -z "$HBASE_MR_CLASSPATH" ]] ; then |
| SERVICE_ARGS=("${SERVICE_ARGS[@]}" "-k" "${HBASE_MR_CLASSPATH}") |
| fi |
| |
| # supress the HADOOP_HOME warnings in 1.x.x |
| export HADOOP_HOME_WARN_SUPPRESS=true |
| |
| # to make sure log4j2.x and jline jars are loaded ahead of the jars pulled by hadoop |
| export HADOOP_USER_CLASSPATH_FIRST=true |
| |
| # pass classpath to hadoop |
| if [ "$HADOOP_CLASSPATH" != "" ]; then |
| export HADOOP_CLASSPATH="${CLASSPATH}:${HADOOP_CLASSPATH}" |
| else |
| export HADOOP_CLASSPATH="$CLASSPATH" |
| fi |
| |
| # also pass hive classpath to hadoop |
| if [ "$HIVE_CLASSPATH" != "" ]; then |
| export HADOOP_CLASSPATH="${HADOOP_CLASSPATH}:${HIVE_CLASSPATH}"; |
| fi |
| |
| # check for hadoop in the path |
| HADOOP_IN_PATH=`which hadoop 2>/dev/null` |
| if [ -f ${HADOOP_IN_PATH} ]; then |
| HADOOP_DIR=`dirname "$HADOOP_IN_PATH"`/.. |
| fi |
| # HADOOP_HOME env variable overrides hadoop in the path |
| HADOOP_HOME=${HADOOP_HOME:-${HADOOP_PREFIX:-$HADOOP_DIR}} |
| if [ "$HADOOP_HOME" == "" ]; then |
| if [ "$SERVICE" != "beeline" ]; then |
| echo "Cannot find hadoop installation: \$HADOOP_HOME or \$HADOOP_PREFIX must be set or hadoop must be in the path"; |
| exit 4; |
| fi |
| else |
| # add distcp to classpath, hive depends on it |
| for f in ${HADOOP_HOME}/share/hadoop/tools/lib/hadoop-distcp-*.jar; do |
| export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$f; |
| done |
| fi |
| |
| HADOOP=$HADOOP_HOME/bin/hadoop |
| if [ ! -f ${HADOOP} ]; then |
| if [ "$SERVICE" != "beeline" ]; then |
| echo "Cannot find hadoop installation: \$HADOOP_HOME or \$HADOOP_PREFIX must be set or hadoop must be in the path"; |
| exit 4; |
| else |
| JAVAEXE=$JAVA_HOME/bin/java |
| if [ ! -f ${JAVAEXE} ]; then |
| JAVAEXE=`which java 2>/dev/null` |
| if [ ! -f ${JAVAEXE} ]; then |
| echo "Cannot find hadoop or java installation: \$HADOOP_HOME or \$JAVA_HOME must be set or PATH be set"; |
| exit 5; |
| fi |
| else |
| echo "HADOOP_HOME not set, executing beeline using JAVA"; |
| export EXECUTE_WITH_JAVA=true |
| if [ -z ${HIVE_LIB} ]; then |
| export HIVE_LIB="${PWD}/lib" |
| export JAVAEXE=$JAVAEXE |
| fi |
| fi |
| fi |
| fi |
| |
| if [ "$EXECUTE_WITH_JAVA" == "false" ]; then |
| if [ "$SKIP_HADOOPVERSION" = false ]; then |
| # Make sure we're using a compatible version of Hadoop |
| if [ "x$HADOOP_VERSION" == "x" ]; then |
| HADOOP_VERSION=$($HADOOP version 2>&2 | awk -F"\t" '/Hadoop/ {print $0}' | cut -d' ' -f 2); |
| fi |
| |
| # Save the regex to a var to workaround quoting incompatabilities |
| # between Bash 3.1 and 3.2 |
| hadoop_version_re="^([[:digit:]]+)\.([[:digit:]]+)(\.([[:digit:]]+))?.*$" |
| |
| if [[ "$HADOOP_VERSION" =~ $hadoop_version_re ]]; then |
| hadoop_major_ver=${BASH_REMATCH[1]} |
| hadoop_minor_ver=${BASH_REMATCH[2]} |
| hadoop_patch_ver=${BASH_REMATCH[4]} |
| else |
| echo "Unable to determine Hadoop version information." |
| echo "'hadoop version' returned:" |
| echo `$HADOOP version` |
| exit 5 |
| fi |
| |
| if [ "$hadoop_major_ver" -lt "1" -a "$hadoop_minor_ver$hadoop_patch_ver" -lt "201" ]; then |
| echo "Hive requires Hadoop 0.20.x (x >= 1)." |
| echo "'hadoop version' returned:" |
| echo `$HADOOP version` |
| exit 6 |
| fi |
| fi |
| fi |
| |
| if [ "${AUX_PARAM}" != "" ]; then |
| if [[ "$SERVICE" != beeline ]]; then |
| HIVE_OPTS="$HIVE_OPTS --hiveconf hive.aux.jars.path=${AUX_PARAM}" |
| fi |
| AUX_JARS_CMD_LINE="-libjars ${AUX_PARAM}" |
| fi |
| |
| SERVICE_LIST="" |
| |
| for i in "$bin"/ext/*.sh ; do |
| . $i |
| done |
| |
| for i in "$bin"/ext/util/*.sh ; do |
| . $i |
| done |
| |
| if [ "$DEBUG" ]; then |
| if [ "$HELP" ]; then |
| debug_help |
| exit 0 |
| else |
| get_debug_params "$DEBUG" |
| export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS $HIVE_MAIN_CLIENT_DEBUG_OPTS" |
| fi |
| fi |
| |
| TORUN="" |
| for j in $SERVICE_LIST ; do |
| if [ "$j" = "$SERVICE" ] ; then |
| TORUN=${j}$HELP |
| fi |
| done |
| |
| # to initialize logging for all services |
| |
| export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j.configurationFile=hive-log4j2.properties " |
| |
| if [ -f "${HIVE_CONF_DIR}/parquet-logging.properties" ]; then |
| export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djava.util.logging.config.file=${HIVE_CONF_DIR}/parquet-logging.properties " |
| else |
| export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djava.util.logging.config.file=$bin/../conf/parquet-logging.properties " |
| fi |
| |
| if [[ "$SERVICE" =~ ^(hiveserver2|beeline|cli)$ ]] ; then |
| # If process is backgrounded, don't change terminal settings |
| if [[ ( ! $(ps -o stat= -p $$) =~ "+" ) && ! ( -p /dev/stdin ) && ( ! $(ps -o tty= -p $$) =~ "?" ) ]]; then |
| export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djline.terminal=jline.UnsupportedTerminal" |
| fi |
| fi |
| |
| export JVM_PID="$$" |
| |
| if [ "$TORUN" = "" ] ; then |
| echo "Service $SERVICE not found" |
| echo "Available Services: $SERVICE_LIST" |
| exit 7 |
| else |
| set -- "${SERVICE_ARGS[@]}" |
| $TORUN "$@" |
| fi |