HBase 的命名空间

命名空间是与关系数据库系统中的数据库类似的表的逻辑分组。举例来说,Hbase中有多个表,teacher(老师)、student(学生)、patriarch(家长)这几个表,可以把这几个表变为一个命名空间,这样方便管理。


命名空间的限制

在实际工作中,我们要不要对命名空间做一些限制呢?例如现在命名空间的容量、CPU等。

一个命名空间,会有一些限制,例如一个命名空间只能使用5G的硬盘,那么我们会对命名空间做一些限制,常见的限制如下:

  • 配额管理( HBASE-8410 ) - 限制命名空间可以使用的资源数量(即区域,表)。

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

  • 区域服务器组( HBASE-6721 ) - 可以将命名空间/表固定到 RegionServers 的子集上,从而保证粗粒度的隔离级别。


Hbase对命名空间管理命令

一个空间可以被创建,被删除或被更改。一个命名空间下面可以有多个表,用下面的方式表示一个命名空间中的某个表:

<table namespace>:<table qualifier> 

命名空间操作举个例子

create_namespace表示创建一个命名空间

# 创建一个命名空间
create_namespace 'my_ns' 

创建命名空间

list_namespace表示查看一个命名空间:

hbase查看命名空间


创建列族

create是在某个命名空间,创建一个表和列簇:

# 在my_ns命名空间创建表my_table
create 'my_ns:my_table', 'fam' 
  • my_ns是前面创建的命名空间
  • my_table是表
  • fam是列族

Hbase创建一个表

如果重复创建会报错哦:


drop_namespace删除空间

drop_namespace用于删除空间,但是为了不删除数据,必须保证空间里面没有表。

# 删除my_ns命名空间
drop_namespace 'my_ns' 

drop_namespace

# 更改命名空间
alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'} 

预定义的名称空间

有两个预定义的特殊命名空间:

  • hbase - 系统命名空间,用于包含 HBase 内部表
  • default - 没有明确指定名称空间的表将自动落入此名称空间

使用list_namespace显示所有命名空间:

hbase查看命名空间

命名空间就像一个数据库一样,里面可以存放表。例如一个小型电商网站可以把整个网站作为一个命名空间。

举个例子,创建一个命名空间为foo,表名为bar,列族:

#namespace=foo and table qualifier=bar
create 'foo:bar', 'fam'

注意,如下图,如果foo空间不存在,会报错,这时候,你需要先创建foo空间。

创建hbase表

#namespace=default and table qualifier=bar
create 'bar', 'fam'