HBase常用操作之namespace
参考
http://blog.csdn.net/opensure/article/details/46470969
1、介绍
在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。ApacheHBase从0.98.0,0.95.2两个版本开始支持namespace级别的授权操作,HBase全局管理员可以创建、修改和回收namespace的授权。
2、namespace
HBase系统默认定义了两个缺省的namespace
hbase:系统内建表,包括namespace和meta表
default:用户建表时未指定namespace的表都创建在此
创建namespace
hbase>create_namespace'ai_ns'
列出所有namespace
hbase>list_namespace
在namespace下创建表
hbase>create'ai_ns:testtable','fm1'
http://blog.jobbole.com/83614/
Base不是一个关系型数据库,它需要不同的方法定义你的数据模型,HBase实际上定义了一个四维数据模型,下面就是每一维度的定义:
行键:每行都有唯一的行键,行键没有数据类型,它内部被认为是一个字节数组。
列簇:数据在行中被组织成列簇,每行有相同的列簇,但是在行之间,相同的列簇不需要有相同的列修饰符。在引擎中,HBase将列簇存储在它自己的数据文件中,所以,它们需要事先被定义,此外,改变列簇并不容易。
列修饰符:列簇定义真实的列,被称之为列修饰符,你可以认为列修饰符就是列本身。
版本:每列都可以有一个可配置的版本数量,你可以通过列修饰符的制定版本获取数据。
通过行键获取一个指定的行,它由一个或多个列簇构成,每个列簇有一个或多个列修饰符(图1中称为列),每列又可以有一个或多个版本。为了获取指定数据,你需要知道它的行键、列簇、列修饰符以及版本。当设计HBase数据模型时,对考虑数据是如何被获取是十分有帮助的。你可以通过以下两种方式获得HBase数据:
通过他们的行键,或者一系列行键的表扫描。
使用map-reduce进行批操作
这种双重获取数据的方法使得HBase变得十分强大,典型地,在Hadoop中存储数据意味着它对离线或批处理方式分析是有益的(尤其是批处理分析),但是,对实时获取是不必要的。HBase通过key/value存储来支持实时分析,以及通过map-reduce支持批处理分析。让我们首先来看实时数据获取,作为key/value存储,key是行键,value是列簇的集合,如图2所示。
创建一个名为PageViews的表,并具有名为info的列簇:
hbase(main):002:0>create'PageViews','info'
0row(s)in5.3160seconds
=>Hbase::Table-PageViews
每张表至少要有一个列簇,因此我们创建了info,现在,看看我们的表,执行下面list命令:
hbase(main):002:0>list
TABLE
PageViews
1row(s)in0.0350seconds
=>["PageViews"]
如你所见,list命令返回一个名为PageViews的表,我们可以通过describe命令得到表的更多信息:
hbase(main):003:0>describe'PageViews'
DESCRIPTIONENABLED
'PageViews',{NAME=>'info',DATA_BLOCK_ENCODING=>'NONE',BLOOMFILTER=>'ROW',
REPLICATION_SCOPE=>'0',VERSIONS=>'1',COMPRESSION=>'NONEtrue
',MIN_VERSIONS=>'0',TTL=>'FOREVER',KEEP_DELETED_CELLS=>'false',
BLOCKSIZE=>'65536',IN_MEMORY=>'false',BLOCKCACHE=>'true'}
1row(s)in0.0480seconds
这里我们创建的仅有一个:info,现在为表添加以下数据,下面命令是在info中添加新的行:
hbase(main):004:0>put'PageViews','rowkey1','info:page','/mypage'
0row(s)in0.0850seconds
Put命令插入一条行键为rowkey1的新纪录,指定在info下的page列,插入值为/mypage的记录,我们随后可以通过get命令通过行键rowkey1查询到这条记录:
hbase(main):005:0>get'PageViews','rowkey1'
COLUMNCELL
info:pagetimestamp=1410374788088,value=/mypage
1row(s)in0.0250seconds
你可以看到列info:page,或者更多具体的列,其值为/mypage,并带有时间戳表明该条记录是什么时候插入的。让我们在做表扫描之前再添加一行:
hbase(main):006:0>put'PageViews','rowkey2','info:page','/myotherpage'
0row(s)in0.0050seconds