Shell基础知识

1.基础

Shell操作第一步是启动Shell,使用以下命令:

hbase shell

离开可以输入:

exit或者quit

2.命令

在输入命令的时候必须遵循一定的规则:

  1. 引用名:命令行要求在使用表名和列名时,必须通过单引号或者双引号对其引用。
  2. 引用值:命令行支持二进制、八进制、十六进制的输入和输出。用户在引用时必须使用双引号,否则会被当做文件进行处理。
  3. 使用逗号分隔参数:参数之间需要使用逗号进行分隔。
  4. 散列属性:一些命令需要使用键值对属性,要按照以下格式来完成:                              {‘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表已经被删除。 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>