commit c0d2e9f9e7885c09ce0bafa8fd187f2572e419f5 Author: Todd Lipcon Date: Sun Jan 16 17:58:53 2011 -0800 Allow rolling restart to be RS or Master only diff --git bin/rolling-restart.sh bin/rolling-restart.sh index ae7a9be..8c3cc2b 100755 --- bin/rolling-restart.sh +++ bin/rolling-restart.sh @@ -34,7 +34,7 @@ # # Modelled after $HADOOP_HOME/bin/slaves.sh. -usage="Usage: $0 [--config ] commands..." +usage="Usage: $0 [--config ] [--rs-only] [--master-only]" bin=`dirname "$0"` bin=`cd "$bin">/dev/null; pwd` @@ -48,58 +48,92 @@ then exit $errCode fi +function usage() { + echo $usage + exit 1 +} + + +RR_RS=1 +RR_MASTER=1 + +for x in "$@" ; do + case "$x" in + --rs-only|-r) + RR_RS=1 + RR_MASTER=0 + ;; + --master-only) + RR_RS=0 + RR_MASTER=1 + ;; + *) + echo Bad argument: $x + usage + exit 1 + ;; + esac +done + # quick function to get a value from the HBase config file distMode=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool hbase.cluster.distributed` if [ "$distMode" == 'false' ]; then + if [ $RR_RS -ne 1 ] || [ $RR_MASTER -ne 1 ]; then + echo Cant do selective rolling restart if not running distributed + exit 1 + fi "$bin"/hbase-daemon.sh restart master else - # stop all masters before re-start to avoid races for master znode - "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" stop master - "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \ - --hosts "${HBASE_BACKUP_MASTERS}" stop master-backup - - # make sure the master znode has been deleted before continuing - zparent=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.parent` - if [ "$zparent" == "null" ]; then zparent="/hbase"; fi - zmaster=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.master` - if [ "$zmaster" == "null" ]; then zmaster="master"; fi - zmaster=$zparent/$zmaster - echo -n "Waiting for Master ZNode ${zmaster} to expire" - while bin/hbase zkcli stat $zmaster >/dev/null 2>&1; do - echo -n "." - sleep 1 - done - echo #force a newline + if [ $RR_MASTER -eq 1 ]; then + # stop all masters before re-start to avoid races for master znode + "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" stop master + "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \ + --hosts "${HBASE_BACKUP_MASTERS}" stop master-backup - # all masters are down, now restart - "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" start master - "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \ - --hosts "${HBASE_BACKUP_MASTERS}" start master-backup + # make sure the master znode has been deleted before continuing + zparent=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.parent` + if [ "$zparent" == "null" ]; then zparent="/hbase"; fi + zmaster=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.master` + if [ "$zmaster" == "null" ]; then zmaster="master"; fi + zmaster=$zparent/$zmaster + echo -n "Waiting for Master ZNode ${zmaster} to expire" + while bin/hbase zkcli stat $zmaster >/dev/null 2>&1; do + echo -n "." + sleep 1 + done + echo #force a newline - echo "Wait a minute for master to come up join cluster" - sleep 60 + # all masters are down, now restart + "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" start master + "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \ + --hosts "${HBASE_BACKUP_MASTERS}" start master-backup - # Master joing cluster will start in cleaning out regions in transition. - # Wait until the master has cleaned out regions in transition before - # giving it a bunch of work to do; master is vulnerable during startup - zunassigned=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.unassigned` - if [ "$zunassigned" == "null" ]; then zunassigned="unassigned"; fi - zunassigned="$zparent/$zunassigned" - echo -n "Waiting for ${zunassigned} to empty" - while true ; do - unassigned=`$bin/hbase zkcli stat ${zunassigned} 2>&1 |grep -e 'numChildren = '|sed -e 's,numChildren = ,,'` - if test 0 -eq ${unassigned} - then - break - else - echo -n " ${unassigned}" - fi - sleep 1 - done + echo "Wait a minute for master to come up join cluster" + sleep 60 - # unlike the masters, roll all regionservers one-at-a-time - export HBASE_SLAVE_PARALLEL=false - "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \ - --hosts "${HBASE_REGIONSERVERS}" restart regionserver + # Master joing cluster will start in cleaning out regions in transition. + # Wait until the master has cleaned out regions in transition before + # giving it a bunch of work to do; master is vulnerable during startup + zunassigned=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.unassigned` + if [ "$zunassigned" == "null" ]; then zunassigned="unassigned"; fi + zunassigned="$zparent/$zunassigned" + echo -n "Waiting for ${zunassigned} to empty" + while true ; do + unassigned=`$bin/hbase zkcli stat ${zunassigned} 2>&1 |grep -e 'numChildren = '|sed -e 's,numChildren = ,,'` + if test 0 -eq ${unassigned} + then + break + else + echo -n " ${unassigned}" + fi + sleep 1 + done + fi + if [ $RR_RS -eq 1 ]; then + # unlike the masters, roll all regionservers one-at-a-time + export HBASE_SLAVE_PARALLEL=false + "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \ + --hosts "${HBASE_REGIONSERVERS}" restart regionserver + fi fi