...
快照可用于Trafodion的所有表,包括Trafodion的元数据表,然后通过HBase ExportSnapshot Mapreduce job导出到HDFS。当我们需要从HDFS还原备份的文件时,快照同样通过ExportSnapshot MapReduce作业被导入到目标系统被还原。关于Trafodion完整的备份还原过程,如下所示:
完全脱机备份
- 使用HBase shell snapshot命令来完成用于所有Trafodion表的备份快照。
...
- 如需可存档或可移动到不同集群的备份文件,可使用hadoop distcp或其它可行方法。
...
- Trafodion完全停止运行前需进行完整的脱机备份。
完全脱机还原
...
- 若要还原保存于HDFS中的快照,可通过ExportSnapshot MapReduce作业将快照逐一导入到HBase。MapReduce任务可以并行运行。
- 快照一经导入,可使用‘restore_snapshot’HBase shell命令进行还原。
...
- Trafodion完全停止运行前需进行完整的脱机还原。
...
备份还原操作需使用具有sudo访问权限的用户来执行,此用户可以sudo访问HBase用户。备份和还原都通过具有读和写权限的ExportSnapshot MapReduce作业来访问到这些位置:
- HBase根目录由hbase.rootdir属性定义。此文件夹为HBase用户拥有。
...
- 备份文件夹的所有者或者具有相应的读写权限的HBase用户可以访问此备份文件夹。如果HDFS目标文件夹不存在,备份脚本将试图创建目标HDFS文件夹。
...
/run_full_trafodion_backup.sh脚本执行所有trafodion表的完全脱机备份,并将备份文件复制到HDFS。
使用该脚本的命令如下所示:
./run_full_trafodion_backup.sh -b backup_folder -u trafodion_user -h HBase_user -d hdfs_user -m mappers -n
其中:
-b backup_folder
(可选)所有的Trafodion对象导出并保存于HDFS路径
...
hdfs://<host>:<port>/trafodion-backlups/backup_<timestamp> and unless -n
指示用户会被询问是否确认生成的
路径的使用。
-u trafodion 用户
(可选)在Trafodion服务器运行的用户。如果没有提供,而且
...
trafodion用户‘trafodion'。若回答为yes,则
使用默认的trafodion用户,否则脚本退出。
-h hbase 用户
(可选)在HBase服务器运行的用户。如果没有提供,脚本
...
的HBase用户 'hbase'。除非指定-n 选项,则会要求用户
确认之后的选择。
-d hdfs 用户
(可选)在HDFS服务器运行的用户。如果没有提供,脚本
...
的HDFS用户 'hdfs'。除非指定-n 选项,则会要求用户
确认之后的选择。
-m mappers
(可选)mappers的数目,默认为2.
-n
(可选)非交互模式。使用此选项,脚本不会提示
用户确认使用的计算或默认值参数,
...
在Trafodion表备份之前执行检查
备份脚本在开始实际备份之前执行以下检查:
- 确保Trafodion完全停止。
- 确保备份文件夹存在,为空,且HBase用户具有对其进行写入的权限。如果它不存在,将试图创建。
...
- 确保运行脚本的用户拥有sudo访问权限。
- 创建HBase主目录,如果它不存在。
...
- 试图找出HBase和HDFS的用户,如果这些用户没有提供。
还原:run_full_trafodion_
...
restore.sh。
./run_full_trafodion_restore.sh脚本从HDFS执行所有的trafodion表的完全脱机还原。
使用该脚本的命令如下所示:
./run_full_trafodion_restore.sh -b backup_folder -b backup_dir -u trafodion_user -h hbase_user -m mappers -n
其中:
-b backup_folder
(非可选)HDFS路径,所有的Trafodion对象导出并保存于此,
而HDFS路径需有特定的格式,如:hdfs://<host>:<port>/<folder>/...
-u trafodion 用户
(可选)在Trafodion服务器运行的用户。如果没有提供,而且
...
trafodion用户‘trafodion'。若回答为yes,则
使用默认的trafodion用户,否则脚本退出。
-h hbase 用户
(可选)在HBase服务器运行的用户。如果没有提供,脚本
...
的HBase用户 'hbase'。除非指定-n 选项,则会要求用户
确认之后的选择。
-d hdfs 用户
(可选)在HDFS服务器运行的用户。如果没有提供,脚本
...
的HDFS用户 'hdfs'。除非指定-n 选项,则会要求用户
确认之后的选择。
-m mappers
(可选)mappers的数目,默认为2.
-n
(可选)非交互模式。使用此选项,脚本不会提示
用户确认使用的计算或默认值参数,
...
在开始还原之前执行检查
备份脚本在开始实际备份之前执行以下检查:
- 确保Trafodion完全停止。
- 确保备份文件夹存在,为空,且HBase用户具有对其进行写入的权限。如果它不存在,将试图创建。
...
在Cloudera或者Hortonworks的集群上执行备份。我们可以:
./run_full_trafodion_backup.sh -b hdfs://<host>:8020/bulkload/backup -m 16
其中,hdfs://<host>:8020/bulkload/backup是此示例中我们希望备份快照存在的hdfs地址。
...
在Cloudera和Horton Works distributions上执行还原。 可以这样:
./run_full_trafodion_restore.sh -b /bulkload/backup -m 4
在开发工作站上备份还原
关于ExportSnapshot在开发环境中的工作,我们需要从$MY_SQROOT/sql/local_hadoop/hbase/lib 目录下复制几个jar文件。否则当运行ExportSnapshot MapReduce作业时,会得到异常错误。这些措施表明,在工作站上测试时,可能有其他的方式来避免异常。
在shell窗口中,当sqenv.sh初始化后,我们需要在执行备份或还原之前执行下面的命令。
cd $MY_SQROOT/sql/local_hadoop
cp ./hadoop-2.4.0/share/hadoop/yarn/*.jar ./hbase/lib
cp ./hadoop-2.4.0/share/hadoop/mapreduce/hadoop-mapreduce-client*.
...
jar ./hbase/lib/
在开发环境中实行备份,我们首先需要确定hdfs的端口(工作站不总是使用标准端口)。我们可以从位于$MY_SQROOT/sql/local_hadoop/hadoop/etc/hadoop/的core-site.xm的配置文件中找到端口号。在此示例中,端口号是28400:
bash-4.1$ cat $MY_SQROOT/sql/local_hadoop/hadoop/etc/hadoop/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
...
<name>fs.default.
...
name</name>
...
<value>hdfs://localhost:28400</
...
value>
</property>
备份
使用上面的端口号来备份,命令是:
./run_full_trafodion_backup.sh -b hdfs://localhost:<port-number>/bulkload/backup -m 4
还原
执行还原:
run_full_trafodion_restore.sh -b hdfs://localhost:<port-number>/bulkload/backup -m 4
测试
目前为止进行的测试用例包括:
拥有HBase 0.98的系统上的备份/恢复
在HBase0.98中创建的所有的Trafodion表备份并导出到hdfs。然后所有的Trafodion表被删除。接下来,备份文件从备份地址到原来被创建的HBase.98中得到还原。对这种类型的测试:
- 装有Trafodion 0.9的工作站,与装有Cloudera distribution的HBase 0.98(开发环境),测试通过。
- 装有Trafodion 0.9与HBase 0.98(HortonWorks distribution)的4个节点的集群。测试通过。
- 装有Trafodion 0.9与HBase 0.98(Cloudera distribution)的2个节点的集群。测试通过。
使用两个不同的拥有Trafodion 0.9和HBase 0.98的系统的备份/还原
在这些测试中所涉及的步骤如下:
- Trafodion源到HDFS地址的备份
- 从hdfs文件移动到有HBase.98的系统。此步骤涉及到从HDFS的备份文件复制到本地磁盘,然后使用scp linux命令将文件移动到目标系统中,然后将备份文件复制到目标系统上的HDFS地址。另一种移动备份文件的方式是使用hadoop distcp,但目前它无法工作,因为与distcp相关的IP端口没有开放。
- 从备份文件还原目标系统上的备份
这种类型的测试:
- 从装有Horton works的4节点的集群到装有Cloudera的2节点集群。测试通过
- 从一个工作站到另一个都装有Cloudera的HBase的工作站(开发环境)。测试通过
使用两个不同的都有Trafodion0.9的系统备份/还原,其中源系统是HBase0.94.6,目标系统为 HBase0.98。
在此测试中我们所面临的主要问题如下:
- 导出快照是空的(表为空),从而造成HBase.94.6失败,并产生异常。这是一个已经知道的问题,在https://issues.apache.org/jira/browse/HBASE-
...
- 8199中有描述。这个问题在HBase 0.94.7中得到了修复,在HBse0.94.6没有。
- 在HBase中间,一般来说(包括快照)是在HBase.94.6和更高版本包括0.98之间,存在兼容性的问题。由于此问题的存在,从HBase.94.6快照到HBase .98的导入无法正常工作。
- 一种解决此兼容性问题的方法,如果要还原到0.98 HBase,是在备份之前,将系统从HBase 0.94.6升级到0.98.x。从HBase 0.94.6到HBase 0.98的升级本身需要2个步骤:从HBase 0.94.6升级到HBase 0.96,然后从 HBase 0.96 升级到HBase 0.98。升级步骤可以在此找到http://HBase.apache.org/book/ch03s04.html
- 由于上面列出的受限制的问题,此测试用例未成功。