HBase shell

Posted Charlist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase shell相关的知识,希望对你有一定的参考价值。

HBase 为用户提供了一个非常方便的使用方式, 我们称之为“HBase Shell”。
HBase Shell 提供了大多数的 HBase 命令, 通过 HBase Shell 用户可以方便地创建、删除及修改表, 还可以向表中添加数据、列出表中的相关信息等。
备注:写错 HBase Shell 命令时用键盘上的“Delete”进行删除,“Backspace”不起作用。
在启动 HBase 之后,用户可以通过下面的命令进入 HBase Shell 之中,命令如下所示:

hadoop@ubuntu:~$ hbase shell
HBase Shell; enter \'help<RETURN>\' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.3, r1408904, Wed Nov 14 19:55:11 UTC 2012

hbase(main):001:0> 

具体的 HBase Shell 命令如下表 1.1-1 所示:

下面我们将以“一个学生成绩表”的例子来详细介绍常用的 HBase 命令及其使用方法。


这里 grad 对于表来说是一个列,course 对于表来说是一个列族,这个列族由三个列组成 china、math 和 english,当然我们可以根据我们的需要在 course 中建立更多的列族,如computer,physics 等相应的列添加入 course 列族。(备注:列族下面的列也是可以没有名字的。)
1). create 命令
创建一个具有两个列族“grad”和“course”的表“scores”。其中表名、行和列都要用单引号括起来,并以逗号隔开。
hbase(main):012:0> create \'scores\', \'name\', \'grad\', \'course\'

2). list 命令
查看当前 HBase 中具有哪些表。
hbase(main):012:0> list

3). describe 命令
查看表“scores”的构造。
hbase(main):012:0> describe \'scores\'

4). put 命令
使用 put 命令向表中插入数据,参数分别为表名、行名、列名和值,其中列名前需要列族最为前缀,时间戳由系统自动生成。
格式: put 表名,行名,列名([列族:列名]),值
例子:
a. 加入一行数据,行名称为“xiapi”,列族“grad”的列名为”(空字符串)”,值位 1。
hbase(main):012:0> put \'scores\', \'xiapi\', \'grad:\', \'1\'
hbase(main):012:0> put \'scores\', \'xiapi\', \'grad:\', \'2\' --修改操作(update)
b. 给“xiapi”这一行的数据的列族“course”添加一列“<china,97>”。
hbase(main):012:0> put \'scores\', \'xiapi\',  \'course:china\', \'97\'
hbase(main):012:0> put \'scores\', \'xiapi\',  \'course:math\', \'128\'
hbase(main):012:0> put \'scores\', \'xiapi\',  \'course:english\', \'85\'

5). get 命令
a.查看表“scores”中的行“xiapi”的相关数据。
hbase(main):012:0> get \'scores\', \'xiapi\'
b.查看表“scores”中行“xiapi”列“course :math”的值。
hbase(main):012:0> get \'scores\', \'xiapi\', \'course :math\'
或者
hbase(main):012:0> get \'scores\', \'xiapi\', {COLUMN=>\'course:math\'}
hbase(main):012:0> get \'scores\', \'xiapi\', {COLUMNS=>\'course:math\'}
备注:COLUMN 和 COLUMNS 是不同的,scan 操作中的 COLUMNS 指定的是表的列族, get操作中的 COLUMN 指定的是特定的列,COLUMNS 的值实质上为“列族:列修饰符”。COLUMN 和 COLUMNS 必须为大写。

6). scan 命令
a. 查看表“scores”中的所有数据。
hbase(main):012:0> scan \'scores\'
注意:
scan 命令可以指定 startrow,stoprow 来 scan 多个 row。
例如:
scan \'user_test\',{COLUMNS =>\'info:username\',LIMIT =>10, STARTROW => \'test\', STOPROW=>\'test2\'}
b.查看表“scores”中列族“course”的所有数据。
hbase(main):012:0> scan  \'scores\', {COLUMN => \'grad\'}
hbase(main):012:0> scan  \'scores\', {COLUMN=>\'course:math\'}
hbase(main):012:0> scan  \'scores\', {COLUMNS => \'course\'}
hbase(main):012:0> scan  \'scores\', {COLUMNS => \'course\'}

7). count 命令
hbase(main):068:0> count \'scores\'

8). exists 命令
hbase(main):071:0> exists \'scores\'

9). incr 命令(赋值)

