You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Trafodion完全脱机备份/还原
Trafodion的完全脱机备份和还原操作通过 HBase快照特征来执行。快照是以轻量方式无需通过数据的复制从而保持表的当前状态。比如,一张更改后的表需要被还原,恢复快照就会给出此表的前一个状态。更多关于快照的介绍可以查找此链接:http://blog.cloudera.com/blog/2013/03/introduction-to-apache-hbase-snapshots/。

快照可用于Trafodion的所有表,包括Trafodion的元数据表,然后通过HBase ExportSnapshot Mapreduce job导出到HDFS。当我们需要从HDFS还原备份的文件时,快照同样通过ExportSnapshot MapReduce作业被导入到目标系统被还原。关于Trafodion完整的备份还原过程,如下所示:

完全脱机备份
使用HBase shell snapshot命令来完成用于所有Trafodion表的备份快照。
快照一经使用,将通过ExportSnapshot MapReduce作业逐个被导出到HDFS的文件夹,ExportSnapshot MapReduce作业为HBase安装基础的一部分。此MapReduce作业可使用 -m 选项并行执行。
如需可存档或可移动到不同集群的备份文件,可使用hadoop distcp或其它可行方法。
Trafodion完全停止运行前需进行完整的脱机备份。
完全脱机还原
若要还原保存于HDFS中的快照,可通过ExportSnapshot MapReduce作业将快照逐一导入到HBase。MapReduce任务可以并行运行。
快照一经导入,可使用‘restore_snapshot’HBase shell命令进行还原。
Trafodion完全停止运行前需进行完整的脱机还原。
Trafodion表
在HBase中创建Trafodion表,表名需有一定的格式,如‘TRAFODION.< 架构名称 >.< 表名称 >;’。如若备份所有的Trafodion表,备份工具将选择和备份具有命名形式如TRAFODION.< 任何架构名称 >.< 任何表名称 >的表。除了用户表,元数据表(TRAFODION._MD_.< 表名称 >)和存储库表 (TRAFODION._REPOS_.< 表名称 >) 也应备份。

Sudo访问权限
备份和还原工具可用于开发和集群环境,Cloudera或Horton Works分布。如在集群环境中运行备份和还原脚本,运行脚本的用户需要sudo权限,以便能够作为HBase用户(用户在HBase服务器运行下),HDFS用户和Trafodion用户在无需输入密码的情况下运行脚本。但是在开发环境中运行脚本时,不需要sudo权限。

备份文件的安全性
备份还原操作需使用具有sudo访问权限的用户来执行,此用户可以sudo访问HBase用户。备份和还原都通过具有读和写权限的ExportSnapshot MapReduce作业来访问到这些位置:

HBase根目录由hbase.rootdir属性定义。此文件夹为HBase用户拥有。
备份文件夹的所有者或者具有相应的读写权限的HBase用户可以访问此备份文件夹。如果HDFS目标文件夹不存在,备份脚本将试图创建目标HDFS文件夹。
脚本
备份脚本:run_full_trafodion_backup.sh。
/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路径要求的格式,如hdfs://<host>:<port>/<folder>/...

如果不提供路径,脚本会生成一个路径,格式如

hdfs://<host>:<port>/trafodion-backlups/backup_<timestamp> and unless -n

指示用户会被询问是否确认生成的

路径的使用。

-u trafodion 用户

(可选)在Trafodion服务器运行的用户。如果没有提供,而且

如果选项 -n 没有指示,用户会被询问是否使用默认的

trafodion用户‘trafodion'。若回答为yes,则

使用默认的trafodion用户,否则脚本退出。

-h hbase 用户

(可选)在HBase服务器运行的用户。如果没有提供,脚本

将试图计算,如果不成功,则使用默认

的HBase用户 'hbase'。除非指定-n 选项,则会要求用户

确认之后的选择。

-d hdfs 用户

(可选)在HDFS服务器运行的用户。如果没有提供,脚本

将试图计算,如果不成功,则建议使用默认

的HDFS用户 'hdfs'。除非指定-n 选项,则会要求用户

确认之后的选择。

-m mappers

(可选)mappers的数目,默认为2.

-n

(可选)非交互模式。使用此选项,脚本不会提示

用户确认使用的计算或默认值参数,

如trafodion用户,HBase用户,HDFS用户或不提供备份路径。
示例:./run_full_trafodion_backup.sh -b hdfs://<host>:<port>/<hdfs-path> -m 4
在Trafodion表备份之前执行检查
备份脚本在开始实际备份之前执行以下检查:

确保Trafodion完全停止。
确保备份文件夹存在,为空,且HBase用户具有对其进行写入的权限。如果它不存在,将试图创建。
确保启用了HBase快照。
确保运行脚本的用户拥有sudo访问权限。
创建HBase主目录,如果它不存在。
试图找出HBase和HDFS的用户,如果这些用户没有提供。
还原:run_full_trafodion_backup.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服务器运行的用户。如果没有提供,而且

选项 -n 没有指定,用户则会被询问是否使用默认的

trafodion用户‘trafodion'。若回答为yes,则

使用默认的trafodion用户,否则脚本退出。

-h hbase 用户

(可选)在HBase服务器运行的用户。如果没有提供,脚本

将试图计算,如果不成功,则建议使用默认

的HBase用户 'hbase'。除非指定-n 选项,则会要求用户

确认之后的选择。

-d hdfs 用户

(可选)在HDFS服务器运行的用户。如果没有提供,脚本

将试图计算,如果不成功,则建议使用默认

的HDFS用户 'hdfs'。除非指定-n 选项,则会要求用户

确认之后的选择。

-m mappers

(可选)mappers的数目,默认为2.

-n

(可选)非交互模式。使用此选项,脚本不会提示

用户确认使用的计算或默认值参数,

如trafodion用户,HBase用户,HDFS用户或不提供备份路径。
示例:./run_full_trafodion_restore.sh -b hdfs://<host>:<port>/<hdfs-path> -m 4
在开始还原之前执行检查
备份脚本在开始实际备份之前执行以下检查:

确保Trafodion完全停止。
确保备份文件夹存在,为空,且HBase用户具有对其进行写入的权限。如果它不存在,将试图创建。
确保启用了HBase快照。
确保运行脚本的用户拥有sudo访问权限。
创建HBase主目录,如果它不存在。
试图找出的HBase和HDFS的用户,如果这些用户没有提供。
辅助脚本
备份与还原脚本使用一套共享的脚本和功能,介绍如下:

backup_restore_functions.sh :作为一套辅助函数
示例
集群上备份与还原
备份
在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
由于上面列出的受限制的问题,此测试用例未成功。

  • No labels