700312e12f
Reorganize code so that the launcher library handles most of the work of printing usage messages, instead of having an awkward protocol between the library and the scripts for that. This mostly applies to SparkSubmit, since the launcher lib does not do command line parsing for classes invoked in other ways, and thus cannot handle failures for those. Most scripts end up going through SparkSubmit, though, so it all works. The change adds a new, internal command line switch, "--usage-error", which prints the usage message and exits with a non-zero status. Scripts can override the command printed in the usage message by setting an environment variable - this avoids having to grep the output of SparkSubmit to remove references to the "spark-submit" script. The only sub-optimal part of the change is the special handling for the spark-sql usage, which is now done in SparkSubmitArguments. Author: Marcelo Vanzin <vanzin@cloudera.com> Closes #5841 from vanzin/SPARK-6324 and squashes the following commits: 2821481 [Marcelo Vanzin] Merge branch 'master' into SPARK-6324 bf139b5 [Marcelo Vanzin] Filter output of Spark SQL CLI help. c6609bf [Marcelo Vanzin] Fix exit code never being used when printing usage messages. 6bc1b41 [Marcelo Vanzin] [SPARK-6324] [core] Centralize handling of script usage messages.
93 lines
2.9 KiB
Bash
Executable file
93 lines
2.9 KiB
Bash
Executable file
#!/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.
|
|
#
|
|
|
|
#
|
|
# Shell script for starting the Spark Shell REPL
|
|
|
|
cygwin=false
|
|
case "`uname`" in
|
|
CYGWIN*) cygwin=true;;
|
|
esac
|
|
|
|
# Enter posix mode for bash
|
|
set -o posix
|
|
|
|
export FWDIR="$(cd "`dirname "$0"`"/..; pwd)"
|
|
export _SPARK_CMD_USAGE="Usage: ./bin/spark-shell [options]"
|
|
|
|
# SPARK-4161: scala does not assume use of the java classpath,
|
|
# so we need to add the "-Dscala.usejavacp=true" flag manually. We
|
|
# do this specifically for the Spark shell because the scala REPL
|
|
# has its own class loader, and any additional classpath specified
|
|
# through spark.driver.extraClassPath is not automatically propagated.
|
|
SPARK_SUBMIT_OPTS="$SPARK_SUBMIT_OPTS -Dscala.usejavacp=true"
|
|
|
|
function main() {
|
|
if $cygwin; then
|
|
# Workaround for issue involving JLine and Cygwin
|
|
# (see http://sourceforge.net/p/jline/bugs/40/).
|
|
# If you're using the Mintty terminal emulator in Cygwin, may need to set the
|
|
# "Backspace sends ^H" setting in "Keys" section of the Mintty options
|
|
# (see https://github.com/sbt/sbt/issues/562).
|
|
stty -icanon min 1 -echo > /dev/null 2>&1
|
|
export SPARK_SUBMIT_OPTS="$SPARK_SUBMIT_OPTS -Djline.terminal=unix"
|
|
"$FWDIR"/bin/spark-submit --class org.apache.spark.repl.Main "$@"
|
|
stty icanon echo > /dev/null 2>&1
|
|
else
|
|
export SPARK_SUBMIT_OPTS
|
|
"$FWDIR"/bin/spark-submit --class org.apache.spark.repl.Main "$@"
|
|
fi
|
|
}
|
|
|
|
# Copy restore-TTY-on-exit functions from Scala script so spark-shell exits properly even in
|
|
# binary distribution of Spark where Scala is not installed
|
|
exit_status=127
|
|
saved_stty=""
|
|
|
|
# restore stty settings (echo in particular)
|
|
function restoreSttySettings() {
|
|
stty $saved_stty
|
|
saved_stty=""
|
|
}
|
|
|
|
function onExit() {
|
|
if [[ "$saved_stty" != "" ]]; then
|
|
restoreSttySettings
|
|
fi
|
|
exit $exit_status
|
|
}
|
|
|
|
# to reenable echo if we are interrupted before completing.
|
|
trap onExit INT
|
|
|
|
# save terminal settings
|
|
saved_stty=$(stty -g 2>/dev/null)
|
|
# clear on error so we don't later try to restore them
|
|
if [[ ! $? ]]; then
|
|
saved_stty=""
|
|
fi
|
|
|
|
main "$@"
|
|
|
|
# record the exit status lest it be overwritten:
|
|
# then reenable echo and propagate the code.
|
|
exit_status=$?
|
|
onExit
|
|
|