| #! /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. |
| |
| bin_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) |
| at_home=$( cd "$( dirname "$bin_dir" )" && pwd ) |
| source "${bin_dir}/build" |
| |
| function print_usage() { |
| cat <<EOF |
| |
| Usage: agitator <command> |
| |
| Possible commands: |
| start Starts agitator |
| stop Stop agitator |
| EOF |
| } |
| |
| function start_agitator() { |
| hash pssh 2>/dev/null || { echo >&2 "The agitator requires pssh to be installed. Aborting."; exit 1; } |
| |
| mkdir -p "${at_home}/logs" |
| log_base="${at_home}/logs/$(date +%Y%m%d%H%M%S)_$(hostname)" |
| libexec="${at_home}/libexec" |
| master_log="${log_base}_master-agitator" |
| tserver_log="${log_base}_tserver-agitator" |
| datanode_log="${log_base}_datanode-agitator" |
| master_cmd="nohup ${libexec}/master-agitator.pl $AGTR_MASTER_KILL_SLEEP_TIME $AGTR_MASTER_RESTART_SLEEP_TIME" |
| tserver_cmd="nohup ${libexec}/tserver-agitator.pl $AGTR_TSERVER_KILL_SLEEP_TIME $AGTR_TSERVER_RESTART_SLEEP_TIME $AGTR_TSERVER_MIN_KILL $AGTR_TSERVER_MAX_KILL" |
| datanode_cmd="nohup ${libexec}/datanode-agitator.pl $AGTR_DATANODE_KILL_SLEEP_TIME $AGTR_DATANODE_RESTART_SLEEP_TIME $HADOOP_HOME $AGTR_DATANODE_MIN_KILL $AGTR_DATANODE_MAX_KILL" |
| [[ -n $AGITATOR_USER ]] || AGITATOR_USER=$(whoami) |
| |
| if [[ $AGITATOR_USER == "$AGTR_ACCUMULO_USER" ]]; then |
| echo "Running master-agitator and tserver-agitator as $AGITATOR_USER" |
| $master_cmd > "${master_log}.out" 2> "${master_log}.err" & |
| $tserver_cmd > "${tserver_log}.out" 2> "${tserver_log}.err" & |
| else |
| echo "Running master-agitator and tserver-agitator as $AGTR_ACCUMULO_USER using sudo." |
| sudo -u "$AGTR_ACCUMULO_USER" "$master_cmd" > "${master_log}.out" 2> "${master_log}.err" & |
| sudo -u "$AGTR_ACCUMULO_USER" "$tserver_cmd" > "${tserver_log}.out" 2> "${tserver_log}.err" & |
| fi |
| if [[ $AGITATOR_USER == "$AGTR_HDFS_USER" ]]; then |
| echo "Running datanode-agitator as $AGITATOR_USER" |
| $datanode_cmd > "${datanode_log}.out" 2> "${datanode_log}.err" & |
| else |
| echo "Running datanode-agitator as $AGTR_HDFS_USER using sudo." |
| sudo -u "$AGTR_HDFS_USER" "$datanode_cmd" > "${datanode_log}.out" 2> "${datanode_log}.err" & |
| fi |
| |
| if ${AGTR_HDFS:-false} ; then |
| agitator_log=${log_base}_hdfs-agitator |
| sudo -u "$AGTR_HDFS_SUPERUSER" nohup "${libexec}/hdfs-agitator.pl" --sleep "${AGTR_HDFS_SLEEP_TIME}" --hdfs-cmd "${AGTR_HDFS_COMMAND}" --superuser "${AGTR_HDFS_SUPERUSER}" >"${agitator_log}.out" 2>"${agitator_log}.err" & |
| fi |
| } |
| |
| function stop_agitator() { |
| [[ -n $AGITATOR_USER ]] || AGITATOR_USER=$(whoami) |
| if [[ $AGITATOR_USER == "$AGTR_ACCUMULO_USER" ]]; then |
| echo "Stopping all processes matching 'datanode-agitator.pl' as $AGTR_HDFS_USER" |
| sudo -u "$AGTR_HDFS_USER" pkill -f datanode-agitator.pl 2>/dev/null |
| echo "Stopping all processes matching 'hdfs-agitator.pl' as $AGTR_HDFS_USER" |
| sudo -u "$AGTR_HDFS_USER" pkill -f hdfs-agitator.pl 2>/dev/null |
| echo "Stopping all processes matching 'agitator.pl' as $AGITATOR_USER" |
| pkill -f agitator.pl 2>/dev/null 2>/dev/null |
| else |
| echo "Stopping all processes matching 'datanode-agitator.pl' as $AGTR_HDFS_USER" |
| sudo -u "$AGTR_HDFS_USER" pkill -f datanode-agitator.pl 2>/dev/null |
| echo "Stopping all processes matching 'hdfs-agitator.pl' as $AGTR_HDFS_USER" |
| sudo -u "$AGTR_HDFS_USER" pkill -f hdfs-agitator.pl 2>/dev/null |
| echo "Stopping all processes matching 'agitator.pl' as $AGTR_ACCUMULO_USER" |
| sudo -u "$AGTR_ACCUMULO_USER" pkill -f agitator.pl 2>/dev/null |
| fi |
| } |
| |
| case "$1" in |
| start) |
| start_agitator |
| ;; |
| stop) |
| stop_agitator |
| ;; |
| *) |
| echo "ERROR: unknown command - $2" |
| print_usage |
| exit 1 |
| esac |