HBase筆記之namespace

 

1、什麼是namespace

在RDBMS中有database的概念,用來對table進行分組,那麼在HBase中當表比較多的時候如何對錶分組呢,就是namespace,能夠簡單的把namespace理解爲RDBMS中的database。html

 

2、namespace相關操做

內置的namespace

HBase有兩個內置的namespace:java

hbase(main):009:0> list_namespace
NAMESPACE 
default 
hbase 
2 row(s)
Took 0.0683 seconds 

hbase:用來存放系統相關的一些元數據等,至關於mysql中的mysql數據庫:mysql

hbase(main):025:0> list_namespace_tables "hbase""
TABLE 
meta
namespace 
2 row(s)
Took 0.0174 seconds 
=> ["meta", "namespace"]

default:建立表時未指定命名空間的話默認掛在default下。sql

 

建立namespace

建立namespace:數據庫

hbase(main):010:0> create_namespace "test"
Took 0.2781 seconds

在建立namespace的時候還能夠添加一些說明信息:apache

hbase(main):018:0> create_namespace "test002", {"author"=>"CC11001100", "create_time"=>"2018-11-4 17:51:53"}
Took 0.2262 seconds    

 

查看namespace信息

上面建立namespace時添加了一些附加信息,如何查看這些附加信息呢:oop

hbase(main):019:0> describe_namespace "test002""
DESCRIPTION 
{NAME => 'test002', author => 'CC11001100', create_time => '2018-11-4 17:51:53'}
Took 0.0042 seconds 
=> 1

 

修改namespace

查看附加信息發現做者寫錯了,須要修改:spa

hbase(main):014:0> alter_namespace "test002", {METHOD=>"set", "author"=>"ChenEr"}
Took 0.2458 seconds 
hbase(main):015:0> describe_namespace "test002"
DESCRIPTION 
{NAME => 'test002', author => 'ChenEr', create_time => '2018-11-4 17:51:53'}
Took 0.0056 seconds 
=> 1

改完發現還漏了一項,須要追加本身的聯繫方式:htm

hbase(main):016:0> alter_namespace "test002", {METHOD=>"set", "email"=>"CC11001100@qq.com"}
Took 0.2313 seconds 
hbase(main):017:0> describe_namespace "test002"
DESCRIPTION 
{NAME => 'test002', author => 'ChenEr', create_time => '2018-11-4 17:51:53', email => 'CC11001100@qq.com'}
Took 0.0038 seconds 
=> 1

想了下放上去本身的聯繫方式搞很差會被不斷騷擾,仍是去掉此項屬性:ip

hbase(main):010:0> alter_namespace "test002", {METHOD=>"unset", NAME=>"email"}
Took 0.2419 seconds 
hbase(main):011:0> describe_namespace "test002"
DESCRIPTION 
{NAME => 'test002', author => 'ChenEr', create_time => '2018-11-4 17:51:53'}
Took 0.0056 seconds 
=> 1

總結:

添加或修改屬性:

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

刪除屬性:

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

 

查看已建立的全部namespace

查看當前已經建立的namespace,至關於RDBMS中的show databases:

hbase(main):019:0> list_namespace
NAMESPACE 
default 
hbase 
test
test002 
4 row(s)
Took 0.0122 seconds

 

刪除namespace

刪除namespace:

hbase(main):019:0> list_namespace
NAMESPACE 
default 
hbase 
test
test002 
4 row(s)
Took 0.0122 seconds 
hbase(main):020:0> drop_namespace "test002"
Took 0.2321 seconds 
hbase(main):021:0> list_namespace
NAMESPACE 
default 
hbase 
test
3 row(s)
Took 0.0111 seconds

注意要刪除的namespace必須是空的,其下沒有表,不然會刪除失敗:

hbase(main):051:0> create_namespace "test_drop_namespace"
Took 0.2376 seconds 
hbase(main):052:0> create "test_drop_namespace:t1", "cf1"
Created table test_drop_namespace:t1
Took 2.2312 seconds 
=> Hbase::Table - test_drop_namespace:t1
hbase(main):053:0> drop_namespace "test_drop_namespace"

ERROR: org.apache.hadoop.hbase.constraint.ConstraintException: Only empty namespaces can be removed. Namespace test_drop_namespace 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:850)
	at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execProcedure(ProcedureExecutor.java:1473)
	at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.executeProcedure(ProcedureExecutor.java:1241)
	at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access$800(ProcedureExecutor.java:75)
	at org.apache.hadoop.hbase.procedure2.ProcedureExecutor$WorkerThread.run(ProcedureExecutor.java:1761)

For usage try 'help "drop_namespace"'

Took 0.1217 seconds 
hbase(main):054:0> disable "test_drop_namespace:t1"
Took 0.4357 seconds 
hbase(main):055:0> drop "test_drop_namespace:t1"
Took 0.2351 seconds 
hbase(main):056:0> drop_namespace "test_drop_namespace"
Took 0.2172 seconds

 

建立表時指定namespace

建立表時指定表所在的namespace,使用namespace-name:tale-name的格式指定:

hbase(main):022:0> create "test:user", "userInfo"
Created table test:user
Took 2.3992 seconds 
=> Hbase::Table - test:user

 

查看namespace下的表

查看namespace下都有哪些表:

hbase(main):024:0> list_namespace_tables "test"
TABLE 
user
1 row(s)
Took 0.0252 seconds 
=> ["user"]

 

.

相關文章
相關標籤/搜索