DORIS数据备份(HDFS)

DORIS数据备份(HDFS)

安装HADOOP

提前安装HADOOP,搭建一个单节点的HADOOP临时使用。
参考:https://blog.csdn.net/taoruicheng1/article/details/135114606

相关镜像:

docker pull apache/hadoop:3.3.5

安装docker compose

wget https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64
cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version


配置 cat docker-compose.yaml  

(本样例中network使用的是本地 network_mode: host)

version: "3"
services:
   namenode:
      image: your_harbor/apache/hadoop:3.3.5
      hostname: namenode
      command: ["hdfs", "namenode"]
      user: "root:root"
      ports:
        - 9870:9870
        - 8020:8020
      volumes:
        - namenode:/tmp/hadoop-root/dfs
      env_file:
        - ./config.env
      privileged: true
      environment:
          ENSURE_NAMENODE_DIR: "/tmp/hadoop-root/dfs/name"
      network_mode: host
   datanode:
      image: your_harbor/apache/hadoop:3.3.5
      hostname: datanode
      command: ["hdfs", "datanode"]
      user: "root:root"
      env_file:
        - ./config.env
      privileged: true
      ports:
        - 9864:9864
        - 9866:9866
      volumes:
        - datanode:/tmp/hadoop-root/dfs
      network_mode: host
   resourcemanager:
      image: your_harbor/apache/hadoop:3.3.5
      hostname: resourcemanager
      command: ["yarn", "resourcemanager"]
      user: "root:root"
      ports:
         - 8088:8088
         - 8030:8030
         - 8031:8031
         - 8032:8032
         - 8033:8033
      env_file:
        - ./config.env
      volumes:
        - ./test.sh:/opt/test.sh
      network_mode: host
   nodemanager:
      image: your_harbor/apache/hadoop:3.3.5
      command: ["yarn", "nodemanager"]
      user: "root:root"
      env_file:
        - ./config.env
      ports:
         - 8042:8042
      network_mode: host
volumes:
  datanode:
  namenode:

配置config.env


注意 default.name 和 defaultFS 配置,Doris创建备份仓库的时候要用到

