启动HBase
[root@master bin]# ./start-hbase.sh
进入HBase数据库
[root@master bin]# hbase shell
查看数据库状态
hbase(main):001:0> status
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
表示有3台机器活着,0台机器down掉,当前负载0.67(数字越大,负载越大)
执行help查询帮助
general:普通命令组
ddl:数据定义语言命令组
dml:数据操作语言命令组
tools:工具组
replication:复制命令组
SHELL USAGE:shell语法
命名空间
列出命名空间,类似 hive中show databases
list_namespace
scan 'hbase:meta' -- 查看元数据信息
新建命名空间
create_namespace 'ns1'
删除命名空间
drop_namespace 'ns1'
修改命名空间
alter_namespace 'ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
表
列出所有表
list
新建表
语法:create, {NAME => , VERSIONS => }
创建表t1,有两个family name:f1,f2,且版本数前者为3,后者为1
create 't1',{NAME => 'f1',VERSION => 3},{NAME => 'f2', VERSIONS => 1}
查看表详情
hbase(main):011:0> describe 't1'
Table t1 is ENABLED
t1
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FAL
SE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOC
KCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'f2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FAL
SE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOC
KCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
2 row(s) in 0.0320 seconds
删除表中的列簇
alter 't1',{NAME => 'f1',METHOD => 'delete'}
禁用表、删除表
disable 't1'
drop 't1'
利用list或者exists判断表是否存在
hbase(main):014:0> exists 't1'
Table t1 does exist
0 row(s) in 0.0060 seconds
命令 is_enabled
判断是否enabled或者disable
hbase(main):019:0> is_enabled 't1'
true
0 row(s) in 0.0130 seconds
hbase(main):020:0> is_enabled 't2'
ERROR: Unknown table t2!
Here is some help for this command:
Is named table enabled? For example:
hbase> is_enabled 't1'
hbase> is_enabled 'ns1:t1'
插入命令put,查看全表数据scan
对于hbase来说insert update其实没有什么区别,都是插入原理
在hbase中没有数据类型概念,都是“字符类型”,至于含义在程序中体现
每插入一条记录都会自动建立一个时间戳,由系统自动生成。也可手动“强行指定”
hbase(main):024:0> put 't1' ,'rowkey001', 'f2:f002', 'value001'
0 row(s) in 0.0210 seconds
hbase(main):025:0> scan 't1'
ROW COLUMN+CELL
rowkey001 column=f2:f002, timestamp=1564494621209, value=value001
指定版本查看
hbase(main):026:0> scan 't1',{VERSIONS=>2}
ROW COLUMN+CELL
rowkey001 column=f2:f002, timestamp=1564494621209, value=value001
1 row(s) in 0.0100 seconds
hbase(main):027:0>
get 查看
hbase(main):036:0> get 't1', 'rowkey001'
COLUMN CELL
f2:f002 timestamp=1564494621209, value=value001
1 row(s) in 0.0180 seconds
修改版本存储个数
alter 't1',{NAME => 'f2',VERSIONS => 3}
查看多少条记录count
count 't1'
截断表truncate
注意: truncate表的处理过程:由于Hadoop的HDFS文件系统不允许直接修改,所以只能先删除表再重新创建已达到清空表的目的
删除delete
删除指定列簇
hbase(main):037:0> delete 't1','rowkey001','f2:f002'
0 row(s) in 0.0250 seconds
hbase(main):038:0> get 't1', 'rowkey001'
COLUMN CELL
0 row(s) in 0.0090 seconds
分区
建表时预设分区
create 'test_table', 'cf1', {SPLITS => ['a', 'b', 'c', 'd']}
查看HDFS是可以看到这个表下有5个文件夹(如果没有预分区,则只有一个文件夹)
[root@master ~]# hadoop fs -ls /hbase/data/default/test_table
Found 7 items
drwxr-xr-x - root supergroup 0 2019-07-30 22:08 /hbase/data/default/test_table/.tabledesc
drwxr-xr-x - root supergroup 0 2019-07-30 22:08 /hbase/data/default/test_table/.tmp
drwxr-xr-x - root supergroup 0 2019-07-30 22:08 /hbase/data/default/test_table/0167b46c959a72017e6ade4a0f4fa1c4
drwxr-xr-x - root supergroup 0 2019-07-30 22:08 /hbase/data/default/test_table/0d92bf1919e7922e77e186d2b3f26d78
drwxr-xr-x - root supergroup 0 2019-07-30 22:08 /hbase/data/default/test_table/37c06c49b4caf1cdcdd0d64dca9a64d9
drwxr-xr-x - root supergroup 0 2019-07-30 22:08 /hbase/data/default/test_table/59fe8bb5b20c12e6b0eed7c72e521f1c
drwxr-xr-x - root supergroup 0 2019-07-30 22:08 /hbase/data/default/test_table/9b16fe8003511ba6abe857c19ef79e27
手动分区
split 'test_table','9b16fe8003511ba6abe857c19ef79e27'