| #!/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. |
| # |
| # Runs Livy server. |
| |
| |
| usage="Usage: livy-server (start|stop|status)" |
| |
| export LIVY_HOME=$(cd $(dirname $0)/.. && pwd) |
| LIVY_CONF_DIR=${LIVY_CONF_DIR:-"$LIVY_HOME/conf"} |
| |
| if [ -f "${LIVY_CONF_DIR}/livy-env.sh" ]; then |
| # Promote all variable declarations to environment (exported) variables |
| set -a |
| . "${LIVY_CONF_DIR}/livy-env.sh" |
| set +a |
| fi |
| |
| # Find the java binary |
| if [ -n "${JAVA_HOME}" ]; then |
| RUNNER="${JAVA_HOME}/bin/java" |
| elif [ `command -v java` ]; then |
| RUNNER="java" |
| else |
| echo "JAVA_HOME is not set" >&2 |
| exit 1 |
| fi |
| |
| LIVY_IDENT_STRING=${LIVY_IDENT_STRING:-"$USER"} |
| LIVY_PID_DIR=${LIVY_PID_DIR:-"/tmp"} |
| LIVY_MAX_LOG_FILES=${LIVY_MAX_LOG_FILES:-5} |
| pid="$LIVY_PID_DIR/livy-$LIVY_IDENT_STRING-server.pid" |
| |
| livy_rotate_log() { |
| log=$1 |
| num=$LIVY_MAX_LOG_FILES |
| |
| if [ $LIVY_MAX_LOG_FILES -lt 1 ]; then |
| num=5 |
| fi |
| |
| if [ -f "$log" ]; then # rotate logs |
| while [ $num -gt 1 ]; do |
| prev=`expr $num - 1` |
| [ -f "$log.$prev" ] && mv "$log.$prev" "$log.$num" |
| num=$prev |
| done |
| mv "$log" "$log.$num" |
| fi |
| } |
| |
| create_dir() { |
| dir_name=$1 |
| dir_variable=$2 |
| if [ ! -d "$dir_name" ]; then |
| mkdir -p $dir_name |
| fi |
| if [ ! -w "$dir_name" ]; then |
| echo "$USER doesn't have permission to write to directory $dir_name (defined by $dir_variable)." |
| exit 1 |
| fi |
| } |
| |
| start_livy_server() { |
| LIBDIR="$LIVY_HOME/jars" |
| if [ ! -d "$LIBDIR" ]; then |
| LIBDIR="$LIVY_HOME/server/target/jars" |
| THRIFT_LIBDIR="$LIVY_HOME/thriftserver/server/target/jars" |
| fi |
| if [ ! -d "$LIBDIR" ]; then |
| echo "Could not find Livy jars directory." 1>&2 |
| exit 1 |
| else |
| if [ -d "$THRIFT_LIBDIR" ]; then |
| LIBDIR="$THRIFT_LIBDIR/*:$LIBDIR" |
| fi |
| fi |
| |
| LIVY_CLASSPATH="$LIBDIR/*:$LIVY_CONF_DIR" |
| |
| if [ -n "$SPARK_CONF_DIR" ]; then |
| LIVY_CLASSPATH="$LIVY_CLASSPATH:$SPARK_CONF_DIR" |
| fi |
| if [ -n "$HADOOP_CONF_DIR" ]; then |
| LIVY_CLASSPATH="$LIVY_CLASSPATH:$HADOOP_CONF_DIR" |
| fi |
| if [ -n "$YARN_CONF_DIR" ]; then |
| LIVY_CLASSPATH="$LIVY_CLASSPATH:$YARN_CONF_DIR" |
| fi |
| |
| command="$RUNNER $LIVY_SERVER_JAVA_OPTS -cp $LIVY_CLASSPATH:$CLASSPATH org.apache.livy.server.LivyServer" |
| |
| if [ $1 = "old" ]; then |
| exec $command |
| else |
| # get log directory |
| LIVY_LOG_DIR=${LIVY_LOG_DIR:-${LIVY_HOME}/logs} |
| create_dir $LIVY_LOG_DIR "LIVY_LOG_DIR" |
| create_dir $LIVY_PID_DIR "LIVY_PID_DIR" |
| log="$LIVY_LOG_DIR/livy-$LIVY_IDENT_STRING-server.out" |
| # Set default scheduling priority |
| LIVY_NICENESS=${LIVY_NICENESS:-0} |
| if [ -f "$pid" ]; then |
| TARGET_ID="$(cat "$pid")" |
| if [[ $(ps -p "$TARGET_ID" -o comm=) =~ "java" ]]; then |
| echo "livy-server running as process $TARGET_ID. Stop it first." |
| exit 1 |
| fi |
| fi |
| |
| livy_rotate_log "$log" |
| echo "starting $command, logging to $log" |
| nohup nice -n "$LIVY_NICENESS" $command >> "$log" 2>&1 < /dev/null & |
| newpid="$!" |
| echo "$newpid" > "$pid" |
| sleep 2 |
| # Check if the process has died; in that case we'll tail the log so the user can see |
| if [[ ! $(ps -p "$newpid" -o comm=) =~ "java" ]]; then |
| echo "failed to launch $command:" |
| tail -2 "$log" | sed 's/^/ /' |
| echo "full log in $log" |
| rm -rf "$pid" |
| exit 1 |
| fi |
| fi |
| } |
| |
| option=$1 |
| |
| case $option in |
| |
| (start) |
| start_livy_server "new" |
| ;; |
| |
| ("") |
| # make it compatible with previous version of livy-server |
| start_livy_server "old" |
| ;; |
| |
| (stop) |
| if [ -f "$pid" ]; then |
| TARGET_ID="$(cat "$pid")" |
| if [[ $(ps -p "$TARGET_ID" -o comm=) =~ "java" ]]; then |
| echo "stopping livy-server" |
| kill "$TARGET_ID" && rm -f "$pid" |
| else |
| echo "no livy-server to stop" |
| fi |
| else |
| echo "no livy-server to stop" |
| fi |
| ;; |
| |
| (status) |
| if [ -f "$pid" ]; then |
| TARGET_ID="$(cat "$pid")" |
| if [[ $(ps -p "$TARGET_ID" -o comm=) =~ "java" ]]; then |
| echo "livy-server is running (pid: $TARGET_ID)" |
| else |
| echo "livy-server is not running" |
| fi |
| else |
| echo "livy-server is not running" |
| fi |
| ;; |
| |
| (*) |
| echo $usage |
| exit 1 |
| ;; |
| |
| esac |
| |