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

相关推荐