24

HBase 命名空间 Namespace

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI0OTYwNTQ4Ng%3D%3D&%3Bmid=2247484190&%3Bidx=1&%3Bsn=1ba26d94cb36709e9e8dfa511ebc1385
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1. 简介

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

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

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

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

2. 命名空间管理

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

<table namespace>:<table qualifier>

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

  • 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 如果在创建表时没有显式指定命名空间,默认会在此命名空间创建表。

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

z6fUVb6.jpg!web

参考: Hbase Namespace Commands and Examples


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK