1.表的region分配情况;
2.表的大小(grafana可以看到);
hbase(main):001:0> disable 'gx_rpt:msg_push_taskid_group_name'
0 row(s) in 2.1140 seconds
hbase(main):002:0> snapshot 'gx_rpt:msg_push_taskid_group_name','gx_rpt.msg_push_taskid_group_name_20171115'
0 row(s) in 1.2060 seconds
hbase(main):004:0> list_snapshots
SNAPSHOT TABLE + CREATION TIME
gx_rpt.msg_push_taskid_group_name gx_rpt:msg_push_taskid_group_name_20171115 (Wed Nov 15 16:24:47 +0800 2017)
有两个命令可选:
hbase(main):003:0> help 'truncate'
Disables, drops and recreates the specified table.
hbase(main):004:0> help 'truncate_preserve'
Disables, drops and recreates the specified table while still maintaing the previous region boundaries.
选择truncate_preserve
hbase(main):008:0> truncate_preserve 'gx_rpt:msg_push_taskid_group_name'
Truncating 'gx_rpt:msg_push_taskid_group_name' table (it may take a while):
- Disabling table...
- Truncating table...
0 row(s) in 7.5620 seconds
hbase(main):009:0> describe 'gx_rpt:msg_push_taskid_group_name'
Table gx_rpt:msg_push_taskid_group_name is ENABLED
gx_rpt:msg_push_taskid_group_name
COLUMN FAMILIES DESCRIPTION
{NAME => 'inf', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '3', COMPRESSION => 'NONE'
, MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'tr
ue'}
1 row(s) in 0.0440 seconds
hbase(main):014:0> count 'gx_rpt:msg_push_taskid_group_name'
0 row(s) in 0.6100 seconds
=> 0
################################################
HBase Snapshots允许你对一个表进行快照(即可用副本),它不会对Region Servers产生很大的影响,它进行复制和 恢复操作的时候不包括数据拷贝。导出快照到另外的集群也不会对Region Servers产生影响。 下面告诉你如何使用Snapshots功能
1.开启快照支持功能,在0.95+之后的版本都是默认开启的,在0.94.6+是默认关闭
hbase.snapshot.enabled true
2.给表建立快照,不管表是启用或者禁用状态,这个操作不会进行数据拷贝
$ ./bin/hbase shell hbase> snapshot 'myTable', 'myTableSnapshot-122112'
3.列出已经存在的快照
$ ./bin/hbase shell hbase> list_snapshots
4.删除快照
$ ./bin/hbase shell hbase> delete_snapshot 'myTableSnapshot-122112'
5.从快照复制生成一个新表
$ ./bin/hbase shell hbase> clone_snapshot 'myTableSnapshot-122112', 'myNewTestTable'
6.用快照恢复数据,它需要先禁用表,再进行恢复
$ ./bin/hbase shell hbase> disable 'myTable' hbase> restore_snapshot 'myTableSnapshot-122112'
提示:因为备份(replication)是系统日志级别的,而快照是文件系统级别的,当使用快照恢复之后,副本会和master出于不同的状态,如果你需要使用恢复的话,你要停止备份,并且重置bootstrap。
如果是因为不正确的客户端行为导致数据丢失,全表恢复又需要表被禁用,可以采用快照生成一个新表,然后从新表中把需要的数据用map-reduce拷贝到主表当中。
7.复制到别的集群当中
该操作要用hbase的账户执行,并且在hdfs当中要有hbase的账户建立的临时目录(hbase.tmp.dir参数控制)
采用16个mappers来把一个名为MySnapshot的快照复制到一个名为srv2的集群当中
$ bin/hbase class org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to hdfs://srv2:8020/hbase -mappers 16
Hdfs的快照同样适用于hbase表的恢复。在hbase的数据表目录/hbase/data/default/(default为默认namespace空间)中新建快照,就会在该目录下生成.snapshot的文件夹,里面放着针对该目录的所有快照。
如果存在用户误删hbase表,
将快照中保存的数据表文件夹cp到/hbase/data/default下,然后执行如下命令,修复元数据即可。
注意:cp到/hbase/data/default目录下的数据表文件夹的权限要修改成hbase:hbase。
否则修改元数据的命令会失败。
上面是对整个hbase的namespace空间进行的快照备份,如果在某一个表目录下建快照,那么这个表目录就会变成只读,在hbase shell中执行disable+drop
虽然数据不会丢失但是元数据会被drop命令删除,还得用repair命令进行修复。
修复完之后,再enable这个表,就ok了。