概述
ArgoDBBar 是 ArgoDB 提供的数据备份与恢复工具,您可以通过 SQL 语句直接对表进行同步、备份和恢复操作。
本指南将带您完成一个完整的备份与恢复流程,帮助您理解如何通过版本号(reversion)回滚到任意历史数据状态。
准备工作
参考内部文章 ArgoDBBar 安装/运维手册
详细说明
备份/恢复(ArgoDB 到文件系统,文件系统到 ArgoDB)
1. 创建测试表并插入初始数据
-- 创建测试holodesk表
DROP TABLE IF EXISTS DEFAULT.test_bar;
CREATE TABLE test_bar(id INT,name string) STORED AS HOLODESK;
--插入一条数据
INSERT INTO test_bar VALUES (1,'a');
2. 执行第一次全量备份
执行以下 BACKUP TABLE 语句,将当前表数据备份到 HDFS 指定目录。
BACKUP TABLE default.test_bar WITH TBLPROPERTIES(
'backupSource.name'='tddms1', -- 源的名字,随意写
'backupSource.type'='ARGODB', -- 固定为 ARGODB
'backupSource.uuid'='shivaCluster', -- 仓库标识,组成最终数据所在的路径
'repository.type'='HDFS', -- 备份到 HDFS 上
'repository.hdfsuri'='hdfs://nameservice1', -- HDFS 地址
'repository.workdir'='/user/lkw/argodbbar/tddms1', -- HDFS 上,数据的根目录
'repository.name'='hdfs_repository', -- HDFS 上,数据的子目录
'ngmr.tddms2.enabled'='true', -- 固定为 true
'backupsource.jdbcurl'='jdbc:inceptor2://172.18.131.171:10011', -- argodbar beeline 连接串
'backupsource.jdbcdriver'='org.apache.hive.jdbc.HiveDriver', -- 固定值,argodbar beeline 驱动名字
'backupsource.username'='hive', -- argodbar beeline 用户名
'backupsource.password'='123456', -- argodbar beeline 密码
'backupsource.authtype'='LDAP', -- argodbar beeline 认证类型
'bar.job.flag'='[BAR_JOB_FLAG] (JobId = 20260702001) ' -- 日志标识,方便找对应SQL的日志用,随意写
);
执行成功后,可通过 HDFS 命令查看备份文件:
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/5
-rw-r--r-- 3 hive hadoop 255 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/5/holodesk_efd09f91a2d04e80bcc0d6ea0d388fa4_0_521921491592982_0_966
-rw-r--r-- 3 hive hadoop 154 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/DATA_FILES_METADATA
-rw-r--r-- 3 hive hadoop 594 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/FULL_DDL
-rw-r--r-- 3 hive hadoop 147 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/HOLODESK_TABLE
-rw-r--r-- 3 hive hadoop 716 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/METADATA_TABLE
-rw-r--r-- 3 hive hadoop 328 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/VERSION_INFO
-rw-r--r-- 3 hive hadoop 53 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/HOLODESK_TABLENAME_FILE
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/tmp
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/tmp/backup
此时备份目录下包含表 default.test_bar 的备份数据,版本号为 0 。
3. 插入新数据并执行第二次备份
-- 插入第二条数据
INSERT INTO test_bar VALUES (2, 'b');
SELECT * FROM test_bar;
-- 结果:1, a 2, b
-- 再次执行相同的 BACKUP TABLE 语句(可复用上面的 SQL,注意修改 JobId 便于区分)
BACKUP TABLE default.test_bar WITH TBLPROPERTIES(
... -- 参数与第一次相同,仅修改 bar.job.flag 中的 JobId
'bar.job.flag'='[BAR_JOB_FLAG] (JobId = 20260702002) '
);
再次查看 HDFS 备份目录,会发现新增了一个版本(版本号 1 ),包含两条数据。
drwxr-xr-x - hive hadoop 0 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/5
-rw-r--r-- 3 hive hadoop 255 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/5/holodesk_efd09f91a2d04e80bcc0d6ea0d388fa4_0_521921491592982_0_966
-rw-r--r-- 3 hive hadoop 154 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/DATA_FILES_METADATA
-rw-r--r-- 3 hive hadoop 594 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/FULL_DDL
-rw-r--r-- 3 hive hadoop 147 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/HOLODESK_TABLE
-rw-r--r-- 3 hive hadoop 716 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/METADATA_TABLE
-rw-r--r-- 3 hive hadoop 328 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/VERSION_INFO
drwxr-xr-x - hive hadoop 0 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1
drwxr-xr-x - hive hadoop 0 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/7
-rw-r--r-- 3 hive hadoop 255 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/7/holodesk_efd09f91a2d04e80bcc0d6ea0d388fa4_0_1356897673058006_3_967
-rw-r--r-- 3 hive hadoop 301 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/DATA_FILES_METADATA
-rw-r--r-- 3 hive hadoop 594 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/FULL_DDL
-rw-r--r-- 3 hive hadoop 147 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/HOLODESK_TABLE
-rw-r--r-- 3 hive hadoop 716 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/METADATA_TABLE
-rw-r--r-- 3 hive hadoop 328 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/VERSION_INFO
-rw-r--r-- 3 hive hadoop 53 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/HOLODESK_TABLENAME_FILE
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/tmp
drwxr-xr-x - hive hadoop 0 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/tmp/backup
4. 更新数据并执行第三次备份
-- 更新 id=1 的 name 为 'c'
UPDATE test_bar SET name='c' WHERE id=1;
SELECT * FROM test_bar;
-- 结果:1, c 2, b
-- 再次执行 BACKUP TABLE(修改 JobId 为 20260702003)
BACKUP TABLE default.test_bar WITH TBLPROPERTIES(
...
'bar.job.flag'='[BAR_JOB_FLAG] (JobId = 20260702003) '
);
此时备份目录下共有三个版本:
- 版本 0 :包含数据 1, a
- 版本 1 :包含数据 1, a 和 2, b
- 版本 2 :包含数据 1, c 和 2, b
drwxr-xr-x - hive hadoop 0 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/5
-rw-r--r-- 3 hive hadoop 255 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/5/holodesk_efd09f91a2d04e80bcc0d6ea0d388fa4_0_521921491592982_0_966
-rw-r--r-- 3 hive hadoop 154 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/DATA_FILES_METADATA
-rw-r--r-- 3 hive hadoop 594 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/FULL_DDL
-rw-r--r-- 3 hive hadoop 147 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/HOLODESK_TABLE
-rw-r--r-- 3 hive hadoop 716 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/METADATA_TABLE
-rw-r--r-- 3 hive hadoop 328 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/0/VERSION_INFO
drwxr-xr-x - hive hadoop 0 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1
drwxr-xr-x - hive hadoop 0 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/7
-rw-r--r-- 3 hive hadoop 255 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/7/holodesk_efd09f91a2d04e80bcc0d6ea0d388fa4_0_1356897673058006_3_967
-rw-r--r-- 3 hive hadoop 301 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/DATA_FILES_METADATA
-rw-r--r-- 3 hive hadoop 594 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/FULL_DDL
-rw-r--r-- 3 hive hadoop 147 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/HOLODESK_TABLE
-rw-r--r-- 3 hive hadoop 716 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/METADATA_TABLE
-rw-r--r-- 3 hive hadoop 328 2026-07-02 10:23 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/1/VERSION_INFO
drwxr-xr-x - hive hadoop 0 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2
drwxr-xr-x - hive hadoop 0 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2/5
-rw-r--r-- 3 hive hadoop 132 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2/5/holodesk_efd09f91a2d04e80bcc0d6ea0d388fa4_0_778351525244497_68_1782959092956_delta.968
drwxr-xr-x - hive hadoop 0 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2/9
-rw-r--r-- 3 hive hadoop 255 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2/9/holodesk_efd09f91a2d04e80bcc0d6ea0d388fa4_0_778351528153647_68_968
-rw-r--r-- 3 hive hadoop 538 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2/DATA_FILES_METADATA
-rw-r--r-- 3 hive hadoop 594 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2/FULL_DDL
-rw-r--r-- 3 hive hadoop 147 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2/HOLODESK_TABLE
-rw-r--r-- 3 hive hadoop 716 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2/METADATA_TABLE
-rw-r--r-- 3 hive hadoop 328 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/2/VERSION_INFO
-rw-r--r-- 3 hive hadoop 53 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default.test_bar/HOLODESK_TABLENAME_FILE
drwxr-xr-x - hive hadoop 0 2026-07-02 10:21 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/tmp
drwxr-xr-x - hive hadoop 0 2026-07-02 10:25 /user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/tmp/backup
5. 使用 RESTORE 恢复数据到指定版本
您可以通过 reversion 参数指定要恢复的版本号。例如,恢复到版本 1 (包含 1, a 和 2, b ):
RESTORE TABLE default.test_bar reversion 1 with TBLPROPERTIES(
'backupSource.name'='tddms1',
'backupSource.type'='ARGODB',
'backupSource.uuid'='shivaCluster',
'repository.type'='HDFS',
'repository.name'='hdfs_repository',
'repository.hdfsuri'='hdfs://nameservice1',
'repository.workdir'='/user/lkw/argodbbar/tddms1',
'ngmr.tddms2.enabled'='true',
'backupsource.jdbcurl'='jdbc:inceptor2://172.18.131.171:10000', -- 恢复目标的 quark 连接方式
'backupsource.jdbcdriver'='org.apache.hive.jdbc.HiveDriver',
'backupsource.username'='hive',
'backupsource.password'='123456',
'backupsource.authtype'='LDAP',
'backupsource.defaultPrincipal'='null',
'bar.job.flag'='[BAR_JOB_FLAG] (JobId = 20260702004) '
);
恢复完成后,查询表数据验证:
SELECT * FROM default.test_bar;
-- 结果应为:1, a 2, b
版本号说明
- 每次执行
BACKUP TABLE都会生成一个新的版本,版本号从 0 开始递增。 - 版本号与备份执行的顺序一一对应:第一次备份为 0 ,第二次为 1 ,第三次为 2 ,以此类推。
- 恢复时指定
reversion即可回滚到该版本对应的数据状态。
同步(ArgoDB 到 ArgoDB)
SQL比较简单,建议通过LDAP或GUARDIAN TOKEN方式连接目标端quark。
-- 使用 LDAP 连接目标端
SYNC TABLE db.tbl WITH TBLPROPERTIES (
'backupsource.jdbcurl'='jdbc:hive2://tw-node1:10000', -- 目标端 quark 连接方式
'backupsource.jdbcdriver'='org.apache.hive.jdbc.HiveDriver',
'backupsource.username'='hive',
'backupsource.password'='123456',
'backupsource.authtype'='LDAP'
);
-- 使用 GUARDIAN TOKEN 连接目标端
SYNC TABLE db.tbl WITH TBLPROPERTIES (
-- 目标端 quark 连接方式,必须带 guardianToken
'backupsource.jdbcurl'='jdbc:hive2://tw-node1:10000;guardianToken=4X1U7BoTYHPCEpg9qoqH-TDH',
'backupsource.jdbcdriver'='org.apache.hive.jdbc.HiveDriver',
'backupsource.authtype'='GUARDIAN_TOKEN'
);
常见问题
Q:恢复操作会覆盖当前表数据吗?
A:是的,RESTORE TABLE 会清空目标表并写入指定版本的数据,请谨慎操作。建议先备份当前数据或恢复到临时表。
Q:如何查看当前有哪些备份版本?
A:通过 HDFS 命令查看备份目录下的子目录结构,每个版本对应一个数字命名的子目录。例如:
/user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default/test_bar/0
/user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default/test_bar/1
/user/lkw/argodbbar/tddms1/hdfs_repository/shivaCluster/default/test_bar/2
Q:备份参数中的 backupsource.jdbcurl 在 BACKUP 和 RESTORE 中有什么区别?
A:在 BACKUP 中,该参数指定的是源表所在的 ArgoDB 连接串;在 RESTORE 中,该参数指定的是恢复目标的 ArgoDB 连接串。两者可以不同集群。
Q:如果两套集群之间网络不通,无法在源集群中使用 RESTORE TABLE 直接恢复到备集群,能否拷贝hdfs备份的文件到备集群恢复?
A:可以,将hdfs文件拷贝到备集群,使用 RESTORE TABLE 恢复。
Q:SQL命令对权限要求是怎样的?
| SQL | 执行SQL的用户所需权限 | SQL中指定的用户所需要的权限 |
|---|---|---|
| SYNC TABLE | 同步权限 | 目标端创建/写库表的权限 |
| BACKUP TABLE | 备份权限 | 读表的权限 |
| RESTORE TABLE | 恢复权限 | 目标端创建/写库表的权限 |