HBase基础操作(命名空间、建删改表、增删改查、分区)

启动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
【HBase基础操作(命名空间、建删改表、增删改查、分区)】
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 secondshbase(main):025:0> scan 't1' ROWCOLUMN+CELL rowkey001column=f2:f002, timestamp=1564494621209, value=https://www.it610.com/article/value001

指定版本查看
hbase(main):026:0> scan 't1',{VERSIONS=>2} ROWCOLUMN+CELL rowkey001column=f2:f002, timestamp=1564494621209, value=https://www.it610.com/article/value001 1 row(s) in 0.0100 secondshbase(main):027:0>

get 查看
hbase(main):036:0> get 't1', 'rowkey001' COLUMNCELL f2:f002timestamp=1564494621209, value=https://www.it610.com/article/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 secondshbase(main):038:0> get 't1', 'rowkey001' COLUMNCELL 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 supergroup0 2019-07-30 22:08 /hbase/data/default/test_table/.tabledesc drwxr-xr-x- root supergroup0 2019-07-30 22:08 /hbase/data/default/test_table/.tmp drwxr-xr-x- root supergroup0 2019-07-30 22:08 /hbase/data/default/test_table/0167b46c959a72017e6ade4a0f4fa1c4 drwxr-xr-x- root supergroup0 2019-07-30 22:08 /hbase/data/default/test_table/0d92bf1919e7922e77e186d2b3f26d78 drwxr-xr-x- root supergroup0 2019-07-30 22:08 /hbase/data/default/test_table/37c06c49b4caf1cdcdd0d64dca9a64d9 drwxr-xr-x- root supergroup0 2019-07-30 22:08 /hbase/data/default/test_table/59fe8bb5b20c12e6b0eed7c72e521f1c drwxr-xr-x- root supergroup0 2019-07-30 22:08 /hbase/data/default/test_table/9b16fe8003511ba6abe857c19ef79e27

手动分区
split 'test_table','9b16fe8003511ba6abe857c19ef79e27'

    推荐阅读