HBASE-12495 Use interfaces in the shell scripts (solomon duskis)

Conflicts:
	hbase-shell/src/main/ruby/hbase/quotas.rb
This commit is contained in:
stack 2014-11-24 12:18:25 -08:00
parent 3cd1d7ab0c
commit a4a3ffd560
6 changed files with 40 additions and 16 deletions

View File

@ -18,8 +18,8 @@
# #
# HBase ruby classes. # HBase ruby classes.
# Has wrapper classes for org.apache.hadoop.hbase.client.HBaseAdmin # Has wrapper classes for org.apache.hadoop.hbase.client.Admin
# and for org.apache.hadoop.hbase.client.HTable. Classes take # and for org.apache.hadoop.hbase.client.Table. Classes take
# Formatters on construction and outputs any results using # Formatters on construction and outputs any results using
# Formatter methods. These classes are only really for use by # Formatter methods. These classes are only really for use by
# the hirb.rb HBase Shell script; they don't make much sense elsewhere. # the hirb.rb HBase Shell script; they don't make much sense elsewhere.

View File

@ -32,7 +32,9 @@ module Hbase
include HBaseConstants include HBaseConstants
def initialize(configuration, formatter) def initialize(configuration, formatter)
@admin = org.apache.hadoop.hbase.client.HBaseAdmin.new(configuration) # @admin = org.apache.hadoop.hbase.client.HBaseAdmin.new(configuration)
@conn = org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(configuration)
@admin = @conn.getAdmin()
connection = @admin.getConnection() connection = @admin.getConnection()
@conf = configuration @conf = configuration
@zk_wrapper = org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.new(configuration, @zk_wrapper = org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.new(configuration,
@ -181,7 +183,7 @@ module Hbase
tableExists(table_name) tableExists(table_name)
raise ArgumentError, "Table #{table_name} is enabled. Disable it first.'" if enabled?(table_name) raise ArgumentError, "Table #{table_name} is enabled. Disable it first.'" if enabled?(table_name)
@admin.deleteTable(table_name) @admin.deleteTable(org.apache.hadoop.hbase.TableName.valueOf(table_name))
end end
#---------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------
@ -351,8 +353,7 @@ module Hbase
#---------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------
# Truncates table (deletes all records by recreating the table) # Truncates table (deletes all records by recreating the table)
def truncate(table_name, conf = @conf) def truncate(table_name, conf = @conf)
h_table = org.apache.hadoop.hbase.client.HTable.new(conf, table_name) table_description = @admin.getTableDescriptor(table_name.to_java_bytes)
table_description = h_table.getTableDescriptor()
raise ArgumentError, "Table #{table_name} is not enabled. Enable it first.'" unless enabled?(table_name) raise ArgumentError, "Table #{table_name} is not enabled. Enable it first.'" unless enabled?(table_name)
yield 'Disabling table...' if block_given? yield 'Disabling table...' if block_given?
@admin.disableTable(table_name) @admin.disableTable(table_name)
@ -367,7 +368,7 @@ module Hbase
if rootCause.kind_of?(org.apache.hadoop.hbase.DoNotRetryIOException) then if rootCause.kind_of?(org.apache.hadoop.hbase.DoNotRetryIOException) then
# Handle the compatibility case, where the truncate method doesn't exists on the Master # Handle the compatibility case, where the truncate method doesn't exists on the Master
yield 'Dropping table...' if block_given? yield 'Dropping table...' if block_given?
@admin.deleteTable(table_name) @admin.deleteTable(org.apache.hadoop.hbase.TableName.valueOf(table_name))
yield 'Creating table...' if block_given? yield 'Creating table...' if block_given?
@admin.createTable(table_description) @admin.createTable(table_description)
@ -380,7 +381,7 @@ module Hbase
#---------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------
# Truncates table while maintaing region boundaries (deletes all records by recreating the table) # Truncates table while maintaing region boundaries (deletes all records by recreating the table)
def truncate_preserve(table_name, conf = @conf) def truncate_preserve(table_name, conf = @conf)
h_table = org.apache.hadoop.hbase.client.HTable.new(conf, table_name) h_table = @connection.getTable(table_name)
splits = h_table.getRegionLocations().keys().map{|i| Bytes.toString(i.getStartKey)}.delete_if{|k| k == ""}.to_java :String splits = h_table.getRegionLocations().keys().map{|i| Bytes.toString(i.getStartKey)}.delete_if{|k| k == ""}.to_java :String
splits = org.apache.hadoop.hbase.util.Bytes.toByteArrays(splits) splits = org.apache.hadoop.hbase.util.Bytes.toByteArrays(splits)
table_description = h_table.getTableDescriptor() table_description = h_table.getTableDescriptor()
@ -397,7 +398,7 @@ module Hbase
if rootCause.kind_of?(org.apache.hadoop.hbase.DoNotRetryIOException) then if rootCause.kind_of?(org.apache.hadoop.hbase.DoNotRetryIOException) then
# Handle the compatibility case, where the truncate method doesn't exists on the Master # Handle the compatibility case, where the truncate method doesn't exists on the Master
yield 'Dropping table...' if block_given? yield 'Dropping table...' if block_given?
@admin.deleteTable(table_name) @admin.deleteTable(org.apache.hadoop.hbase.TableName.valueOf(table_name))
yield 'Creating table with region boundaries...' if block_given? yield 'Creating table with region boundaries...' if block_given?
@admin.createTable(table_description, splits) @admin.createTable(table_description, splits)
@ -712,8 +713,7 @@ module Hbase
# Enables/disables a region by name # Enables/disables a region by name
def online(region_name, on_off) def online(region_name, on_off)
# Open meta table # Open meta table
meta = org.apache.hadoop.hbase.client.HTable.new( meta = connection.getTable(org.apache.hadoop.hbase.TableName::META_TABLE_NAME)
org.apache.hadoop.hbase.TableName::META_TABLE_NAME)
# Read region info # Read region info
# FIXME: fail gracefully if can't find the region # FIXME: fail gracefully if can't find the region

View File

@ -26,7 +26,8 @@ module Hbase
def initialize(configuration, formatter) def initialize(configuration, formatter)
@config = configuration @config = configuration
@admin = org.apache.hadoop.hbase.client.HBaseAdmin.new(configuration) @connection = org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(@config)
@admin = @connection.getAdmin()
@formatter = formatter @formatter = formatter
end end
@ -37,7 +38,7 @@ module Hbase
# TODO: need to validate user name # TODO: need to validate user name
begin begin
meta_table = org.apache.hadoop.hbase.client.HTable.new(@config, meta_table = @connection.getTable(
org.apache.hadoop.hbase.security.access.AccessControlLists::ACL_TABLE_NAME) org.apache.hadoop.hbase.security.access.AccessControlLists::ACL_TABLE_NAME)
service = meta_table.coprocessorService( service = meta_table.coprocessorService(
org.apache.hadoop.hbase.HConstants::EMPTY_START_ROW) org.apache.hadoop.hbase.HConstants::EMPTY_START_ROW)
@ -101,7 +102,7 @@ module Hbase
# TODO: need to validate user name # TODO: need to validate user name
begin begin
meta_table = org.apache.hadoop.hbase.client.HTable.new(@config, meta_table = @connection.getTable(
org.apache.hadoop.hbase.security.access.AccessControlLists::ACL_TABLE_NAME) org.apache.hadoop.hbase.security.access.AccessControlLists::ACL_TABLE_NAME)
service = meta_table.coprocessorService( service = meta_table.coprocessorService(
org.apache.hadoop.hbase.HConstants::EMPTY_START_ROW) org.apache.hadoop.hbase.HConstants::EMPTY_START_ROW)

View File

@ -19,7 +19,7 @@
include Java include Java
# Wrapper for org.apache.hadoop.hbase.client.HTable # Wrapper for org.apache.hadoop.hbase.client.Table
module Hbase module Hbase
class Table class Table
@ -112,12 +112,29 @@ EOF
attr_reader :name attr_reader :name
def initialize(configuration, table_name, shell) def initialize(configuration, table_name, shell)
# Commenting out the HTable.new() calls and uncommenting the @connection approach causes
# Zookeepr exceptions. Interestingly, there were changes in admin.rb to convert
# HBaseAdmin.new() calls to ConnectionFactory.createConnection().getAdmin(). Either change
# of ConnectionFactory.createConnection().getTable() or
# ConnectionFactory.createConnection().getAdmin() by itself doesn't cause the Zookeper
# exception. Somehow the combination of the two causes the issue.
# TODO: Uncomment the createConnection approach after the underlying problem is fixed.
if @@thread_pool then if @@thread_pool then
@table = org.apache.hadoop.hbase.client.HTable.new(configuration, table_name.to_java_bytes, @@thread_pool) @table = org.apache.hadoop.hbase.client.HTable.new(configuration, table_name.to_java_bytes,
@@thread_pool)
# @connection = org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(
# configuration, @@thread_pool)
# @table = @connection.getTable(table_name)
else else
# @connection = org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(
# configuration)
# @table = @connection.getTable(table_name)
@table = org.apache.hadoop.hbase.client.HTable.new(configuration, table_name) @table = org.apache.hadoop.hbase.client.HTable.new(configuration, table_name)
@@thread_pool = @table.getPool() @@thread_pool = @table.getPool()
end end
@name = table_name @name = table_name
@shell = shell @shell = shell
@converters = Hash.new() @converters = Hash.new()

View File

@ -27,6 +27,9 @@ module Hbase
def initialize(configuration, formatter) def initialize(configuration, formatter)
@config = configuration @config = configuration
@formatter = formatter @formatter = formatter
# @connection = org.apache.hadoop.hbase.client.ConnectionFactory(configuration)
# @admin = @connection.getAdmin()
@admin = org.apache.hadoop.hbase.client.HBaseAdmin.new(configuration) @admin = org.apache.hadoop.hbase.client.HBaseAdmin.new(configuration)
end end

View File

@ -65,6 +65,9 @@ public class TestShell {
loadPaths.add("src/test/ruby"); loadPaths.add("src/test/ruby");
jruby.getProvider().setLoadPaths(loadPaths); jruby.getProvider().setLoadPaths(loadPaths);
jruby.put("$TEST_CLUSTER", TEST_UTIL); jruby.put("$TEST_CLUSTER", TEST_UTIL);
System.setProperty("jruby.jit.logging.verbose", "true");
System.setProperty("jruby.jit.logging", "true");
System.setProperty("jruby.native.verbose", "true");
} }
@AfterClass @AfterClass