1.开启客户端
[root@linux01 /]# hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apps/hadoop-3.2.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apps/hbase-2.2.5/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.2.5, rf76a601273e834267b55c0cda12474590283fd4c, 2020年 05月 21日 星期四 18:34:40 CST
Took 0.0060 seconds
客户端的基本命令
hbase(main):002:0> status --查看当前hbase的状态--
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 1.0122 seconds
hbase(main):003:0> version --查看版本--
2.2.5, rf76a601273e834267b55c0cda12474590283fd4c, 2020年 05月 21日 星期四 18:34:40 CST
Took 0.0007 seconds
hbase(main):004:0> whoami --当前用户
root (auth:SIMPLE)
groups: root
Took 0.0429 seconds
2.help查看所有命令
help "commands" 查看命令的使用方法(常用)
注意:单引号双引号通用
hbase(main):013:0> help "list"
List all user tables in hbase. Optional regular expression parameter could
be used to filter the output. Examples:
hbase> list
hbase> list 'abc.*'
hbase> list 'ns:abc.*'
hbase> list 'ns:.*'
3.namespace
hbase中没有数据库的概念,他是使用namespace来实现数据库的作用
4.create创建表(指定列族)
hbase(main):006:0> create "tb_user" , "cf1" --表名tb_user,列族cf1--
Created table tb_user
Took 1.5089 seconds
=> Hbase::Table - tb_user
5.desc/describe查看表结构
hbase(main):007:0> desc "tb_user"
Table tb_user is ENABLED
tb_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', TT
L => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_O
N_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPE
N => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
1 row(s)
QUOTAS
0 row(s)
Took 0.4748 seconds
VERSIONS是版本数,默认是1;TTL(time to live)是生存时间,默认forever,是永远活着(不过期),可设置时间,默认单位是秒,到期后数据会自动删除。
6.list查看所有的表
类似mysql中的show tables;
hbase(main):008:0> list
TABLE
tb_user
1 row(s)
Took 0.0479 seconds
=> ["tb_user"]
7.put插入数据
类似mysql的insert,也可看做是map集合的put操作,每次put一行数据,如果说put的行键、列族、属性和之前的重叠,则会覆盖掉之前的值,相当于更新操作。
hbase(main):009:0> put "tb_user","rk01","cf1:name","zs"
--表名,rk(row key)行键(行号),cf(column family)列族:属性名,属性值--
hbase(main):010:0> put "tb_user","rk01","cf1:age","55"
hbase(main):011:0> put "tb_user","rk01","cf1:address","bj"
8.scan查看表的所有数据
类似mysql的select *from tb_name;
hbase(main):012:0> scan "tb_user"
ROW COLUMN+CELL
rk01 column=cf1:address, timestamp=1598513203386, value=bj
rk01 column=cf1:age, timestamp=1598513191614, value=55
rk01 column=cf1:name, timestamp=1598513171722, value=zs
9.delete/deleteall删除数据
delete只能删除具体的某一个属性
hbase(main):015:0> help 'delete'
hbase> delete 'ns1:t1', 'r1', 'c1', ts1
hbase> delete 't1', 'r1', 'c1', ts1
hbase> delete 't1', 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
hbase(main):017:0> scan 'tb_user'
ROW COLUMN+CELL
rk01 column=cf1:address, timestamp=1598513203386, value=bj
rk01 column=cf1:age, timestamp=1598513191614, value=55
rk01 column=cf1:name, timestamp=1598513171722, value=zs
1 row(s)
hbase(main):018:0> delete 'tb_user','rk01','cf1:name' --删除指定表、指定行、指定列族中的指定属性--
hbase(main):019:0> scan 'tb_user'
ROW COLUMN+CELL
rk01 column=cf1:address, timestamp=1598513203386, value=bj
rk01 column=cf1:age, timestamp=1598513191614, value=55
1 row(s)
hbase(main):020:0> delete 'tb_user' --删除表会报错--
ERROR: wrong number of arguments (1 for 3)
hbase(main):021:0> delete 'tb_user','rk01' --删除某行会报错--
ERROR: wrong number of arguments (2 for 3)
deleteall可以删除某一行,功能强大点
hbase(main):016:0> help 'deleteall'
hbase> deleteall 'ns1:t1', 'r1'
hbase> deleteall 't1', 'r1'
hbase> deleteall 't1', 'r1', 'c1'
hbase> deleteall 't1', 'r1', 'c1', ts1
hbase> deleteall 't1', 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
hbase(main):024:0> deleteall 'tb_user','rk01' --deleteall删除rk01行--
hbase(main):025:0> scan 'tb_user'
ROW COLUMN+CELL
0 row(s)
数据存储位置
在hbase的web页面上有表的信息
HDFS页面上的hdfs系统有目录
(1)put数据
(2)flush表 flush tb_name ---> 将插入的数据写到HDFS指定的目录中
(3)hbase hfile -p -f hfile文件的目录 查看内容
[root@linux01 ~]# hbase hfile -p -f /hbase/data/default/tb_user/28ab0fe2df98863846aa6433b1db2111/cf1/35a5b4fb860840d383db538aac6db532
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apps/hadoop-3.2.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apps/hbase-2.2.5/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2020-08-27 16:49:42,298 INFO [main] metrics.MetricRegistries: Loaded MetricRegistries class org.apache.hadoop.hbase.metrics.impl.MetricRegistriesImpl
K: rk01/cf1:address/1598513203386/ Put/vlen=2/seqid=9 V: bj
K: rk01/cf1:age/1598513191614/ Put/vlen=2/seqid=8 V: 55
数据时KV形式存储的,rk01是行,cf1是列族1,:后面是属性值,Put代表是通过put操作插入数据的,vlen是数据长度,seqid是序列号,V是对应的值。
注意:第三步,不是在hbase的shell客户端执行的,而是专用的hbase hfile 查看文件,-p是path,-f是文件,hfile是生成的文件格式。
数据的更新和删除操作本质上都是向新的Hfile文件中追加内容,并会在文件内容的K中打上相应的操作标记,更新的话就是Put,删除的话就是Delete/DeleteColumn(墓碑标记)。
因为hbase是基于HDFS存储文件的,而HDFS中的文件是不能随意删除和修改的,所以他会将更新和删除等改变文件内容的一些操作,追加到一个新的Hfile文件中,我们在执行这些操作后,flush一下,就会在HDFS的文件中看到新生成的Hfile文件,而这里的新Hfile中的数据操作就会打上相应的删除和更新的标记。
delete删除属性后产生的新Hfile文件内容展示
[root@linux01 ~]# hbase hfile -p -f /hbase/data/doit17/tb_user/bc162fcd8bd0966c76f3ccc03dcb56de/cf1/6f698d00e3784131aca221279f666516 ---删除后生成的新Hfile文件--
……
K: rk01/cf1:name/1598671249766/Delete/vlen=0/seqid=11 V:
deleteall删除列族后产生的新Hfile文件内容展示
[root@linux01 ~]# hbase hfile -p -f /hbase/data/doit17/tb_user/bc162fcd8bd0966c76f3ccc03dcb56de/cf2/24a1621c22ec4f778a13c93da66cd6d3
……
K: rk02/cf2:/1598672206987/DeleteColumn/vlen=0/seqid=12 V: