准备数据

执行命令, 生成一个10g 的表

hbase org.apache.hadoop.hbase.PerformanceEvaluation --compress=SNAPPY --size=10 sequentialWrite 10

生成的表结构如下

hbase(main):001:0> desc 'TestTable'
Table TestTable is ENABLED
TestTable
COLUMN FAMILIES DESCRIPTION
{NAME => 'info0', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CEL
LS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', R
EPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_
WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'SNAPPY', BLOCKCACHE => 'true', BLOCKSIZE => '655
36', METADATA => {'IN_MEMORY_COMPACTION' => 'NONE'}}
1 row(s)
Took 0.5843 seconds
hbase(main):002:0> 

分别查看表的 hdfs 大小 和 总行数

$ hdfs dfs -du -h /hbase/data/default
# 2.6 G   /hbase/data/default/TestTable

$ hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'TestTable'
# ...
# org.apache.hadoop.hbase.mapreduce.RowCounter$RowCounterMapper$Counters
# ROWS=10485760
# ...

生成快照, 全量备份数据

进入 hbase shell, 执行命令

snapshot 'TestTable', 'TestTable-Snapshot'

list_snapshots  # 查看生成的 snapshot

退出 hbase shell 执行命令导出快照到 hdfs 路径中

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot TestTable-Snapshot -copy-to hdfs://txz-data0:9820/backup/hbase/TestTable-Snapshot

查看生成的快照文件

查看快照文件大小

可以看到导出快照实际是把快照的信息及快照记录的所有数据文件分别导出到指定目录下的.hbase-snapshot和archive目录下。

删除 TestTable 表, 删除快照, 删除archive 文件

disable 'TestTable'

drop 'TestTable'

delete_snapshot 'TestTable-Snapshot'