hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From st...@apache.org
Subject svn commit: r1203423 - in /hbase/branches/0.92: CHANGES.txt bin/region_status.rb
Date Thu, 17 Nov 2011 23:29:09 GMT
Author: stack
Date: Thu Nov 17 23:29:08 2011
New Revision: 1203423

URL: http://svn.apache.org/viewvc?rev=1203423&view=rev
Log:
HBASE-4771 Script to List HRegion Availability

Added:
    hbase/branches/0.92/bin/region_status.rb
Modified:
    hbase/branches/0.92/CHANGES.txt

Modified: hbase/branches/0.92/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/CHANGES.txt?rev=1203423&r1=1203422&r2=1203423&view=diff
==============================================================================
--- hbase/branches/0.92/CHANGES.txt (original)
+++ hbase/branches/0.92/CHANGES.txt Thu Nov 17 23:29:08 2011
@@ -715,6 +715,7 @@ Release 0.92.0 - Unreleased
    HBASE-4759  Migrate from JUnit 4.8.2 to JUnit 4.10 (nkeywal)
    HBASE-4554  Allow set/unset coprocessor table attributes from shell
                (Mingjie Lai)
+   HBASE-4771  Script to List HRegion Availability
 
   TASKS
    HBASE-3559  Move report of split to master OFF the heartbeat channel

Added: hbase/branches/0.92/bin/region_status.rb
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/bin/region_status.rb?rev=1203423&view=auto
==============================================================================
--- hbase/branches/0.92/bin/region_status.rb (added)
+++ hbase/branches/0.92/bin/region_status.rb Thu Nov 17 23:29:08 2011
@@ -0,0 +1,153 @@
+#/**
+# * Copyright 2011 The Apache Software Foundation
+# *
+# * 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.
+# */
+
+# View the current status of all regions on an HBase cluster.  This is
+# predominantly used to determined if all the regions in META have been
+# onlined yet on startup.
+#
+# To use this script, run:
+#
+#  ${HBASE_HOME}/bin/hbase org.jruby.Main region_status.rb [wait] [--table <table_name>]
+
+
+require 'optparse'
+
+usage = 'Usage : ./hbase org.jruby.Main region_status.rb [wait]' +
+  '[--table <table_name>]\n'
+OptionParser.new do |o|
+  o.banner = usage
+  o.on('-t', '--table TABLENAME', 'Only process TABLENAME') do |tablename|
+    $tablename = tablename
+  end
+  o.on('-h', '--help', 'Display help message') { puts o; exit }
+  o.parse!
+end
+
+SHOULD_WAIT = ARGV[0] == 'wait'
+if ARGV[0] and not SHOULD_WAIT
+  print usage
+  exit 1
+end
+
+
+require 'java'
+
+import org.apache.hadoop.hbase.HBaseConfiguration
+import org.apache.hadoop.hbase.HConstants
+import org.apache.hadoop.hbase.MasterNotRunningException
+import org.apache.hadoop.hbase.client.HBaseAdmin
+import org.apache.hadoop.hbase.client.HTable
+import org.apache.hadoop.hbase.client.Scan
+import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter
+import org.apache.hadoop.hbase.util.Bytes
+import org.apache.hadoop.hbase.util.Writables
+
+# disable debug logging on this script for clarity
+log_level = org.apache.log4j.Level::ERROR
+org.apache.log4j.Logger.getLogger("org.apache.zookeeper").setLevel(log_level)
+org.apache.log4j.Logger.getLogger("org.apache.hadoop.hbase").setLevel(log_level)
+
+config = HBaseConfiguration.create
+config.set 'fs.default.name', config.get(HConstants::HBASE_DIR)
+
+# wait until the master is running
+admin = nil
+while true
+  begin
+    admin = HBaseAdmin.new config
+    break
+  rescue MasterNotRunningException => e
+    print 'Waiting for master to start...\n'
+    sleep 1
+  end
+end
+
+meta_count = 0
+server_count = 0
+
+# scan META to see how many regions we should have
+if $tablename.nil?
+  scan = Scan.new
+else
+  tableNameMetaPrefix = $tablename + HConstants::META_ROW_DELIMITER.chr
+  scan = Scan.new(
+    (tableNameMetaPrefix + HConstants::META_ROW_DELIMITER.chr).to_java_bytes
+  )
+end
+scan.cache_blocks = false
+scan.caching = 10
+scan.setFilter(FirstKeyOnlyFilter.new)
+INFO = 'info'.to_java_bytes
+REGION_INFO = 'regioninfo'.to_java_bytes
+scan.addColumn INFO, REGION_INFO
+table = nil
+iter = nil
+while true
+  begin
+    table = HTable.new config, '.META.'.to_java_bytes
+    scanner = table.getScanner(scan)
+    iter = scanner.iterator
+    break
+  rescue IOException => ioe
+    print "Exception trying to scan META: #{ioe}"
+    sleep 1
+  end
+end
+while iter.hasNext
+  result = iter.next
+  rowid = Bytes.toString(result.getRow())
+  rowidStr = java.lang.String.new(rowid)
+  if not $tablename.nil? and not rowidStr.startsWith(tableNameMetaPrefix)
+    # Gone too far, break
+    break
+  end
+  region = Writables.getHRegionInfo result.getValue(INFO, REGION_INFO)
+  if not region.isOffline
+    # only include regions that should be online
+    meta_count += 1
+  end
+end
+scanner.close
+# If we're trying to see the status of all HBase tables, we need to include the
+# -ROOT- & .META. tables, that are not included in our scan
+if $tablename.nil?
+  meta_count += 2
+end
+
+# query the master to see how many regions are on region servers
+if not $tablename.nil?
+  $tableq = HTable.new config, $tablename.to_java_bytes
+end
+while true
+  if $tablename.nil?
+    server_count = admin.getClusterStatus().getRegionsCount()
+  else
+    server_count = $tableq.getRegionsInfo().size()
+  end
+  print "Region Status: #{server_count} / #{meta_count}\n"
+  if SHOULD_WAIT and server_count < meta_count
+    #continue this loop until server & meta count match
+    sleep 10
+  else
+    break
+  end
+end
+
+exit server_count == meta_count ? 0 : 1



Mime
View raw message