HBase之shell客户端-DDL / 对table操作 (3)
一 table (DDL)
1 建表===>建表必须要有至少一个列族
// 在指定namespace下建表
create 'hbase01:tb_user1' ,'cf' // 指定一个列族
// 没有指定namespace ,建的表会归列到 default(默认) 的namespace下
create 'tb_user' ,'cf' // 指定一个列族
create 'tb_user2' ,'cf1','cf2','cf3' // 指定多个列族
// 设置属性
create "tb_user3" , {NAME=>'cf' ,VERSIONS=>3,TTL=>240} 设置3个数据版本 过期时间
2 查看新建表的详细信息
desc 'tb_user'
3 向新建的表中添加内容 / 数据
语法 : put '表名','行键','列族名:字段属性名','value(字段对应赋的值)'
put 'tb_user','rk001','cf:name','zss'
put 'tb_user','rk001','cf:age','18'
put 'tb_user','rk001','cf:job','coder'
put 'tb_user','rk001','cf:sal','23k'
4 查看表中所有的数据/内容
scan 'tb_user'
// 查询的数据
ROW COLUMN+CELL
rk001 column=cf:age, timestamp=1598542966746, value=18
rk001 column=cf:job, timestamp=1598570238667, value=coder
rk001 column=cf:name, timestamp=1598542931953, value=zss
rk001 column=cf:sal, timestamp=1598570247929, value=23k
1 row(s)
Took 0.0127 seconds
5 数据存储的位置
5.1 从hbase 的web页上可以看到表的信息
5.2 在hdfs 的web页面上有对应的目录 /表信息
1) 在hbase 的shell客户端 put 数据后 ,需要 flush一下表格 ,才能在 hdfs 的web页面上看到存储插入数据的文件hfile
2) flush表 flush tb_name ---> 将插入的数据写到HDFS指定的目录中
3) hbase hfile -p -f hfile的目录(hfile的绝对路径) ==>查看存储在hdfs上的hbase指定库指定表的数据/内容
hbase hfile -p -f /hbase/data/default/tb_user/c42738045ec84c8cf4476288107965be/cf/16beefaa81424c529950cb0d78c18683
// 查询的数据 / 内容
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-28 07:23:39,292 INFO [main] metrics.MetricRegistries: Loaded MetricRegistries class org.apache.hadoop.hbase.metrics.impl.MetricRegistriesImpl
K: rk001/cf:age/1598542966746/Put/vlen=2/seqid=8 V: 18
K: rk001/cf:job/1598543005831/Put/vlen=5/seqid=9 V: coder
K: rk001/cf:name/1598542931953/Put/vlen=3/seqid=7 V: zss
Scanned kv count -> 3
6 删除表中的数据
删除数据和更新数据的操作都是向HFile中追加内容 ,在数据的K中记录操作行为 比如 delete/deleteFamily(墓碑标记)
- delete 删除单元格 delete 'tb_user' , '11' ,'cf:name'
- deleteall 删除 行/列族/单元格 deleteall 'tb_user' , '1'
- put 更新数据 ,往表中添加新的内容
// 从 hdfs 上将删除时生成的文件绝对路径拷贝下来 ,在虚拟机上查看删除操作记录
[[email protected] bin]# hbase hfile -p -f /hbase/data/default/tb_user/c42738045ec84c8cf4476288107965be/cf/c8653bdfd1db4886b06ad5e539d12237
// 查询到的输出记录
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-28 07:29:17,818 INFO [main] metrics.MetricRegistries: Loaded MetricRegistries class org.apache.hadoop.hbase.metrics.impl.MetricRegistriesImpl
K: rk001/cf:job/1598543005831/Delete/vlen=0/seqid=13 V:Scanned kv count -> 1
7 删除表
drop 'tb_user' //删除默认namespace下的指定的表
drop 'hbase01:tb_user' // 删除指定namespace下的指定的表
8 禁用表
将表禁用 , 不禁用的表是不能对表数据进行CRUD, 但是可以对结构进行操作
disable 'tb_user' //禁用默认 namespace指定的表
disable 'hbase01:tb_user' //禁用指定namespace指定的表
9 启用表
enable 'tb_user' //启用默认 namespace下的指定的表
enable 'hbase01:tb_user' //启用指定namespace下的指定的表
10 列出表中所有 regions信息
list_regions 'tb_user'
// 得到一个region信息 : c42738045ec84c8cf4476288107965be
SERVER_NAME | REGION_NAME | START_KEY | END_KEY | SIZE | REQ | LOCALITY|
---------------------------------------- | -------------------------------------------------------- | ---------- | ---------- | ----- | ----- | ---------- |
linux05,16020,1598542042061 | tb_user,,1598542649041.c42738045ec84c8cf4476288107965be. | | | 0 | 0 | 1.0 |
1 rows
Took 3.2631 seconds