一、测试目的(文档目的):
使用HBase snapshot,测试Phoenix数据备份、HBase数据备份。
二、测试步骤:
#2.1#定期(如1天),备份重要表、重要数据
snapshot 'PH_MONITOR.T_MONITOR_INTERFACE_LOG', 'PH_MONITOR.T_MONITOR_INTERFACE_LOG_snapshot_20161001'
#2.2#演练Phoenix/HBase中的表被破坏,测试用例如下
##(a)表中数据被删除部分或全部(Phoenix中执行)
DELETE FROM PH_MONITOR.T_MONITOR_INTERFACE_LOG LIMIT 30;
DELETE FROM PH_MONITOR.T_MONITOR_INTERFACE_LOG;
##(b)表被drop(Phoenix中执行)
DROP TABLE PH_MONITOR.T_MONITOR_INTERFACE_LOG;
##(c)表被truncate(HBase中执行)
truncate 'PH_MONITOR.T_MONITOR_INTERFACE_LOG'
##(d)表被drop(HBase中执行)
disable 'PH_MONITOR.T_MONITOR_INTERFACE_LOG'
drop 'PH_MONITOR.T_MONITOR_INTERFACE_LOG'
#2.3#用快照恢复数据,它需要先禁用表,再进行恢复
disable 'PH_MONITOR.T_MONITOR_INTERFACE_LOG'
restore_snapshot 'PH_MONITOR.T_MONITOR_INTERFACE_LOG_snapshot_20161001'
enable 'PH_MONITOR.T_MONITOR_INTERFACE_LOG'
#或,2.3#从快照复制生成一个新表
clone_snapshot 'PH_MONITOR.T_MONITOR_INTERFACE_LOG_snapshot_20161001', 'PH_MONITOR.T_MONITOR_INTERFACE_LOG_newTable_20161001'
#2.4 根据2.2的测试用例得出测试结论:
1、执行2.2中的测试用例后,测试结果
(a)、(c)、(d)
HBase、Phoenix数据从镜像snapshot中都可还原
(b)
HBase数据从镜像snapshot中可还原;Phoenix由于DROP TABLE,元数据已被删除,所以restore后,Phoenix中看不到原表
2、Phoenix原表被drop,对镜像snapshot的使用(还原成原表、还原其他新表)无影响。
3、Phoenix表通过HBase snapshot备份的话,必须是还原(restore_snapshot)操作,还原成相同名称的表(即原表),Phoenix才能识别;从镜像snapshot还原过来的其他名称的表(clone_snapshot),Phoenix不能识别。
#复制到其他HBase集群
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot PH_MONITOR.T_MONITOR_INTERFACE_LOG_snapshot_20161001 -copy-to hdfs://6.hadoop.com:8020/hbase -mappers 2
hadoop jar /usr/local/fqlhadoop/hbase-1.1.2/lib/hbase-server-1.1.2.jar exportsnapshot -snapshot PH_MONITOR.T_MONITOR_INTERFACE_LOG_snapshot_20161001 -copy-to hdfs://6.hadoop.com:8020/hbase -mappers 2
执行后,就可以在目标集群HBase命令行下执行list_snapshots,看到拷贝过去的snapshot。(snapshot拷贝到目标集群HDFS上的路径hdfs://6.hadoop.com:8020/hbase/.hbase-snapshot/PH_MONITOR.T_MONITOR_INTERFACE_LOG_snapshot_20161001下)
HBase中不用新建表,直接执行restore_snapshot 'PH_MONITOR.T_MONITOR_INTERFACE_LOG_snapshot_20161001'即可;但另一集群Phoenix中无法识别restore_snapshot后的表(再在Phoenix中新建相同结构的表也无法识别)。
如果Phoenix中提前新建表,再执行restore_snapshot,HBase命令行会提示ERROR: PH_MONITOR.T_MONITOR_INTERFACE_LOG
复制到其他HBase集群,测试结论:通过HBase snapshot,
HBase既可以本集群做镜像,本集群还原,又可以本集群做镜像,跨集群还原;
Phoenix不能本集群做镜像,跨集群还原,只能本集群做镜像,本集群还原(因为另一个集群没有Phoenix到HBase元数据的维护)。
(尝试Phoenix映射HBase中已存在的表,映射失败,没有映射到记录)
三、其他
#3.1 测试命令记录
desc 'PH_MONITOR.T_MONITOR_INTERFACE_LOG'
scan 'PH_MONITOR.T_MONITOR_INTERFACE_LOG', {LIMIT=>3}
count 'PH_MONITOR.T_MONITOR_INTERFACE_LOG'
SELECT * FROM PH_MONITOR.T_MONITOR_INTERFACE_LOG LIMIT 3;
SELECT COUNT(1) FROM PH_MONITOR.T_MONITOR_INTERFACE_LOG LIMIT 3;
Replication与Snapshot的区别