1.环境准备
hadoop 3.2.1
zookeeper 3.6.1
hbase 1.4.13
jdk 1.8
hbase hadoop 环境变量
2.HBase shell
a.进入hbase shell 控制台
hbase shell
b.创建表 create
hbase(main):012:0> create 'panda_nodes','cf'
其中 panda_nodes 为表名,cf 为列族。
其他创建命令:
Create a table with namespace=ns1 and table qualifier=t1
hbase> create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}
Create a table with namespace=default and table qualifier=t1
hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
hbase> # The above in shorthand would be the following:
hbase> create 't1', 'f1', 'f2', 'f3'
hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
hbase> create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}
c.查看库中有哪些表 list
hbase(main):013:0> list
输出 TABLE
panda_nodes
t1
test1
3 row(s) in 0.0110 seconds
d.查看表属性 desc
desc/describe 'panda_nodes'
hbase(main):017:0> describe 'panda_nodes'
Table panda_nodes is ENABLED
panda_nodes
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING =>
'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOP
E => '0'}
e.新建列族 alter
hbase(main):020:0> alter 'panda_nodes' , 'cf2'
Updating all regions with the new schema...
1/1 regions updated.
Done.
生产环境 先执行disable 'panda_nodes'
f.插入数据 put
hbase(main):023:0> put 'panda_nodes' ,'row1','cf:name','jack'
这条语句的意思shi:
往panda_nodes表插入一个单元格
这个单元格的rowkey为row1,属于row1这个行中的一个列
该单元格的列族为cf
数据为jack
g.更新数据 put
修改列族属性:hbase(main):002:0> alter 'panda_nodes',{NAME=>'cf',VERSIONS=>5}
保留五个版本信息
默认是保留一个版本的数据信息
在HBase中update操作是通过相同rowKey,put一条新数据
hbase(main):009:0> put 'panda_nodes','row2','cf:name','lisi'
ROW COLUMN+CELL
row1 column=cf:name, timestamp=1611999351907, value=hello world
row2 column=cf:name, timestamp=1611999956907, value=lisi
hbase(main):009:0> put 'panda_nodes','row2','cf:name','wangwu'
row1 column=cf:name, timestamp=1611999351907, value=hello world
row2 column=cf:name, timestamp=1611999986605, value=wangwu
h.查看表中的数据 scan table_name 类比RDBMS select * from table_name
hbase(main):027:0> scan 'panda_nodes'
ROW COLUMN+CELL
row1 column=cf:name, timestamp=1611998682076, value=jack
scan 条件查询
scan 'panda_nodes',{STARTROW=>'row1'}
scan 'panda_nodes',{ENDROW=>'row3'}
rowKey 是是按照字典序排序 row11 < row2
scan '表名',{属性1=>'值1',属性2=>'值2'}
i.查询单元格数据 get
hbase(main):012:0> get 'panda_nodes','row2',{COLUMN=>'cf:name',VERSIONS=>5}
COLUMN CELL
cf:name timestamp=1611999986605, value=wangwu
cf:name timestamp=1611999956907, value=lisi
cf:name timestamp=1611999940697, value=zhangsan
hbase 中一个单元格可以存不通版本的数据 ,
版本号是通过时间戳控制的,使用最大时间戳的数据作为整个单元格实际输出数据。timstamp 是字典序
j.删除数据 delete
hbase(main):004:0> delete 'panda_nodes','row2','cf:name'
删除并非整个单元格数据,删除row2,name最新一条的数据
删除前:
ROW COLUMN+CELL
row1 column=cf:name, timestamp=1611999351907, value=hello world
row2 column=cf:name, timestamp=1611999986605, value=wangwu
删除后:
ROW COLUMN+CELL
row1 column=cf:name, timestamp=1611999351907, value=hello world
row2 column=cf:name, timestamp=1611999956907, value=lisi
row2 name的数据还依然存在.
按照版本/时间戳删除
删除前
hbase(main):008:0> get 'panda_nodes','row2',{VERSIONS=>5,COLUMN=>'cf:name'}
COLUMN CELL
cf:name timestamp=1611999956907, value=lisi
cf:name timestamp=1611999954030, value=lisi\x0A\x0A
cf:name timestamp=1611999940697, value=zhangsan
hbase(main):009:0> delete 'panda_nodes','row2','cf:name',1611999940697
删除后
hbase(main):008:0> get 'panda_nodes','row2',{VERSIONS=>5,COLUMN=>'cf:name'}
COLUMN CELL
cf:name timestamp=1611999956907, value=lisi
cf:name timestamp=1611999954030, value=lisi\x0A\x0A
HBase的删除操作,并不是真实的删除了数据而是放置了一个墓碑标记(tombstone marker),把这个版本连同之前的版本都标记为不可见。
会在compaction的过程中进行删除
在真正删除前是可以查询到的
hbase(main):012:0> scan 'panda_nodes',{RAW=>true,VERSIONS=>5}
ROW COLUMN+CELL
row1 column=cf:name, timestamp=1611999351907, value=hello world
row2 column=cf:name, timestamp=1611999986605, type=Delete
row2 column=cf:name, timestamp=1611999986605, value=wangwu
row2 column=cf:name, timestamp=1611999956907, value=lisi
row2 column=cf:name, timestamp=1611999954030, value=lisi\x0A\x0A
row2 column=cf:name, timestamp=1611999940697, type=Delete
row2 column=cf:name, timestamp=1611999940697, value=zhangsan
k.删除整行数据
deleteall 'panda_nodes','row2'
l.停用表/启用表 disable/enable
disable 'panda_nodes'
enable 'panda_nodes'
m.删除表 drop
drop 'panda_nodes'
n.append操作
append 'panda_nodes','row1','cf:name','jr',ATTRIBUTES=>{'kid'=>'yes'}
其他常用命令
帮助命令: help 'put',help 'create'.....
查看集群状态: status 'simple'/'summary'/'detailed'
查看hbase版本: version
查看当前用户: whoami
表操作信息: table_help
判断表是否存在: exists 'panda_nodes'
查看行数据在那个region下面:locate_resion 'panda_nodes'
列出所有过滤器:show_filters
原子加减计算:incr 'panda_nodes','row6','cf1:count',3
清空表:truncate 'panda_nodes'
常用操作
scan 'panda_nodes'
(1) 指定列:scan 'panda_nodes',{COLUMN=>['cf1:name','cf1:age']}
(2) 返回最大行数量 scan 'panda_nodes',{STARTROW='row1',LIMIT=>1}
3.参考 : 《HBase 不睡觉书》 电子版:联系邮箱获取
熊猫笔记邮箱: panda_nodes@163.com