名称 | 命令表达式 |
创建表 | create '表名', '列族名1','列族名2','列族名N' |
查看所有表 | list |
描述表 | describe ‘表名’ |
判断表存在 | exists '表名' |
判断是否禁用启用表 | is_enabled '表名' is_disabled ‘表名’ |
添加记录 | put ‘表名’, ‘rowKey’, ‘列族 : 列‘ , '值' |
查看记录rowkey下的所有数据 | get '表名' , 'rowKey' |
查看表中的记录总数 | count '表名' |
获取某个列族 | get '表名','rowkey','列族' |
获取某个列族的某个列 | get '表名','rowkey','列族:列’ |
删除记录 | delete ‘表名’ ,‘行名’ , ‘列族:列' |
删除整行 | deleteall '表名','rowkey' |
删除一张表 | 先要屏蔽该表,才能对该表进行删除 第一步 disable ‘表名’ ,第二步 drop '表名' |
清空表 | truncate '表名' |
查看所有记录 | scan "表名" |
查看某个表某个列中所有数据 | scan "表名" , {COLUMNS=>'列族名:列名'} |
更新记录 | 就是重写一遍,进行覆盖,hbase没有修改,都是追加 |
1、执行Ruby脚本
例如使用脚本查看HBase bin目录。看看以.rb结尾的文件。若要运行这些文件中的一个,请执行如下操作:
$ ./bin/hbase org.jruby.Main PATH_TO_SCRIPT
2、以非交互模式执行shell脚本
非交互模式捕获HBase Shell命令的退出状态(成功或失败),并将该状态传递回命令解释器。如果使用普通的交互模式,HBase Shell将只返回它自己的退出状态,对于成功几乎总是0。
要调用非交互模式,将-n或--non-interactive非交互式选项传递到HBASE外壳。
3、在操作系统脚本中运行HBase Shell
您可以在操作系统脚本解释器中使用HBase shell,如Bash shell,它是大多数Linux和UNIX发行版的默认命令解释器。下面的指南使用Bash语法,但是可以调整为使用C风格的shell,如csh或tcsh,并且可以修改为使用Microsoft Windows脚本解释器。
以这种方式生成HBase Shell命令很慢,因此在决定何时将HBase操作与操作系统命令行组合时要记住这一点。
3.1、想HBase Shell传递命令
您可以使用echo命令和|(管道)操作符在非交互模式下向HBase Shell传递命令。确保转义HBase命令中的字符,否则将由shell解释。一些调试级别输出已从下面的示例截断。
$ echo "describe 'test1'" | ./hbase shell -n
Version 0.98.3-hadoop2, rd5e65a9144e315bb0a964e7730871af32f5018d5, Sat May 31 19:56:09 PDT 2014
describe 'test1'
DESCRIPTION ENABLED
'test1', {NAME => 'cf', DATA_BLOCK_ENCODING => 'NON true
E', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0',
VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIO
NS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS =>
'false', BLOCKSIZE => '65536', IN_MEMORY => 'false'
, BLOCKCACHE => 'true'}
1 row(s) in 3.2410 seconds
为了不显示打印信息, 将所有输出定向到 /dev/null:
$ echo "describe 'test'" | ./hbase shell -n > /dev/null 2>&1
3.2、检查脚本命令的结果
由于脚本不是被设计成交互式运行的,所以您需要一种方法来检查命令是失败还是成功。HBase shell使用标准约定,为成功命令返回值0,为失败命令返回一些非零值。BASH在一个称为$的特殊环境变量中存储命令的返回值?因为每次shell运行任何命令时都会覆盖该变量,所以应该将结果存储在不同的脚本定义的变量中。
这是一个简单的脚本,它显示了一种存储返回值并基于它做出决策的方法。
#!/bin/bash
echo "describe 'test'" | ./hbase shell -n > /dev/null 2>&1
status=$?
echo "The status was " $status
if ($status == 0); then
echo "The command succeeded"
else
echo "The command may have failed."
fi
return $status
获得0的退出代码意味着您编写的命令肯定是成功的。但是,获得非零退出代码并不一定意味着命令失败。命令本来可以成功,但是客户端失去了连接,或者某些其他事件掩盖了它的成功。这是因为RPC命令是无状态的。确认操作状态的唯一方法是检查。例如,如果您的脚本创建了一个表,但是返回了一个非零的退出值,那么您应该在再次尝试创建表之前检查该表是否实际被创建。
4、从文本文件读取HBase Shell命令
您可以将HBase Shell命令输入到文本文件中,每行输入一个命令,并将该文件传递给HBase Shell。
create 'test', 'cf'
list 'test'
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
put 'test', 'row3', 'cf:c', 'value3'
put 'test', 'row4', 'cf:d', 'value4'
scan 'test'
get 'test', 'row1'
disable 'test'
enable 'test
将命令文件的路径传递给HBASE shell命令的唯一参数。执行每个命令并显示其输出。如果脚本中不包含退出命令,则返回到HBASE shell提示符。没有办法以编程方式检查每个命令的成功或失败。此外,尽管您看到了每个命令的输出,但是命令本身不会回显到屏幕上,因此很难将命令与其输出对齐。
$ ./hbase shell ./sample_commands.txt
0 row(s) in 3.4170 seconds
TABLE
test
1 row(s) in 0.0590 seconds
0 row(s) in 0.1540 seconds
0 row(s) in 0.0080 seconds
0 row(s) in 0.0060 seconds
0 row(s) in 0.0060 seconds
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1407130286968, value=value1
row2 column=cf:b, timestamp=1407130286997, value=value2
row3 column=cf:c, timestamp=1407130287007, value=value3
row4 column=cf:d, timestamp=1407130287015, value=value4
4 row(s) in 0.0420 seconds
COLUMN CELL
cf:a timestamp=1407130286968, value=value1
1 row(s) in 0.0110 seconds
0 row(s) in 1.5630 seconds
0 row(s) in 0.4360 seconds
5、传递VM选项到Shell
您可以使用HBASE_SHELL_OPTS环境变量将VM选项传递给HBASE Shell。您可以在您的环境中设置它,例如,通过编辑~/.bashrc,或者将其设置为启动HBase Shell的命令的一部分。下面的示例仅针对运行HBase Shell的VM的生命周期设置几个与垃圾收集相关的变量。
$ HBASE_SHELL_OPTS="-verbose:gc -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps \
-XX:+PrintGCDetails -Xloggc:$HBASE_HOME/logs/gc-hbase.log" ./bin/hbase shell