You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2013/05/03 22:30:44 UTC

svn commit: r1478962 - in /hbase/trunk/bin: hbase hbase-cleanup.sh

Author: stack
Date: Fri May  3 20:30:44 2013
New Revision: 1478962

URL: http://svn.apache.org/r1478962
Log:
HBASE-7244 Provide a command or argument to startup, that formats znodes if provided

Added:
    hbase/trunk/bin/hbase-cleanup.sh
Modified:
    hbase/trunk/bin/hbase

Modified: hbase/trunk/bin/hbase
URL: http://svn.apache.org/viewvc/hbase/trunk/bin/hbase?rev=1478962&r1=1478961&r2=1478962&view=diff
==============================================================================
--- hbase/trunk/bin/hbase (original)
+++ hbase/trunk/bin/hbase Fri May  3 20:30:44 2013
@@ -85,6 +85,7 @@ if [ $# = 0 ]; then
   echo "  rest             run an HBase REST server" 
   echo "  thrift           run the HBase Thrift server" 
   echo "  thrift2          run the HBase Thrift2 server"
+  echo "  clean            run the HBase clean up script"
   echo ""
   echo "PACKAGE MANAGEMENT"
   echo "  classpath        dump hbase CLASSPATH"
@@ -306,6 +307,22 @@ elif [ "$COMMAND" = "zookeeper" ] ; then
   if [ "$1" != "stop" ] ; then
     HBASE_OPTS="$HBASE_OPTS $HBASE_ZOOKEEPER_OPTS"
   fi
+elif [ "$COMMAND" = "clean" ] ; then
+  case $1 in
+    --cleanZk|--cleanHdfs|--cleanAll) 
+      matches="yes" ;;
+    *) ;;
+  esac
+  if [ $# -ne 1 -o "$matches" = "" ]; then
+    echo "Usage: hbase clean (--cleanZk|--cleanHdfs|--cleanAll)"
+    echo "Options: "
+    echo "        --cleanZk   cleans hbase related data from zookeeper."
+    echo "        --cleanHdfs cleans hbase related data from hdfs."
+    echo "        --cleanAll  cleans hbase related data from both zookeeper and hdfs."
+    exit 1;
+  fi
+  "$bin"/hbase-cleanup.sh $@
+  exit $?
 
 elif [ "$COMMAND" = "classpath" ] ; then
   echo $CLASSPATH

Added: hbase/trunk/bin/hbase-cleanup.sh
URL: http://svn.apache.org/viewvc/hbase/trunk/bin/hbase-cleanup.sh?rev=1478962&view=auto
==============================================================================
--- hbase/trunk/bin/hbase-cleanup.sh (added)
+++ hbase/trunk/bin/hbase-cleanup.sh Fri May  3 20:30:44 2013
@@ -0,0 +1,146 @@
+#!/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.
+# */
+#
+# cleans hbase related data from zookeeper and hdfs if no hbase process is alive.
+#
+# Environment Variables
+#
+#   HBASE_REGIONSERVERS    File naming remote hosts.
+#     Default is ${HADOOP_CONF_DIR}/regionservers
+#   HADOOP_CONF_DIR  Alternate conf dir. Default is ${HADOOP_HOME}/conf.
+#   HBASE_CONF_DIR  Alternate hbase conf dir. Default is ${HBASE_HOME}/conf.
+#   HADOOP_SLAVE_SLEEP Seconds to sleep between spawning remote commands.
+#   HADOOP_SLAVE_TIMEOUT Seconds to wait for timing out a remote command.
+#   HADOOP_SSH_OPTS Options passed to ssh when running remote commands.
+#
+
+usage="Usage: hbase-cleanup.sh (zk|hdfs|all)"
+
+bin=`dirname "$0"`
+bin=`cd "$bin">/dev/null; pwd`
+
+# This will set HBASE_HOME, etc.
+. "$bin"/hbase-config.sh
+
+case $1 in
+  --cleanZk|--cleanHdfs|--cleanAll) 
+    matches="yes" ;;
+  *) ;;
+esac
+if [ $# -ne 1 -o "$matches" = "" ]; then
+  echo $usage
+  exit 1;
+fi
+
+format_option=$1;
+
+distMode=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool hbase.cluster.distributed | head -n 1`
+
+if [ "$distMode" == 'false' ];then
+  echo "Skipping hbase data clearing in standalone mode." 2>&1
+  exit 1;
+fi
+
+zparent=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.parent`
+if [ "$zparent" == "null" ]; then zparent="/hbase"; fi
+
+hrootdir=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool hbase.rootdir`
+if [ "$hrootdir" == "null" ]; then hrootdir="file:///tmp/hbase-${USER}/hbase"; fi
+
+check_for_znodes() {
+  command=$1;
+  case $command in
+    regionservers)
+      zchild=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.rs`
+      if [ "$zchild" == "null" ]; then zchild="rs"; fi
+      ;;
+    backupmasters)
+      zchild=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.backup.masters`
+      if [ "$zchild" == "null" ]; then zchild="backup-masters"; fi
+      ;;
+  esac
+  znodes=`"$bin"/hbase zkcli ls $zparent/$zchild 2>&1 | tail -1 | sed "s/\[//" | sed "s/\]//"`
+  if [ "$znodes" != "" ]; then
+    echo -n "ZNode(s) [${znodes}] of $command are not expired. Exiting without cleaning hbase data."
+    echo #force a newline	
+    exit 1;
+  else
+    echo -n "All ZNode(s) of $command are expired."
+  fi
+  echo #force a newline
+}
+
+execute_zk_command() {
+  command=$1;
+  "$bin"/hbase zkcli $command 2>&1
+}
+
+execute_hdfs_command() {
+  command=$1;
+  "$bin"/hbase org.apache.hadoop.fs.FsShell $command 2>&1
+}
+
+clean_up() {
+  case $1 in
+  --cleanZk) 
+    execute_zk_command "rmr ${zparent}";
+    ;;
+  --cleanHdfs)
+    execute_hdfs_command "-rmr ${hrootdir}"
+    ;;
+  --cleanAll)
+    execute_zk_command "rmr ${zparent}";
+    execute_hdfs_command "-rmr ${hrootdir}"
+    ;;
+  *)
+    ;;
+  esac	
+}
+
+check_znode_exists() {
+  command=$1
+  "$bin"/hbase zkcli stat $command 2>&1 | grep "Node does not exist\|Connection refused"
+}
+
+check_znode_exists $zparent
+if [ $? -ne 0 ]; then
+  # make sure the online region server(s) znode(s) have been deleted before continuing
+  check_for_znodes regionservers
+  # make sure the backup master(s) znode(s) has been deleted before continuing
+  check_for_znodes backupmasters
+  # make sure the master znode has been deleted before continuing
+  zmaster=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.master`
+  if [ "$zmaster" == "null" ]; then zmaster="master"; fi
+    zmaster=$zparent/$zmaster
+    check_znode_exists $zmaster
+  if [ $? -ne 0 ]; then
+    echo -n "Master ZNode is not expired. Exiting without cleaning hbase data."
+    echo #force a new line
+    exit 1
+  else
+    echo "Active Master ZNode also expired."
+  fi
+  echo #force a newline
+else
+  echo "HBase parent znode ${zparent} does not exist."
+fi
+
+# cleans zookeeper and/or hdfs data.
+clean_up $format_option