hbase常用命令汇总
这个分类其实并不是我来做的,我们在使用hbase shell命令进入hbase的交互式命令行之后,键入help命令,hbase就会列出所有的可用命令,并且也给你归好了类别。我这里列出所有的命令。
所有命令组:
类别: 普通
命令: status, table_help, version, whoami
类别: ddl
命令: alter, alter_async, alter_status, create, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, locate_region, show_filters
类别: namespace
命令: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables
类别: dml
命令: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve
类别: tools
命令: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, compact_rs, flush, major_compact, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, trace, unassign, wal_roll, zk_dump
类别: replication
命令: add_peer, append_peer_tableCFs, disable_peer, disable_table_replication, enable_peer, enable_table_replication, list_peers, list_replicated_tables, remove_peer, remove_peer_tableCFs, set_peer_tableCFs, show_peer_tableCFs
类别: snapshots
命令: clone_snapshot, delete_all_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot
类别: configuration
命令: update_all_config, update_config
类别: quotas
命令: list_quotas, set_quota
类别: security
命令: grant, list_security_capabilities, revoke, user_permission
类别: procedures
命令: abort_procedure, list_procedures
类别: visibility labels
命令: add_labels, clear_auths, get_auths, list_labels, set_auths, set_visibility
hbase常用命令演示
先看几个简单的,查看hbase的状态:
hbase(main):003:0> status
1 active master, 0 backup masters, 1 servers, 0 dead, 2.0000 average load
hbase的版本:
hbase(main):004:0> version
1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017
查看当前用户:
hbase(main):005:0> whoami
root (auth:SIMPLE)
groups: root
创建一个表,名字叫person,有两个列族,分别叫cf1,cf2:
hbase(main):006:0> create 'person','cf1','cf2'
0 row(s) in 1.3210 seconds
=> Hbase::Table - person
查看一下是否创建成功:
hbase(main):007:0> list
TABLE
person
1 row(s) in 0.0380 seconds
=> ["person"]
查看person表的描述信息:
hbase(main):008:0> describe 'person'
Table person is ENABLED
person
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf1', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1',
COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELL
S => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}
{NAME => 'cf2', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1',
COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELL
S => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}
2 row(s) in 0.1250 seconds
blocksize=>65536(64M),versions:最大版本数,默认就是1,也就是说针对一个单元格,只有一个是有效数据,其他的版本将在写入storefile的时候删除。 min_versions:最小版本数 ttl:time to live,存活时间。因为我们创建表使用的是最简单的语句,所以这里显示的都是默认值,在创建hbase表的时候,这些属性都是可以更改的。
向表里插入数据:
hbase(main):009:0> put 'person','00001','cf1:name','zhao'
0 row(s) in 0.1310 seconds
查看person表的所有数据:
hbase(main):010:0> scan 'person'
ROW COLUMN+CELL
00001 column=cf1:name, timestamp=1521100351395, value=zhao
1 row(s) in 0.0450 seconds
再插入一条并查看:
hbase(main):011:0> put 'person','00001','cf1:sex','male'
0 row(s) in 0.0080 seconds
hbase(main):012:0> scan 'person'
ROW COLUMN+CELL
00001 column=cf1:name, timestamp=1521100351395, value=zhao
00001 column=cf1:sex, timestamp=1521100375458, value=male
1 row(s) in 0.0170 seconds
因为scan是进行全表的扫描,又因为我们知道hbase存储的都是pb级别的数据,我就问你敢不敢,所以我们一般使用get来获取数据:
hbase(main):013:0> get 'person','00001','cf1:name'
COLUMN CELL
cf1:name timestamp=1521100351395, value=zhao
1 row(s) in 0.0410 seconds
再给cf1:name插入一条数据,并通过get获取,有效的当然是时间戳最新的数据了:
hbase(main):014:0> put 'person','00001','cf1:name','zhao2'
0 row(s) in 0.0120 seconds
hbase(main):015:0> get 'person','00001','cf1:name'
COLUMN CELL
cf1:name timestamp=1521100406066, value=zhao2
1 row(s) in 0.0160 seconds
表的删除,要先执行disable,再执行drop,不然会报错:
hbase(main):016:0> create 'tb1','cf'
0 row(s) in 1.2570 seconds
=> Hbase::Table - tb1
hbase(main):021:0> disable 'tb1'
0 row(s) in 2.3040 seconds
hbase(main):022:0> drop 'tb1'
0 row(s) in 1.2760 seconds
列出hbase的命名空间:
hbase(main):023:0> list_namespace
NAMESPACE
default
hbase
2 row(s) in 0.0580 seconds
退出交互式:
hbase(main):025:0> quit
hbase的flush命令与hbase数据目录结构
切换到hbase的数据目录,查看其结构:
我们切换到cf1文件夹下面:
[root@node113 /tmp/hbase/data/default/person/659250b91403ea35fe8c08503eb77445/cf1]#ls
[root@node113 /tmp/hbase/data/default/person/659250b91403ea35fe8c08503eb77445/cf1]#
发现空空如也,我在上一篇教程里面已经添加过数据了啊,这里面明明是存放数据的,为什么没有任何东西呢?这是因为store是有memstore和sotrefile组成的,我们一开始写的数目是先存放在menstore中的,当menstore的大小达到一定的阈值之后才会溢写到storefile里面,上一篇教程里面我们只加了两条数据,自然达不到memstore的溢写阈值,这时候我们如果想要看到storefile的话,就要使用hbase的命令flush+表名来强制memstore溢写了。
hbase(main):024:0> flush 'person'
0 row(s) in 0.2700 seconds
[root@node113 /tmp/hbase/data/default/person/659250b91403ea35fe8c08503eb77445/cf1]#ls
57bca74819a54dd7b4893c5c910c8517
有了吧,我们使用命令hbase hfile -p -f 文件名的方式来查看文件内容.