hadoop组件—面向列的开源数据库(二)—hbase常用命令

释放双眼,带上耳机,听听看~!

我们在上一章已经学习了hbase的相关介绍。

本章记录hbase常用的命令。

参考文献
http://hbase.apache.org/book.html\#shell

hbase shell

hbase提供了一个shell的终端给用户交互。使用命令hbase shell进入命令界面。

通过执行help可以看到所有命令的列表。

COMMAND GROUPS:
Group name: general
Commands: status, table_help, version, whoami

Group name: ddl
Commands: 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

Group name: namespace
Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables

Group name: dml
Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve

Group name: tools
Commands: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, close_region, compact, compact_mob, compact_rs, flush, major_compact, major_compact_mob, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, trace, unassign, wal_roll, zk_dump

Group name: replication
Commands: add_peer, append_peer_tableCFs, disable_peer, disable_table_replication, enable_peer, enable_table_replication, get_peer_config, list_peer_configs, list_peers, list_replicated_tables, remove_peer, remove_peer_tableCFs, set_peer_tableCFs, show_peer_tableCFs, update_peer_config

Group name: snapshots
Commands: clone_snapshot, delete_all_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot

Group name: configuration
Commands: update_all_config, update_config

Group name: quotas
Commands: list_quotas, set_quota

Group name: security
Commands: grant, list_security_capabilities, revoke, user_permission

Group name: procedures
Commands: abort_procedure, list_procedures

Group name: visibility labels
Commands: add_labels, clear_auths, get_auths, list_labels, set_auths, set_visibility

Group name: rsgroup
Commands: add_rsgroup, balance_rsgroup, get_rsgroup, get_server_rsgroup, get_table_rsgroup, list_rsgroups, move_servers_rsgroup, move_tables_rsgroup, remove_rsgroup

HBase shell中的帮助命令非常强大,使用help ‘command_name’获得某一个命令的详细信息。 例如:


1
2
1help 'list'
2

我们按照所有命令的顺序来分别学习相关命令:

一般(general)命令

查看当前用户


1
2
1whoami
2

查询服务器状态


1
2
1status
2

查询Hbase版本


1
2
1version
2

查看所有表


1
2
1list
2

数据定义(ddl-Data Definition Language)命令

创建一个表,建立一个表student,有三个列族id,address和info


1
2
1create 'student','id','address','info'
2

获得表的描述


1
2
1describe 'student'
2

删除列族
我们之前建了3个列族,但是发现id这个列族是多余的,因为已经有主键,所以我们要将其删除。


1
2
1alter 'student',{NAME=>'id',METHOD=>'delete'}
2

如果遇到错误ERROR: Table student is enabled. Disable it first before altering。
则需要先把表禁用

表禁用


1
2
1disable 'student'
2

表启用


1
2
1enable  'student'
2

删除表


1
2
1drop 'student'
2

查询表是否存在


1
2
1exists 'student'
2

判断表是否enable


1
2
1is_enabled 'student'
2

判断表是否disable


1
2
1is_disabled 'student'
2

命名空间(namespace)命令

HBase系统默认定义了两个缺省的namespace
hbase:系统内建表,包括namespace和meta表
default:用户建表时未指定namespace的表都创建在此

创建namespace


1
2
1create_namespace 'zzq_ns'
2

查看namespace


1
2
1describe_namespace 'zzq_ns'
2

删除namespace


1
2
1drop_namespace 'zzq_ns'
2

列出所有namespace


1
2
1list_namespace  
2

列出所有namespace


1
2
1list_namespace  
2

在namespace下创建表


1
2
1create 'zzq_ns:student','id','address','info'
2

查看namespace下的表


1
2
1list_namespace_tables 'zzq_ns'
2

数据操作(dml-Data Manipulation Language)命令

插入数据


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1put 'student','zzq','info:age','24'
2
3put 'student','zzq','info:birthday','1990-05-03'
4
5put 'student','zzq','info:company','23mofang'
6
7put 'student','zzq','address:contry','china'
8
9put 'student','zzq','address:province','guangxi'
10
11put 'student','zzq','address:city','nanning'
12
13put 'student','yue','info:age','18'
14
15put 'student','yue','info:birthday','1998-12-03'
16
17put 'student','yue','info:company','23mofang'
18
19put 'student','yue','address:contry','china'
20
21put 'student','yue','address:province','sichuan'
22
23put 'student','yue','address:city','chengdu'
24

我们分别插入了两个人的信息,可以看到hbase的结构组织是可以离散的自由的插入数据的。

获取一条数据,获取一个id的所有数据


1
2
1get 'student','zzq'
2

获取一个id,一个列族的所有数据


1
2
1get 'student','zzq','info'
2

获取一个id,一个列族中一个列的所有数据


1
2
1get 'student','zzq','info:age'
2

更新一条记录
将zzq的年龄改成28


1
2
1put 'student','zzq','info:age','28'
2

通过timestamp来获取两个版本的数据


1
2
3
1get 'student','zzq',{COLUMN=>'info:age',TIMESTAMP=>1520910557537}
2get 'student','zzq',{COLUMN=>'info:age',TIMESTAMP=>1520910822239}
3

我们可以看到hbase默认是保留多个版本的数据的,通过timestamp来区分,默认返回最新版本的数据,如果有需要可以通过timestamp来获取旧版本的数据。

全表扫描


