HBase 命名空间 Namespace

1. 简介

命名空间是表的逻辑分组,类似于关系数据库系统中的数据库。 这种抽象为多租户相关功能奠定了基础:

  • 配额管理( HBASE-8410 ): 限制一个命名空间可以使用的资源(Region或者Table等)。

  • 命名空间安全管理( HBASE-9206 ):为多租户提供另一级别的安全管理。

  • RegionServer组( HBASE-6721 ):一个命名空间或一张表,可以被固定到一组 RegionServer 上,从而保证了数据隔离性。

2. 命名空间管理

可以创建,删除或修改命名空间。 命名空间成员是在表创建期间通过指定完全限定表名来确定:

:

有如下常用的命名空间命令:

  • create_namespace

  • describe_namespace

  • list_namespace

  • alter_namespace

  • list_namespace_tables

  • drop_namespace

2.1 创建命名空间

可以使用  create_namespace  命令创建命名空间:

hbase> create_namespace 'ns1'

也可以通过可选的配置字典来创建命名空间:

hbase> create_namespace 'ns1', {'PROPERTY_NAME'=>'PROPERTY_VALUE'}

2.2 查看命名空间

可以使用  describe_namespace  命令查看命名空间:

hbase(main):017:0> describe_namespace 'ns1'
DESCRIPTION
{NAME => 'ns1'}
Took 0.0033 seconds
=> 1

2.3 查看所有命名空间

可以使用  list_namespace  命令列出所有可用的名称空间:

hbase(main):019:0> list_namespace
NAMESPACE
default
hbase
ns1
3 row(s)
hbase(main):022:0> list_namespace 'ns*'
NAMESPACE
ns1
1 row(s)

支持正则表达式

2.4 修改命名空间

可以使用  alter_namespace  命令修改已经创建的命名空间。

(1) 添加或者修改命名空间属性:

alter_namespace 'ns1', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}

(2) 删除命名空间属性:

alter_namespace 'ns1', {METHOD => 'unset', NAME=>'PROPERTY_NAME'}

2.5 在命名空间中创建表

创建命名空间后,我们可以在该命名空间上创建表。 就像任何其他 RDBMS Scheme 一样,我们必须在命名空间名称后附加表名称。 如果不指定命名空间,默认在  default  命名空间下创建表。

如下示例在  ns1  命名空间中创建表  test

hbase(main):008:0> create 'ns1:test', 'f1', 'f2'
Created table ns1:test
Took 0.9023 seconds
=> Hbase::Table - ns1:test

2.6 查看给定命名空间所有可用的表

可以使用  list_namespace_tables  命令列出给定命名空间下所有可用的表:

hbase(main):011:0> list_namespace_tables 'ns1'
TABLE
test
1 row(s)
Took 0.0078 seconds
=> ["test"]

2.7 删除命名空间

可以使用  drop_namespace  命令删除表中存在的命名空间。 我们只能删除空的命名空间。 如果删除包含表的命名空间,必须先把该命名空间下创建的表删除。

如下所示删除包含表的命名空间:

hbase(main):013:0> drop_namespace 'ns1'

ERROR: org.apache.hadoop.hbase.constraint.ConstraintException: Only empty namespaces can be removed. Namespace ns1 has 1 tables
    at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.prepareDelete(DeleteNamespaceProcedure.java:217)
    at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.executeFromState(DeleteNamespaceProcedure.java:78)
    at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.executeFromState(DeleteNamespaceProcedure.java:45)
    at org.apache.hadoop.hbase.procedure2.StateMachineProcedure.execute(StateMachineProcedure.java:189)
    at org.apache.hadoop.hbase.procedure2.Procedure.doExecute(Procedure.java:965)
    at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execProcedure(ProcedureExecutor.java:1723)
    at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeProcedure(ProcedureExecutor.java:1462)
    at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access$1200(ProcedureExecutor.java:78)
    at org.apache.hadoop.hbase.procedure2.ProcedureExecutor$WorkerThread.run(ProcedureExecutor.java:2039)

如下所示删除一个空的命名空间:

hbase(main):014:0> create_namespace 'ns2'
Took 0.2518 seconds
hbase(main):015:0> drop_namespace 'ns2'
Took 0.2303 second

3. 内置命名空间

HBase 中有两个内置的特殊命名空间:

  • hbase 系统命名空间,包含 HBase 内部表。

  • default 如果在创建表时没有显式指定命名空间,默认会在此命名空间创建表。

欢迎关注我的公众号和博客:

参考: Hbase Namespace Commands and Examples

2025年六月
M T W T F S S
« Jan    
 1
2345678
9101112131415
16171819202122
23242526272829
30