首页 新闻 会员 周边 捐助

如何快速备份存储在HDFS上的数据文件

0
悬赏园豆:40 [待解决问题]

orc事务表,数据文件存储在hdfs的固定目录上,小型用户的数据文件大小约为1.8T,大型用户的数据文件大小约为2.5T。

hive distcp 要快些,但是不适合orc 事务表,恢复的时候要做转换,比较麻烦

请问还有什么更好的思路吗

Rachel_wangxx的主页 Rachel_wangxx | 初学一级 | 园豆:162
提问于:2023-05-17 16:38
< >
分享
所有回答(2)
0

Hadoop DistCp是一个用于在Hadoop集群之间进行数据复制的工具,可以支持跨集群、跨数据中心的数据备份和迁移,使用方法可以百度一下。在备份2T的数据时,可以采取以下几个措施来提高备份速度:

1.增加并行度:DistCp支持设置并行度,可以通过增加并行度来提高备份速度。可以根据集群的计算资源和网络带宽等情况,适当调整并行度的大小。

2.设置带宽限制:DistCp支持设置带宽限制,可以通过设置带宽限制来避免网络拥塞,从而提高备份速度。可以根据网络带宽的情况,适当设置带宽限制的大小。

3.使用增量备份:如果数据量较大,可以考虑使用增量备份的方式,只备份发生变化的数据,避免重复备份已经备份过的数据,从而提高备份速度。

4.优化文件系统:在备份过程中,文件系统的读写性能也会影响备份速度。可以通过优化文件系统的配置,例如增加缓存大小、优化磁盘读写性能等,来提高备份速度

lanedm | 园豆:2396 (老鸟四级) | 2023-05-17 16:58

当使用Hive的ORC事务表时,使用Hadoop DistCp备份数据确实不太方便,因为在恢复数据时需要将ORC事务表转换为非事务表,比较麻烦。为了备份ORC事务表的数据,可以考虑使用Hive自带的备份工具Hive Metastore Backup。

Hive Metastore Backup是Hive自带的备份工具,可以备份Hive的元数据和表数据。备份的数据可以存储在本地文件系统、HDFS、S3等存储系统中。使用Hive Metastore Backup备份数据时,可以避免将ORC事务表转换为非事务表的问题,因为备份的数据已经是非事务表的数据了。

具体使用方法如下:

执行以下命令备份Hive元数据和表数据:
$ hive --service metastore --backup -r <backup_dir>
其中,<backup_dir>是备份数据存储的目录。

执行以下命令恢复备份的数据:
$ hive --service metastore --restore -r <backup_dir>
其中,<backup_dir>是备份数据存储的目录。

通过使用Hive Metastore Backup备份数据,可以避免将ORC事务表转换为非事务表的问题,从而更加方便地备份和恢复数据。需要注意的是,备份数据的存储系统需要考虑数据安全性和可靠性等因素,选择合适的存储系统进行备份。

支持(0) 反对(0) lanedm | 园豆:2396 (老鸟四级) | 2023-05-17 17:02

hive --service metastore --backup -r <backup_dir>
请问这个是备份Metastore里面的所有目录吗,可以指定备份源目录吗

支持(0) 反对(0) Rachel_wangxx | 园豆:162 (初学一级) | 2023-05-17 17:43

@Rachel_wangxx: //hive backup命令只能备份Hive元数据,无法指定备份源目录
//但可以使用--hiveconf选项指定备份到远程目录,例如:
hive --service metastore --backup -r --hiveconf hive.metastore.warehouse.dir=/user/hive/backup

支持(0) 反对(0) lanedm | 园豆:2396 (老鸟四级) | 2023-05-17 17:52

@lanedm: 那老师 如果想要备份ORC事务表的表数据,有没有比较快速的方法

支持(0) 反对(0) Rachel_wangxx | 园豆:162 (初学一级) | 2023-05-17 17:53