1
2
1scan 'student'
2

删除id为zzq的值的‘info:age’字段


1
2
1delete 'student','zzq','info:age'
2

删除整行(整个id)


1
2
1deleteall 'student','zzq'
2

查询表中有多少行:


1
2
1count 'student'
2

查询所有rowkey


1
2
1count 'student', { INTERVAL => 1 }
2

给‘zzq’这个id增加’info:age’字段,并使用counter实现递增


1
2
1incr 'student','zzq','info:age'
2

如果遇到ERROR: org.apache.hadoop.hbase.DoNotRetryIOException: Field is not a long, it’s 2 bytes wide错误需要先使用


1
2
1delete 'student','zzq','info:age'
2

删除原定义的值。

获取当前count的值


1
2
1get_counter 'student','zzq','info:age'
2

将整张表清空


1
2
1truncate 'student'
2

工具(tools)命令

查看Hbase表分区情况


1
2
1scan 'hbase:meta'
2

1
2
3
4
5
1student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4.                       column=info:regioninfo, timestamp=1520909632197, value={ENCODED => bd26e274811777d0f1a70b57ad5416b4, NAME => 'student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4.', STARTKEY => '', ENDKEY => ''}                                    
2 student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4.                       column=info:seqnumDuringOpen, timestamp=1520909932997, value=\x00\x00\x00\x00\x00\x00\x00\x05                                                                                                                                              
3 student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4.                       column=info:server, timestamp=1520909932997, value=host3:60020                                                                                                                                                                            
4 student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4.                       column=info:serverstartcode, timestamp=1520909932997, value=1520437250705      
5

完整的region name

student,,1520909631300.bd26e274811777d0f1a70b57ad5416b4.

表空间:表名, 开始rowId, 时间戳, hashcode(MD5)

移动region
将region移动到一个指定的region server, 或者移动到一个随机的region server(不指定region server)。此命令可以用于解决某些region server 过于拥堵的问题。


1
2
3
1move 'ENCODE_REGIONNAME'
2move 'ENCODE_REGIONNAME', 'SERVER_NAME,PORT,START_CODE'  
3

其中
其中’ENCODED_REGIONNAME’表示region Id中的hashcode,比如上面的bd26e274811777d0f1a70b57ad5416b4
其中target server的start code, 可通过 scan ‘hbase:meta’查找,如上
column=info:server, timestamp=1520909932997, value=host3:60020
column=info:serverstartcode, timestamp=1520909932997, value=1520437250705

‘SERVER_NAME,PORT,START_CODE’参数为’host3,60020,1520437250705’

region切片


1
2
3
4
5
6
7
8
9
10
1split 'tableName'
2
3split 'namespace:tableName'
4
5split 'regionName' # format: 'tableName,startKey,id'
6
7split 'tableName', 'splitKey'
8
9split 'regionName', 'splitKey'
10

其中’splitKey’表示从哪一行开始切分

reqion切片合并


1
2
3
4
1merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME'
2
3merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME', true     //强制合并
4

其中’ENCODED_REGIONNAME’表示region Id中的hashcode,比如上面的bd26e274811777d0f1a70b57ad5416b4

flush
将memstore中的数据强制写入磁盘


1
2
3
4
1flush 'TABLENAME'
2flush 'REGIONNAME'
3flush 'ENCODE_REGIONNAME'
4

close_region
关闭region空间


1
2
3
4
5
1close_region 'REGIONNAME'
2close_region 'REGIONNAME', 'SERVER_NAME'
3close_region 'ENCODED_REGIONNAME'
4close_region 'ENCODED_REGIONNAME', 'SERVER_NAME'
5

assign
分配一个region


1
2
3
1assign 'REGIONNAME'
2assign 'ENCODE_REGIONNAME'
3

unassign
关闭一个region,Unassign会在当前位置关闭region然后重启一次


1
2
3
1assign 'REGIONNAME'
2assign 'ENCODE_REGIONNAME'
3

balancer_switch
blance的开关
balancer_switch控制是否启用region的负载均衡算法。如果负载均衡算法已开启,balance能主动运行负载均衡算法将region服务器上的region进行均匀再分配。


1
2
3
1balance_switch true
2balance_switch false
3

手动balancer


1
2
1balancer
2

手动触发major compaction


1
2
3
4
5
6
7
8
9
1#Compact all regions in a table:
2major_compact 't1'
3#Compact an entire region:
4major_compact 'r1'
5#Compact a single column family within a region:
6major_compact 'r1', 'c1'
7#Compact a single column family within a table:
8major_compact 't1', 'c1'
9

安全(security)命令

分配权限


1
2
1grant 'zzq','RW','student'
2

给用户‘zzq’分配对表student有读写的权限
权限用五个字母表示: “RWXCA”
分别代表
READ(‘R’), WRITE(‘W’), EXEC(‘X’), CREATE(‘C’), ADMIN(‘A’)

查看权限


1
2
1user_permission 'student'
2

查看表student的权限列表

收回权限


1
2
1revoke 'zzq','student'
2

收回zzq用户在表student上的权限

待补充

复制集(replication)命令
快照(snapshots)命令
配置(configuration)命令
配额(quotas)命令
程序(procedures)命令
可见标签(visibility labels)命令
rs分组(rsgroup)命令

总结

我们发现hbase的使用上与一般的数据库还是有点类似的,难点在于集群间的资源调整。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索