概述
1.基础
Shell操作第一步是启动Shell,使用以下命令:
hbase shell
离开可以输入:
exit或者quit
2.命令
在输入命令的时候必须遵循一定的规则:
- 引用名:命令行要求在使用表名和列名时,必须通过单引号或者双引号对其引用。
- 引用值:命令行支持二进制、八进制、十六进制的输入和输出。用户在引用时必须使用双引号,否则会被当做文件进行处理。
- 使用逗号分隔参数:参数之间需要使用逗号进行分隔。
- 散列属性:一些命令需要使用键值对属性,要按照以下格式来完成: {‘key1’ => ‘value1’, ‘key2’ => ‘value2’, …} 键值对需要包含在大括号中,键值对之间使用“=>”分隔。使用键值对模式赋值的key通常是NAME、VERSION或COMPRESSION,并且不需要引号。
3.使用create命令创建表
在HBase Shell执行以下命令:
create 'user', 'cf1'
这句话的意思是建立一个叫user的表,里面有一个叫做cf1的列族。
输出结果:
Created table user
Took 4.6033 seconds
=> Hbase::Table – user
4.使用list命令查看有哪些表
在HBase Shell执行以下命令:
list
输出结果:
TABLE
user
1 row(s)
Took 0.0890 seconds
=> ["user"]
5.使用describe命令来查看表属性
在HBase Shell执行以下命令:
describe 'user'
输出结果:
Table user is ENABLED
user
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
1 row(s)
QUOTAS
0 row(s)
Took 1.4010 second
6.使用put命令来插入数据
在HBase Shell执行以下命令:
put 'user', 'rk0001', 'cf1:name', 'zhangsan'
这条语句的意思是:
(1)向user表插入一个单元格
(2)这个单元格的row key为rk0001
(3)这个单元格的列族是cf1
(4)这个单元格的列名是name
(5)这个单元格的数据值是zhangsan
输出结果:
Took 0.0364 seconds
7.使用scan来查看表数据
scan是最常用的查询表数据的命令,这个命令相当于传统数据库的select。通过以下命令就可以遍历出user表的数据:
scan 'user'
输出结果:
ROW COLUMN+CELL
rk0001 column=cf1:age, timestamp=1594263341992, value=24
rk0001 column=cf1:name, timestamp=1594262772226, value=zhangsan
rk0002 column=cf1:gender, timestamp=1594263392732, value=man
rk0002 column=cf1:name, timestamp=1594263341800, value=lisi
rk0003 column=cf1:name, timestamp=1594263341860, value=wangwu
rk0004 column=cf1:name, timestamp=1594263341924, value=zhaoliu
4 row(s)
Took 0.0606 seconds
ROW列显示的就是row key,COLUMN+CELL列显示的就是这个记录的列族(column冒号前的部分)、列(column冒号后的部分)、时间戳(timestamp)和值(value)等信息
(STARTROW)和结束行(ENDROW)来限制显示记录的条数。STARTROW和ENDROW都是可选参数,可以不输入。如果ENDROW不输入的话,就从STARTROW开始一直显示下去直到表的结尾;如果STARTROW不输入的话,就从表头开始一直显示到ENDROW为止。
例:
下面这条命令会显示所有row key大于且等于rk0002的记录:
scan 'user', {STARTROW => 'rk0002'}
下面这条命令会显示所有row key小于rk0004的记录:
scan 'user', {ENDROW => 'rk0004'}
下命这条命令会显示所有row key大于且等于rk0002并且小于rk0004的记录:
scan 'user', {STARTROW => 'rk0002', ENDROW => 'rk0004'}
8.使用get来获取单元格数据
get最简单的用法就是查询某个单元格的记录:
get 'user', 'rk0001', 'cf1:name'
输出结果:
COLUMN CELL
cf:name timestamp=1594262772226, value=zhangsan
1 row(s)
Took 1.1362 seconds
当使用scan或者get命令的时候默认会显示拥有最大timestamp值的数据。
9.使用delete来删除单元格数据
有增就有删,接下来我们看看如何删除数据,最简单的例子如下:
delete 'user', 'rk0002', 'cf1:age'
执行的结果就是user表中rk0002行的cf1:age单元格被删除了。
delete命令也可以跟上时间戳(timestamp)参数,就像这样:
delete 'user', 'rk0002', 'cf1:name', 1594262772226
需要注意的是,HBase删除记录并不是真的立即删除了数据,而是放置了一个墓碑标记(tombstone marker),把这个版本数据标记为不可见。被打上tombstone marker的记录还是可以被查询到的,只需要使用scan命令时设置RAW参数的值为true即可。例子如下:
scan 'user', {RAW => true, VERSIONS => 5}
在结果我们可以找到这样一条记录:
rk0002 column=cf1:age, timestamp=1594263341992, type=Delete
那些type=Delete的列就是被打上墓碑标记的记录。
10.使用deleteall删除整行记录
deleteall 'user', 'rk0001'
11.使用disable来停用表
在删除表之前需要先做一个下线(disable)操作,把表停用。停用user表的命令如下:
disable 'user'
当你停用掉一个表后,你可以用scan测试一下表是不是真的被关闭了:
scan 'user'
你会发现无法使用scan命令,并且会输出一个错误信息ERROR: user is disabled,意思是表已经被关闭了,不能scan了。
如果需要启用user表,使用以下命令:
enable 'user'
12.使用drop来删除表
drop 'user'
然后在使用list命令查看下数据还有什么表,发现数据库中user表已经被删除。
最后
以上就是负责小蘑菇为你收集整理的Shell基础知识的全部内容,希望文章能够帮你解决Shell基础知识所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复