@Rachel_wangxx: 只要数据量大了,备份就不会太快的,反复验证备份和远远代码,保证备份过程没问题,能还原就行。
//使用--incremental选项进行增量备份,例如:
hive --service metastore --backup -r --incremental --hiveconf hive.metastore.warehouse.dir=/user/hive/backup

支持(0) 反对(0) lanedm | 园豆:2396 (老鸟四级) | 2023-05-17 17:56

@Rachel_wangxx: //也可以试试全量备份单个表,但是你要了解各个表之间的业务关系,不要缺数据
hdfs dfs -cp /user/hive/warehouse/mydb.db/mytable /user/hive/backup/mytable
//其中,/user/hive/warehouse/mydb.db/mytable为需要备份的表路径,/user/hive/backup/mytable为备份目标路径

支持(0) 反对(0) lanedm | 园豆:2396 (老鸟四级) | 2023-05-17 18:01

@lanedm: 因为我们这边用户数据量很大,表的数量也很大,使用cp的话效率有点低

支持(0) 反对(0) Rachel_wangxx | 园豆:162 (初学一级) | 2023-05-17 18:04

@Rachel_wangxx: 如果是云服务器,还有快照的方式,让硬盘直接返回到某个时间点

支持(0) 反对(0) lanedm | 园豆:2396 (老鸟四级) | 2023-05-17 18:07

@lanedm: 嗯嗯 这个同事有提到,晚上我们测试下。谢谢老师的帮助~

支持(0) 反对(0) Rachel_wangxx | 园豆:162 (初学一级) | 2023-05-17 18:21
0

如果您不希望使用 Hive DistCP 或对 Orc 事务表进行转换,以下是一些可能的思路来处理这种情况:

使用 HDFS 的数据迁移工具:您可以考虑使用 HDFS 提供的数据迁移工具,如 hdfs dfs -cp 命令或 hadoop distcp 命令,来直接将数据文件从一个目录复制到另一个目录。这些命令可以在 HDFS 内部进行高效的数据复制操作,而无需涉及 Hive 或 Orc 事务表。您可以根据需要定期运行这些命令以保持数据同步。

使用外部表:创建一个外部表,指向存储在 HDFS 固定目录上的数据文件。外部表是 Hive 表的一种特殊类型,它只建立与数据文件的元数据关联,而不移动或转换数据文件。您可以使用 CREATE EXTERNAL TABLE 命令创建外部表,并指定 HDFS 目录作为数据存储位置。这样,无论数据文件的大小如何,您可以直接从外部表中查询数据而无需进行转换。

分区或分桶表:如果您的数据具有可分割的特性(例如基于日期的数据分区),您可以考虑创建分区表或分桶表。这样,您可以将数据文件分割成多个较小的部分,并通过 Hive 的分区或分桶功能来优化查询性能。通过将数据划分为更小的块,您可以更方便地处理和管理数据文件。

数据归档与压缩:对于大型数据文件,您可以考虑对数据进行归档和压缩,以减小数据文件的大小并节省存储空间。Hadoop 提供了多种数据压缩格式,如 Snappy、Gzip、LZO 等。您可以选择适合您的数据和查询需求的压缩格式,并在创建表时指定相应的压缩格式。

根据您的具体需求和环境,您可以选择适合的方法来处理大型数据文件的存储和查询。请注意,在做出决策之前,建议对数据进行备份,并进行测试以确保所选方案的性能和可行性。

Technologyforgood | 园豆:7484 (大侠五级) | 2023-05-17 21:49

cp的速度对大量的数据在一天内备份完成来说,效率不高;distcp备份对于orc事务表来说恢复数据会较麻烦

我们的数据已经做过分区和分桶,需要备份的就是分区分桶后的数据

如果使用外部表的方式,需要在环境中建表存储。因为用户花钱买了我们的环境,我们在用户花钱买的环境里占用空间去备份(备份的目的是避免开发人员误操作导致数据损坏),对用户来说是不利的
所以采用表存储的方式不可取

目前想要测试下快照的方式,我和同事在测试中

支持(0) 反对(0) Rachel_wangxx | 园豆:162 (初学一级) | 2023-05-17 22:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册