CORE-SITE.XML_fs.default.name=hdfs://namenode
CORE-SITE.XML_fs.defaultFS=hdfs://namenode
CORE-SITE.XML_hadoop.http.staticuser.user=root
CORE-SITE.XML_hadoop.tmp.dir=/tmp/hadoop-root
HDFS-SITE.XML_dfs.namenode.rpc-address=namenode:8020
HDFS-SITE.XML_dfs.replication=1
MAPRED-SITE.XML_mapreduce.framework.name=yarn
MAPRED-SITE.XML_yarn.app.mapreduce.am.env=HADOOP_MAPRED_HOME=${HADOOP_HOME}
MAPRED-SITE.XML_mapreduce.map.env=HADOOP_MAPRED_HOME=${HADOOP_HOME}
MAPRED-SITE.XML_mapreduce.reduce.env=HADOOP_MAPRED_HOME=${HADOOP_HOME}
MAPRED-SITE.XML_mapreduce.jobhistory.address=0.0.0.0:10020
MAPRED-SITE.XML_mapreduce.jobhistory.webapp.address=0.0.0.0:19888
YARN-SITE.XML_yarn.resourcemanager.hostname=resourcemanager
YARN-SITE.XML_yarn.nodemanager.pmem-check-enabled=true
YARN-SITE.XML_yarn.nodemanager.delete.debug-delay-sec=600
YARN-SITE.XML_yarn.nodemanager.vmem-check-enabled=true
YARN-SITE.XML_yarn.nodemanager.aux-services=mapreduce_shuffle
YARN-SITE.XML_yarn.nodemanager.resource.cpu-vcores=4
YARN-SITE.XML_yarn.application.classpath=opt/hadoop/etc/hadoop:/opt/hadoop/share/hadoop/common/lib/*:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/hdfs:/opt/hadoop/share/hadoop/hdfs/lib/*:/opt/hadoop/share/hadoop/hdfs/*:/opt/hadoop/share/hadoop/mapreduce/*:/opt/hadoop/share/hadoop/yarn:/opt/hadoop/share/hadoop/yarn/lib/*:/opt/hadoop/share/hadoop/yarn/*
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.maximum-applications=10000
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.maximum-am-resource-percent=0.1
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.queues=default
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.capacity=100
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.user-limit-factor=1
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.maximum-capacity=100
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.state=RUNNING
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.acl_submit_applications=*
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.root.default.acl_administer_queue=*
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.node-locality-delay=40
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.queue-mappings=
CAPACITY-SCHEDULER.XML_yarn.scheduler.capacity.queue-mappings-override.enable=false

touch一个测试文件

touch test.sh

启动HADOOP

# 启动
docker-compose up -d
docker-compose ps
# 关闭  --rmi all
docker-compose down
docker-compose ps

查看日志
docker logs -f hadoop-namenode-1
docker logs -f hadoop-datanode-1


也可以测试一下功能是否好用

#-put命令:从本地文件系统拷贝到HDFS,其中/xxx/xxx/为hdfs中的路径
hdfs dfs -put bootstrap.sh /doris
#-copyFromLocal命令:从本地文件系统拷贝到HDFS,效果与-put命令等同
hdfs dfs -copyFromLocal b.txt /usr/opt/data
#-moveFromLocal命令:从本地文件系统剪切到HDFS,命令执行完后本地文件就没有了
hdfs dfs -moveFromLocal c.txt /usr/opt/data


配置hosts


指向你的HADOOP机器,确保DORIS中各fe/be节点能识别这些域名

cat /etc/hosts
echo "

192.168.12.123 datanode
192.168.12.123 namenode
192.168.12.123 resourcemanager

" >> /etc/hosts
cat /etc/hosts

访问web界面
9870:Namenode 的web界面端口


http://192.168.12.123:9870

配置DORIS仓库


使用root登录mysql客户端

mysql -uroot -P9030 -h 127.0.0.1


创建备份仓库

  注意fs.defaultFS和fs.default.name配置
  HADOOP集群目前只是单节点,所以复本数先配置为1,避免异常发生
  could only be written to 0 of the 1 minReplication nodes. There are 3 datanode(s) running and 3 node(s) are excluded in this operation.

CREATE REPOSITORY hdfs_repo
WITH hdfs
ON LOCATION "hdfs://namenode/doris/hdfs_repo/"
PROPERTIES
(   
    "fs.defaultFS" = "hdfs://namenode",
    "fs.default.name" = "hdfs://namenode",
    "hadoop.username" = "root",
    "dfs.replication" = "1",
    "dfs.client.use.datanode.hostname" = "true",
    "dfs.client.use.namenode.hostname" = "true"
);

SHOW CREATE REPOSITORY for hdfs_repo;

备份数据库


  your_db_name 全库备份

BACKUP SNAPSHOT your_db_name.tag_date_202501
TO hdfs_repo;

show BACKUP\G;

数据有异常重新删除再来

CANCEL BACKUP FROM your_db_name;
DROP REPOSITORY hdfs_repo;
SHOW REPOSITORIES;

查看备份的快照

SHOW SNAPSHOT ON hdfs_repo;

恢复数据

(可以A库备份,B库恢复;在B库上创建同样的仓库hdfs_repo,即可查询到A库备份的数据)
 

RESTORE SNAPSHOT your_db_name.tag_date_202501
FROM hdfs_repo
PROPERTIES
(
    "backup_timestamp"="2025-01-25-06-31-09",  //通过查询快照,可以看到这个时间戳
    "replication_num" = "1"
);

SHOW RESTORE FROM your_db_name\G;


DONE!
 

<think>好的,我现在需要回答用户关于Doris如何做数据备份的问题。首先,我得回忆一下Doris备份机制。Doris作为一款MPP数据库,备份功能应该涉及数据导出和恢复。记得Doris备份与恢复的命令,比如BACKUP和RESTORE,可能还有快照的概念。 首先,用户可能想知道基本的备份步骤。我应该分步骤说明,比如创建仓库、执行备份、查看备份状态等。需要确认命令的正确性,例如创建仓库的语法是不是CREATE REPOSITORY,备份是不是使用BACKUP命令,后面跟备份名和仓库名。 然后,可能需要提到增量备份和全量备份的区别,以及备份的内容,如表、分区等。需要注意权限问题,用户需要有ADMIN权限才能执行这些操作。 接下来,恢复数据的部分同样重要。RESTORE命令的使用,指定备份名和仓库名,以及恢复时的版本问题。可能需要提醒用户恢复时会覆盖现有数据,需要谨慎操作。 另外,备份策略方面,定期执行备份,监控备份状态,存储管理这些点都需要涵盖。可能还需要提到备份的存储位置,比如支持HDFS或S3,不同的仓库类型。 我需要检查是否有遗漏的步骤,比如查看备份状态的命令SHOW BACKUP,以及删除旧备份的DROP REPOSITORY。同时,要确保提到的语法正确,比如快照是否是自动创建的,备份数据的处理等。 可能还需要注意事项,比如备份期间对系统性能的影响,建议在低峰期操作。恢复时的版本兼容性,确保Doris版本一致。权限问题,确保用户有足够的权限执行操作。 最后,结构要清晰,分点说明备份步骤、恢复步骤、策略建议和注意事项。使用代码块标出命令示例,帮助用户理解。避免使用Markdown,但这里用户允许使用,所以可以适当用代码块高亮命令。 总结下来,回答应该包括创建仓库、执行备份、查看状态、恢复数据备份策略和注意事项这几个部分,每个部分简明扼要,步骤明确,确保用户能一步步操作。</think>Doris数据备份主要通过 **快照(Snapshot)** 和 **备份恢复工具** 实现,以下是具体操作步骤和注意事项: --- ### **一、数据备份步骤** #### 1. **创建备份仓库(Repository)** - 备份仓库是存储备份数据的物理位置(如 HDFS 或 S3)。 - 使用 SQL 命令创建仓库: ```sql CREATE REPOSITORY `repo_name` WITH BROKER `broker_name` ON LOCATION "hdfs://path/to/backup" PROPERTIES ( "username" = "hdfs_user", "password" = "hdfs_password" ); ``` - `repo_name`: 仓库名称 - `broker_name`: Doris 的 Broker 名称(需提前配置) - `LOCATION`: 备份存储路径 #### 2. **执行全量备份** - 对指定表或分区进行全量备份: ```sql BACKUP SNAPSHOT `db_name`.`snapshot_name` TO `repo_name` ON ( `table1`, `table2 PARTITION p1` ); ``` - `snapshot_name`: 备份名称(需唯一) - `ON`: 指定备份的表或分区 #### 3. **查看备份状态** - 检查备份任务进度: ```sql SHOW BACKUP FROM `db_name`; ``` - 成功标志:`State` 字段显示 `FINISHED` #### 4. **增量备份(可选)** - Doris 暂不支持直接增量备份,但可通过以下方式实现: - 定期全量备份新分区(按分区表设计) - 记录增量数据的时间范围,备份时指定新分区 --- ### **二、数据恢复步骤** #### 1. **查看已有备份** - 列出仓库中的备份记录: ```sql SHOW SNAPSHOT ON `repo_name`; ``` #### 2. **执行恢复操作** - 从指定备份恢复数据: ```sql RESTORE SNAPSHOT `db_name`.`snapshot_name` FROM `repo_name` ON ( `table1` AS `table1_restored`, `table2` AS `table2_restored` ) PROPERTIES ( "backup_timestamp" = "2024-01-01-00-00-00" ); ``` - `backup_timestamp`: 备份时间戳(通过 `SHOW SNAPSHOT` 获取) #### 3. **验证恢复结果** - 检查恢复任务状态: ```sql SHOW RESTORE FROM `db_name`; ``` --- ### **三、备份策略建议** 1. **定期全量备份** - 建议每日/每周对核心表执行全量备份。 2. **分区表设计优化** - 按时间分区(如按天),仅备份新分区以减少数据量。 3. **备份存储管理** - 保留多个历史版本,避免单点故障。 - 定期清理过期备份: ```sql DROP REPOSITORY `repo_name`; ``` --- ### **四、注意事项** 1. **权限要求** - 备份/恢复操作需 `ADMIN` 权限。 2. **版本兼容性** - 备份恢复要求 Doris 集群版本一致。 3. **资源占用** - 备份期间可能占用网络和磁盘 IO,建议低峰期操作。 4. **元数据一致性** - 备份仅包含数据,表结构需单独管理(建议保存 CREATE TABLE 语句)。 --- 通过上述步骤,可系统化实现 Doris数据备份与恢复。实际场景中需根据数据量、业务需求调整备份频率和存储策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值