From bef14d091897d599f161f06bf4956799ce9c0767 Mon Sep 17 00:00:00 2001 From: Suresh Srinivas Date: Tue, 3 May 2011 21:19:25 +0000 Subject: [PATCH] HADOOP-7179. Federation: Improve HDFS startup scripts. Contributed by Erik Steffl and Tanping Wang. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1099262 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 +++ bin/hadoop-config.sh | 29 +++++++++++++++++++++++++---- bin/slaves.sh | 21 +++++++++------------ 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index bd4289158a..727ee6e7bc 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -102,6 +102,9 @@ Trunk (unreleased changes) HADOOP-7235. Refactor the tail command to conform to new FsCommand class. (Daryn Sharp via szetszwo) + HADOOP-7179. Federation: Improve HDFS startup scripts. (Erik Steffl + and Tanping Wang via suresh) + OPTIMIZATIONS BUG FIXES diff --git a/bin/hadoop-config.sh b/bin/hadoop-config.sh index dfc9215d59..5b83487290 100644 --- a/bin/hadoop-config.sh +++ b/bin/hadoop-config.sh @@ -47,19 +47,40 @@ fi # Allow alternate conf dir location. export HADOOP_CONF_DIR="${HADOOP_CONF_DIR:-$HADOOP_HOME/conf}" -#check to see it is specified whether to use the slaves or the -# masters file +# User can specify hostnames or a file where the hostnames are (not both) +if [[ ( "$HADOOP_SLAVES" != '' ) && ( "$HADOOP_SLAVE_NAMES" != '' ) ]] ; then + echo \ + "Error: Please specify one variable HADOOP_SLAVES or " \ + "HADOOP_SLAVE_NAME and not both." + exit 1 +fi + +# Process command line options that specify hosts or file with host +# list if [ $# -gt 1 ] then if [ "--hosts" = "$1" ] then shift - slavesfile=$1 + export HADOOP_SLAVES="${HADOOP_CONF_DIR}/$$1" + shift + elif [ "--hostnames" = "$1" ] + then + shift + export HADOOP_SLAVE_NAMES=$1 shift - export HADOOP_SLAVES="${HADOOP_CONF_DIR}/$slavesfile" fi fi +# User can specify hostnames or a file where the hostnames are (not both) +# (same check as above but now we know it's command line options that cause +# the problem) +if [[ ( "$HADOOP_SLAVES" != '' ) && ( "$HADOOP_SLAVE_NAMES" != '' ) ]] ; then + echo \ + "Error: Please specify one of --hosts or --hostnames options and not both." + exit 1 +fi + cygwin=false case "`uname`" in CYGWIN*) cygwin=true;; diff --git a/bin/slaves.sh b/bin/slaves.sh index bc6078a8cb..b4bafe1097 100755 --- a/bin/slaves.sh +++ b/bin/slaves.sh @@ -40,24 +40,21 @@ bin=`cd "$bin"; pwd` . "$bin"/hadoop-config.sh -# If the slaves file is specified in the command line, -# then it takes precedence over the definition in -# hadoop-env.sh. Save it here. -HOSTLIST=$HADOOP_SLAVES - if [ -f "${HADOOP_CONF_DIR}/hadoop-env.sh" ]; then . "${HADOOP_CONF_DIR}/hadoop-env.sh" fi -if [ "$HOSTLIST" = "" ]; then - if [ "$HADOOP_SLAVES" = "" ]; then - export HOSTLIST="${HADOOP_CONF_DIR}/slaves" - else - export HOSTLIST="${HADOOP_SLAVES}" - fi +# Where to start the script, see hadoop-config.sh +# (it set up the variables based on command line options) +if [ "$HADOOP_SLAVE_NAMES" != '' ] ; then + SLAVE_NAMES=$HADOOP_SLAVE_NAMES +else + SLAVE_FILE=${HADOOP_SLAVES:-${HADOOP_CONF_DIR}/slaves} + SLAVE_NAMES=$(cat "$SLAVE_FILE" | sed 's/#.*$//;/^$/d') fi -for slave in `cat "$HOSTLIST"|sed "s/#.*$//;/^$/d"`; do +# start the daemons +for slave in $SLAVE_NAMES ; do ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }" \ 2>&1 | sed "s/^/$slave: /" & if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then