HBase客户端API操作
命令行(hbase shell)
hbase shell进入客 户端
[hadoop@pg1 ~]$ hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/ups/app/hbase/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/ups/app/hadoop/share/hadoop/common/lib/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; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.3.6, r806dc3625c96fe2cfc03048f3c54a0b38bc9e984, Tue Oct 15 01:55:41 PDT 2019
hbase(main):001:0>
exit 退出 hbase shell 客户端
表结构操作
- create:创建
- list:查看表列表
- desc:查看表的详细信息
- drop:删除表
- truncate:清空表
- alter:修改表的定义
create
help 'create'
# t1是表名,f1,f2,f3是列簇的名
create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
# 创建了一个名为myHbase的表,表里面有1个列簇,名为myCard,保留5个版本信息
create 'myHbase',{NAME => 'myCard',VERSIONS => 5}
list
hbase(main):046:0> list
TABLE
myHbase t1
2 row(s) in 0.0450 seconds
=> ["myHbase", "t1"]
hbase(main):047:0>
desc
hbase(main):047:0> desc 'myHbase'
Table myHbase is ENABLED
myHbase
COLUMN FAMILIES DESCRIPTION
{NAME => 'myCard', BLOOMFILTER => 'ROW', VERSIONS => '5', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODIN
G => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATIO
N_SCOPE => '0'}
1 row(s) in 0.0740 seconds
hbase(main):048:0>
修改表定义
添加一个列簇
alter 'myHbase', NAME => 'myInfo'
删除一个列簇
alter 'myHbase', NAME => 'myCard', METHOD => 'delete'
alter 'myHbase', 'delete' => 'myCard'
添加列簇hi同时删除列簇myInfo
alter 'myHbase', {NAME => 'hi'}, {NAME => 'myInfo', METHOD => 'delete'}
truncate
truncate 'myHbase'
drop
先停用表,再删除
disable 'myHbase'
drop 'myHbase'
表数据操作
- 增:put
- 删:delete
- 查:get + scan
- 改:==
创建 user 表,包含 info、data 两个列簇
create 'user_info',{NAME=>'base_info',VERSIONS=>3 },{NAME=>'extra_info',VERSIONS=>1 }
增
需要传入表名,rowkey,列簇名、值等
向 user 表中插入信息,row key 为 user0001,列簇 base_info 中添加 name 列标示符,值为 zhangsan1
put 'user_info', 'user0001', 'base_info:name', 'zhangsan1'
put 'user_info', 'zhangsan_20150701_0001', 'base_info:name', 'zhangsan1'
put 'user_info', 'zhangsan_20150701_0002', 'base_info:name', 'zhangsan2'
put 'user_info', 'zhangsan_20150701_0001', 'base_info:age', '21'
put 'user_info', 'zhangsan_20150701_0002', 'base_info:age', '22'
put 'user_info', 'zhangsan_20150701_0001', 'extra_info:Hobbies', 'music'
put 'user_info', 'zhangsan_20150701_0002', 'extra_info:Hobbies', 'sport'
查(get + scan)
# 获取 user_info 表中 row key 为 user0001 的所有信息
get 'user_info', 'user0001'
# 获取user表中row key为user0001,base_info列簇的所有信息
get 'user_info', 'user0001', 'base_info'
# 查询user_info表中的所有信息
scan 'user_info'
# 查询user_info表中列簇为base_info的信息
scan 'user_info', {COLUMNS => 'base_info'}
删
# 删除user_info表row key为zhangsan_20150701_0001,列标示符为base_info:name的数据
delete 'user_info', 'zhangsan_20150701_0001', 'base_info:name'
scan 'user_info', {COLUMNS => 'base_info'}
使用过滤器
# 从mytable表中找到row1开头的所有row,那么就需要用到PrefixFilter
scan 'user_info', { FILTER => "(PrefixFilter ('zhangsan'))"}
# 使用KeyOnlyFilter
scan 'user_info', { FILTER => "(KeyOnlyFilter ())"}
# 使用 FirstKeyOnlyFilter()
scan 'user_info', { FILTER => "FirstKeyOnlyFilter ()"}
# 使用 MultipleColumnPrefixFilter()
scan 'user_info', { FILTER => "MultipleColumnPrefixFilter('age','name')"}
# 使用 ColumnCountGetFilter()
scan 'user_info', { FILTER => "ColumnCountGetFilter(2)"}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)