在HBase中,namespace命名空间指对一组表的逻辑分组,类似关系型数据库中的database,方便对表在业务上划分。Apache HBase从0.98.0, 0.95.2两个版本开始支持namespace级别的授权操作,HBase全局管理员可以创建、修改和回收namespace的授权。
1,命名空间的概念为即将到来的多租户特性打下基础:
配额管理(Quota Management (HBASE-8410)):限制一个namespace可以使用的资源,资源包括region和table等;
命名空间安全管理(Namespace Security Administration (HBASE-9206)):提供了另一个层面的多租户安全管理
Region服务器组(Region server groups (HBASE-6721)):一个命名空间或一张表,可以被固定到一组regionservers上,从而保证了数据隔离性。
2,hbase自带namespace介绍
hbase:系统内建表,包括namespace和meta表
default:用户建表时未指定namespace的表都创建在此
3,表和命名空间的隶属关系在在创建表时决定,通过以下格式指定: <namespace>:<table>
4,创建namespace
hbase(main):005:0> create_namespace 'test_ns' 0 row(s) in 1.3790 seconds hbase(main):008:0> create_namespace 'tank_ns' 0 row(s) in 1.1740 seconds
5,查看单个namespace
hbase(main):006:0> describe_namespace 'test_ns' DESCRIPTION {NAME => 'test_ns'} 1 row(s) in 0.0180 seconds
6,查看namespace列表
hbase(main):009:0> list_namespace NAMESPACE default hbase tank_ns test_ns 4 row(s) in 0.0150 seconds
7,创建测试表
hbase(main):010:0> create 'test_ns:user','name' 0 row(s) in 2.3560 seconds => Hbase::Table - test_ns:user hbase(main):011:0> list_namespace_tables 'test_ns' TABLE user 1 row(s) in 0.0280 seconds
8,删除namespace
hbase(main):012:0> drop_namespace 'tank_ns' 0 row(s) in 1.1990 seconds hbase(main):013:0> drop_namespace 'test_ns' //有表不能删除 ERROR: org.apache.hadoop.hbase.constraint.ConstraintException: Only empty namespaces can be removed. Namespace test_ns has 1 tables at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106) at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:95) at org.apache.hadoop.hbase.util.ForeignExceptionUtil.toIOException(ForeignExceptionUtil.java:45) at org.apache.hadoop.hbase.procedure2.RemoteProcedureException.fromProto(RemoteProcedureException.java:114) at org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait.waitForProcedureToComplete(ProcedureSyncWait.java:85) at org.apache.hadoop.hbase.master.HMaster$15.run(HMaster.java:2941) at org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.submitProcedure(MasterProcedureUtil.java:133) at org.apache.hadoop.hbase.master.HMaster.deleteNamespace(HMaster.java:2929) at org.apache.hadoop.hbase.master.MasterRpcServices.deleteNamespace(MasterRpcServices.java:508) at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:63460) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2380) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:297) at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:277) Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hbase.constraint.ConstraintException): Only empty namespaces can be removed. Namespace test_ns has 1 tables at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.prepareDelete(DeleteNamespaceProcedure.java:256) at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.executeFromState(DeleteNamespaceProcedure.java:83) at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.executeFromState(DeleteNamespaceProcedure.java:49) at org.apache.hadoop.hbase.procedure2.StateMachineProcedure.execute(StateMachineProcedure.java:139) at org.apache.hadoop.hbase.procedure2.Procedure.doExecute(Procedure.java:506) at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execProcedure(ProcedureExecutor.java:1167) at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execLoop(ProcedureExecutor.java:955) at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.execLoop(ProcedureExecutor.java:908) at org.apache.hadoop.hbase.procedure2.ProcedureExecutor.access$400(ProcedureExecutor.java:77) at org.apache.hadoop.hbase.procedure2.ProcedureExecutor$2.run(ProcedureExecutor.java:482) Here is some help for this command: Drop the named namespace. The namespace must be empty.
9,禁用表后,删除表,在删除namespace
hbase(main):014:0> disable 'test_ns:user' 0 row(s) in 2.3140 seconds hbase(main):015:0> drop 'test_ns:user' 0 row(s) in 1.5870 seconds hbase(main):016:0> drop_namespace 'test_ns' 0 row(s) in 1.1750 seconds
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/hadoop/2185.html