HBASE-19336 Improve rsgroup to allow assign all tables within a specified namespace by only writing namespace
Signed-off-by: Guanghao Zhang <zghao@apache.org>
This commit is contained in:
parent
79ac70ac86
commit
d1e9c3d972
|
@ -26,7 +26,9 @@ module Hbase
|
|||
include HBaseConstants
|
||||
|
||||
def initialize(connection)
|
||||
@connection = connection
|
||||
@admin = org.apache.hadoop.hbase.rsgroup.RSGroupAdminClient.new(connection)
|
||||
@hb_admin = @connection.getAdmin
|
||||
end
|
||||
|
||||
def close
|
||||
|
@ -76,7 +78,7 @@ module Hbase
|
|||
end
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# move server to a group
|
||||
# move tables to a group
|
||||
def move_tables(dest, *args)
|
||||
tables = java.util.HashSet.new
|
||||
args[0].each do |s|
|
||||
|
@ -85,6 +87,13 @@ module Hbase
|
|||
@admin.moveTables(tables, dest)
|
||||
end
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# move namespaces to a group
|
||||
def move_namespaces(dest, *args)
|
||||
tables = get_tables(args[0])
|
||||
@admin.moveTables(tables, dest)
|
||||
end
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# get group of server
|
||||
def get_rsgroup_of_server(server)
|
||||
|
@ -108,17 +117,57 @@ module Hbase
|
|||
#--------------------------------------------------------------------------
|
||||
# move server and table to a group
|
||||
def move_servers_tables(dest, *args)
|
||||
servers = java.util.HashSet.new
|
||||
servers = get_servers(args[0])
|
||||
tables = java.util.HashSet.new
|
||||
args[0].each do |s|
|
||||
servers.add(org.apache.hadoop.hbase.net.Address.fromString(s))
|
||||
end
|
||||
args[1].each do |t|
|
||||
tables.add(org.apache.hadoop.hbase.TableName.valueOf(t))
|
||||
end
|
||||
@admin.moveServersAndTables(servers, tables, dest)
|
||||
end
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# move server and namespace to a group
|
||||
def move_servers_namespaces(dest, *args)
|
||||
servers = get_servers(args[0])
|
||||
tables = get_tables(args[1])
|
||||
@admin.moveServersAndTables(servers, tables, dest)
|
||||
end
|
||||
|
||||
def get_servers(servers)
|
||||
server_set = java.util.HashSet.new
|
||||
servers.each do |s|
|
||||
server_set.add(org.apache.hadoop.hbase.net.Address.fromString(s))
|
||||
end
|
||||
server_set
|
||||
end
|
||||
|
||||
def get_tables(namespaces)
|
||||
table_set = java.util.HashSet.new
|
||||
error = "Can't find a namespace: "
|
||||
namespaces.each do |ns|
|
||||
raise(ArgumentError, "#{error}#{ns}") unless namespace_exists?(ns)
|
||||
table_set.addAll(get_tables_by_namespace(ns))
|
||||
end
|
||||
table_set
|
||||
end
|
||||
|
||||
# Get tables by namespace
|
||||
def get_tables_by_namespace(ns)
|
||||
tables = java.util.HashSet.new
|
||||
tablelist = @hb_admin.listTableNamesByNamespace(ns).map(&:getNameAsString)
|
||||
tablelist.each do |table|
|
||||
tables.add(org.apache.hadoop.hbase.TableName.valueOf(table))
|
||||
end
|
||||
tables
|
||||
end
|
||||
|
||||
# Does Namespace exist
|
||||
def namespace_exists?(ns)
|
||||
return !@hb_admin.getNamespaceDescriptor(ns).nil?
|
||||
rescue org.apache.hadoop.hbase.NamespaceNotFoundException
|
||||
return false
|
||||
end
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# remove decommissioned server from rsgroup
|
||||
def remove_servers(*args)
|
||||
|
|
|
@ -480,7 +480,9 @@ Shell.load_command_group(
|
|||
balance_rsgroup
|
||||
move_servers_rsgroup
|
||||
move_tables_rsgroup
|
||||
move_namespaces_rsgroup
|
||||
move_servers_tables_rsgroup
|
||||
move_servers_namespaces_rsgroup
|
||||
get_server_rsgroup
|
||||
get_table_rsgroup
|
||||
remove_servers_rsgroup
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
# 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.
|
||||
#
|
||||
|
||||
module Shell
|
||||
module Commands
|
||||
# Reassign tables of specified namespaces
|
||||
# from one RegionServer group to another.
|
||||
class MoveNamespacesRsgroup < Command
|
||||
def help
|
||||
<<-CMD
|
||||
|
||||
Example:
|
||||
hbase> move_namespaces_rsgroup 'dest',['ns1','ns2']
|
||||
|
||||
CMD
|
||||
end
|
||||
|
||||
def command(dest, namespaces)
|
||||
rsgroup_admin.move_namespaces(dest, namespaces)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,37 @@
|
|||
# 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.
|
||||
#
|
||||
|
||||
module Shell
|
||||
module Commands
|
||||
# Reassign RegionServers and Tables of
|
||||
# specified namespaces from one group to another.
|
||||
class MoveServersNamespacesRsgroup < Command
|
||||
def help
|
||||
<<-CMD
|
||||
|
||||
Example:
|
||||
hbase> move_servers_namespaces_rsgroup 'dest',['server1:port','server2:port'],['ns1','ns2']
|
||||
|
||||
CMD
|
||||
end
|
||||
|
||||
def command(dest, servers, namespaces)
|
||||
rsgroup_admin.move_servers_namespaces(dest, servers, namespaces)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -75,6 +75,48 @@ module Hbase
|
|||
@hbase.rsgroup_admin.balance_rs_group(group_name)
|
||||
end
|
||||
|
||||
define_test 'Test RSGroup Move Namespace RSGroup Commands' do
|
||||
group_name = 'test_group'
|
||||
namespace_name = 'test_namespace'
|
||||
ns_table_name = 'test_namespace:test_ns_table'
|
||||
|
||||
@shell.command('create_namespace', namespace_name)
|
||||
@shell.command('create', ns_table_name, 'f')
|
||||
|
||||
@shell.command('move_namespaces_rsgroup',
|
||||
group_name,
|
||||
[namespace_name])
|
||||
assert_equal(2, @rsgroup_admin.getRSGroupInfo(group_name).getTables.count)
|
||||
|
||||
group = @hbase.rsgroup_admin.get_rsgroup(group_name)
|
||||
assert_not_nil(group)
|
||||
assert_equal(ns_table_name, group.getTables.iterator.next.toString)
|
||||
end
|
||||
|
||||
define_test 'Test RSGroup Move Server Namespace RSGroup Commands' do
|
||||
ns_group_name = 'test_ns_group'
|
||||
namespace_name = 'test_namespace'
|
||||
ns_table_name = 'test_namespace:test_ns_table'
|
||||
|
||||
@shell.command('add_rsgroup', ns_group_name)
|
||||
assert_not_nil(@rsgroup_admin.getRSGroupInfo(ns_group_name))
|
||||
|
||||
@shell.command('move_tables_rsgroup',
|
||||
'default',
|
||||
[ns_table_name])
|
||||
|
||||
group_servers = @rsgroup_admin.getRSGroupInfo('default').getServers
|
||||
hostport_str = group_servers.iterator.next.toString
|
||||
@shell.command('move_servers_namespaces_rsgroup',
|
||||
ns_group_name,
|
||||
[hostport_str],
|
||||
[namespace_name])
|
||||
ns_group = @hbase.rsgroup_admin.get_rsgroup(ns_group_name)
|
||||
assert_not_nil(ns_group)
|
||||
assert_equal(hostport_str, ns_group.getServers.iterator.next.toString)
|
||||
assert_equal(ns_table_name, ns_group.getTables.iterator.next.toString)
|
||||
end
|
||||
|
||||
# we test exceptions that could be thrown by the ruby wrappers
|
||||
define_test 'Test bogus arguments' do
|
||||
assert_raise(ArgumentError) do
|
||||
|
|
Loading…
Reference in New Issue