HBase学习笔记——命名空间(namespace)

时间:2022-12-26 10:43:09

在关系数据库系统中,命名空间namespace指的是一个表的逻辑分组,同一组中的表有类似的用途。

命名空间的概念为即将到来的多租户特性打下基础:

  1. 配额管理(Quota Management (HBASE-8410)):限制一个namespace可以使用的资源,资源包括region和table等;
  2. 命名空间安全管理(Namespace Security Administration (HBASE-9206)):提供了另一个层面的多租户安全管理;
  3. Region服务器组(Region server groups (HBASE-6721)):一个命名空间或一张表,可以被固定到一组regionservers上,从而保证了数据隔离性。

一、命名空间管理

命名空间可以被创建、移除、修改。
表和命名空间的隶属关系在在创建表时决定,通过以下格式指定:
<namespace> : <table>
当为一张表指定命名空间之后,对表的操作都要加命名空间,否则会找不到表。

相关shell操作如下所示:

  1. 创建一个命名空间
    HBase学习笔记——命名空间(namespace)
  2. 根据命名空间创建表
    HBase学习笔记——命名空间(namespace)
    此时命名空间namespace应该存在,否则报错。
  3. 删除命名空间
    HBase学习笔记——命名空间(namespace)
    在删除一个命名空间时,该命名空间不能包含任何的表,否则会报错。
  4. 修改命名空间
    HBase学习笔记——命名空间(namespace)
    METHOD => ‘set’
    ‘PROPERTY_NAME’ => ‘PROPERTY_VALUE’
  5. 显示所有命名空间
    HBase学习笔记——命名空间(namespace)

二、预定义的命名空间

有两个系统内置的预定义命名空间:

  1. hbase:系统命名空间,用于包含hbase的内部表。
  2. default:所有未指定命名空间的表都自动进入该命名空间。

相关shell操作如下所示:

  1. 指定命名空间
    HBase学习笔记——命名空间(namespace)
  2. 默认命名空间
    HBase学习笔记——命名空间(namespace)

三、API

Configuration conf = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(conf);

//create namespace named "ns"
admin.createNamespace(NamespaceDescriptor.create("ns").build());


admin.close();

注意以下几点:

  1. 必须将HBase集群的hbase-site.xml文件添加进工程的classpath中,或者通过Configuration对象设置相关属性,否则程序获取不到集群相关信息,也就无法找到集群,运行程序时会报错。
  2. 命名空间一般在建模阶段通过命令行创建,创建的机会不多。
  3. 创建HBaseAdmin对象时就已经建立了客户端程序与HBase集群的connection,所以在程序执行完成后,务必通过admin.close()关闭connection;