在关系数据库系统中,命名空间namespace指的是一个表的逻辑分组,同一组中的表有类似的用途。
命名空间的概念为即将到来的多租户特性打下基础:
- 配额管理(Quota Management (HBASE-8410)):限制一个namespace可以使用的资源,资源包括region和table等;
- 命名空间安全管理(Namespace Security Administration (HBASE-9206)):提供了另一个层面的多租户安全管理;
- Region服务器组(Region server groups (HBASE-6721)):一个命名空间或一张表,可以被固定到一组regionservers上,从而保证了数据隔离性。
一、命名空间管理
命名空间可以被创建、移除、修改。
表和命名空间的隶属关系在在创建表时决定,通过以下格式指定: <namespace> : <table>
当为一张表指定命名空间之后,对表的操作都要加命名空间,否则会找不到表。
相关shell操作如下所示:
- 创建一个命名空间
- 根据命名空间创建表
此时命名空间namespace应该存在,否则报错。 - 删除命名空间
在删除一个命名空间时,该命名空间不能包含任何的表,否则会报错。 - 修改命名空间
METHOD => ‘set’
‘PROPERTY_NAME’ => ‘PROPERTY_VALUE’ - 显示所有命名空间
二、预定义的命名空间
有两个系统内置的预定义命名空间:
- hbase:系统命名空间,用于包含hbase的内部表。
- default:所有未指定命名空间的表都自动进入该命名空间。
相关shell操作如下所示:
- 指定命名空间
- 默认命名空间
三、API
Configuration conf = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(conf);
//create namespace named "ns"
admin.createNamespace(NamespaceDescriptor.create("ns").build());
admin.close();
注意以下几点:
- 必须将HBase集群的hbase-site.xml文件添加进工程的classpath中,或者通过Configuration对象设置相关属性,否则程序获取不到集群相关信息,也就无法找到集群,运行程序时会报错。
- 命名空间一般在建模阶段通过命令行创建,创建的机会不多。
- 创建HBaseAdmin对象时就已经建立了客户端程序与HBase集群的connection,所以在程序执行完成后,务必通过admin.close()关闭connection;