10). delete 命令
删除表“scores”中行为“xiaoxue”, 列族“course”中的“math”。
hbase(main):012:0>  delete \'scores\', \'xiapi\', \'course:math\'

11). truncate 命令
hbase(main):012:0>  truncate \'scores\'

12). disbale、drop 命令
通过“disable”和“drop”命令删除“scores”表。
hbase(main):012:0>  disable \'scores\' --enable \'scores\' 
hbase(main):012:0>  drop \'scores\'

13).  status命令
hbase(main):072:0> status

14).  version命令
hbase(main):073:0> version

另外,在 shell 中,常量不需要用引号引起来,但二进制的值需要双引号引起来,而其他值则用单引号引起来。HBase Shell 的常量可以通过在 shell 中输入“Object.constants”。



引言
HBase提供了丰富的访问接口。
  • HBase Shell
  • Java clietn API
  • Jython、Groovy DSL、Scala
  • REST
  • Thrift(Ruby、Python、Perl、C++…)
  • MapReduce
  • Hive/Pig
其中HBase Shell是常用的便捷方式

首先你需要一个HBase的环境,如果需要自己搭建可以参考http://hbase.apache.org/book/quickstart.htmlhttp://hbase.apache.org/book/notsoquick.html

如果你在windows环境下配置cygwin及ssh遇到问题可以参考 http://qa.taobao.com/?p=10633。

进入HBase shell控制台
>bin/hbase shell
 输入“help”可以快速扫描下支持那些命令。

创建表
> create \'blog\',\'article\',\'author\'
知识点回顾:Column Family是schema的一部分,而Column不是。这里的article和author是Column Family。

查询所有表

>list

增加记录
>put \'blog\',\'1\',\'article:title,\' Head First HBase \'
>put \'blog\',\'1\',\'article:content\',\'HBase is the Hadoop database. Use it when you need random, realtime read/write access to your Big Data.\'
> put \'blog\',\'1\',\'article:tags\',\'Hadoop,HBase,NoSQL\'
> put \'blog\',\'1\',\'author:name\',\'hujinjun\'
> put \'blog\',\'1\',\'author:nickname\',’一叶渡江’
知识点回顾:Column完全动态扩展,每行可以有不同的Columns。

根据RowKey查询
> get \'blog\',\'1\'

知识点回顾:HTable按RowKey字典序(1,10,100,11,2)自动排序,每行包含任意数量
的Columns,Columns按ColumnKey(article:content,article:tags,article:title,author:name,author:nickname)自动排序

查询列族

>get \'blog\',\'1\',\'author

查看表内容

>scan \'blog\'

更新练习

  • 查询下更新前的值:

> get ‘blog’,’1’,’author:nickname’

  • 更新nickname为’yedu’:

> put ‘blog’,’1’,’ahthor:nickname’,’yedu’

  • 查询更新后的结果:

> get ‘blog’,’1’,’author:nickname’

知识点回顾:查询默认返回最近的值。

  • 查询nickname的多个(本示例为2个)版本值

> get \'blog\',\'1\',{COLUMN => \'author:nickname\',VERSIONS => 2}


知识点回顾:每个Column可以有任意数量的Values,按Timestamp倒序自动排序。

当修改多次(大于3次,修改2次时也就有3个VERSIONS)时:VERSIONS默认最高为3

> get \'blog\',\'1\',{COLUMN => \'author:nickname\',VERSIONS => 4}

  • 如何只查询到以前的旧版本呢,需要借助Timestamp

>get \'blog\',\'1\',{COLUMN => \'author:nickname\', TIMESTAMP => 1333690828877}

知识点回顾:TabelName+RowKey+Column+Timestamp=>Value

删除记录

  • delete只能删除一个column

>delete \'blog\',\'1\',\'author:nickname\'

  • 删除RowKey的所有column用deleteall

>deleteall ‘blog’,’1’
删除表
练习完毕,把练习表删了吧,删除之前需要先disable
>disable ‘blog’
>drop ‘blog’

小结
本文演示了通过HBase shell创建、删除表及对记录的增删改查,可以参照操作结果对回顾的知识点进一步理解掌握,在本系列下一篇文章中讲演示如何通过Java api来与HBase交互。


以上是关于HBase shell的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

shells/hbase.sh

请问hbase shell中向一个已创建的表中添加一个列族该怎么办呢?

hbase shell 基本命令总结

Hbase Shell

hbase-shell + hbase的java api