blob: b5997c7093c3ec252193f9d02097f686f40defe0 [file] [log] [blame]
#!/bin/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.
#
# Launch script for the Drill Application Master (AM).
# This script runs under YARN and assumes the environment that YARN provides to an AM.
# This script likely will not work from the command line.
#
# Environment variables set by the client:
#
# DRILL_DEBUG Set to 1 to print environment and other information to
# diagnose problems.
# DRILL_AM_HEAP AM heap memory. (The AM uses no direct memory.)
# DRILL_AM_JAVA_OPT Optional additional JVM options for the AM, such as
# options to enable debugging.
#
# The following environment variables are set in the AM launch context,
# not used by this script, but used the the AM itself.
#
# DRILL_AM_APP_ID Informs the AM of its YARN application ID.
# (Strangely, YARN provides no way for an AM to learn this
# from YARN itself.)
# YARN_RM_WEBAPP Informs the AM of the URL to the YARN RM web app.
# Again, YARN informs the Client of this information, but
# not the AM.
# DRILL_ARCHIVE The DFS path to the Drill archive used to localize Drillbit
# code.
# SITE_ARCHIVE The DFS path to the optional site archive used to localize
# Drillbit configuration.
#
# Further, this script infers DRILL_HOME from the location
# of the script itself. The site directory (if used) is provided
# via the --config command-line option.
# YARN requires that the AM run as a child process until completion; so this script
# does not launch the AM in the background.
# This script is run from $DRILL_HOME/bin, wherever the user has configured it.
bin=`dirname "${BASH_SOURCE-$0}"`
bin=`cd "$bin">/dev/null; pwd`
DRILL_HOME=`cd "$bin/..">/dev/null; pwd`
if [ -n "$DRILL_DEBUG" ]; then
echo
echo "Drill AM launch script"
echo "DRILL_HOME: $DRILL_HOME"
fi
# AM-specific options for drill-config.sh. The AM
# code is in the tools folder which is not loaded by
# the Drillbit, only by the AM and client.
#
# Add the Hadoop config directory which we need to gain access to
# YARN and HDFS. This is an odd location to add the config dir,
# but if we add it sooner, Jersey complains with many class not
# found errors for reasons not yet known. Note that, to add the
# Hadoop config here, the Drill 1.6 $DRILL_HOME/conf/core-site.xml file
# MUST have been removed or renamed else Hadoop will pick up
# our dummy file instead of the real Hadoop file.
DRILL_TOOL_CP="$DRILL_HOME/jars/tools/*:$HADOOP_CONF_DIR"
# Use Drill's standard configuration, including drill-env.sh.
# The AM discards most of the information, but does use JAVA
# and a few others.
. "$DRILL_HOME/bin/drill-config.sh"
# DRILL_AM_HEAP and DRILL_AM_JAVA_OPTS are set by the
# Drill client via YARN. To set these, use the following
# configuration options:
#
# DRILL_AM_HEAP: drill.yarn.am.heap
# DRILL_AM_JAVA_OPTS: drill.yarn.am.vm-args
DRILL_AM_HEAP="${DRILL_AM_HEAP:-512M}"
# AM logging setup. Note: the Drillbit log file uses the default name
# of logback.xml.
# The AM uses a non-default log configuration file name.
# So, we must tell the AM to use an AM-specific file
# else we'll get warnings about the log.query.path system property
# not being set (and we won't pick up the AM logging settings.)
# See http://logback.qos.ch/manual/configuration.html
# The name provided must be on the class path. By adding
# the site dir before $DRILL_HOME/conf, the user can
# provide a custom config without editing the default one.
# If this is wrong, you will see files such as
# log.path_IS_UNDEFINED in the launch directory.
AM_LOG_CONF="-Dlogback.configurationFile=drill-am-log.xml"
#SITE_OPT="-Ddrill.yarn.siteDir=$DRILL_CONF_DIR"
AM_JAVA_OPTS="-Xms$DRILL_AM_HEAP -Xmx$DRILL_AM_HEAP -XX:MaxPermSize=512M"
AM_JAVA_OPTS="$AM_JAVA_OPTS $SITE_OPT $DRILL_AM_JAVA_OPTS $AM_LOG_CONF"
if [ -n "$DRILL_JAVA_LIB_PATH" ]; then
AM_JAVA_OPTS="$AM_JAVA_OPTS -Djava.library.path=$DRILL_JAVA_LIB_PATH"
fi
# drill-config.sh built the class path.
# Note that the class path uses the Hadoop, YARN and DFS jars
# packaged with Drill; not those from the YARN-provided
# environment variables in the launch context.
AMCMD="$JAVA $AM_JAVA_OPTS ${args[@]} -cp $CP org.apache.drill.yarn.appMaster.DrillApplicationMaster"
if [ -n "$DRILL_DEBUG" ]; then
echo "AM launch environment:"
echo "-----------------------------------"
env
echo "-----------------------------------"
echo "Command:"
echo "$AMCMD"
fi
# Note: no need to capture output, YARN does that for us.
# AM is launched as a child process of caller, replacing this script.
# Replace this script process with the AM. Needed so that
# the YARN node manager can kill the AM if necessary by killing
# the PID for this script.
exec $AMCMD