首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >备份ADLS gen2

备份ADLS gen2
EN

Stack Overflow用户
提问于 2020-11-05 08:42:57
回答 1查看 641关注 0票数 1

我有数据采集和数据仓库,包含大约5-10 TBs的数据在Azure ADLS gen2,CSV和Delta格式.ADLS的性能/Tier=标准/热,replication=GRS,type=StorageV2。

备份ADLS gen2数据的最佳方法是什么?

  • 从数据损坏的角度来看,我想备份原始的摄入的数据。这可以在定期的基础上逐步完成,少量的数据。
  • 从PROD可用性的角度来看,在复杂的PROD迁移之前,我想备份所有的5-10 TBs。是的,数据可以从原始数据中获得,但可能需要几天甚至一周的时间(包括重新考虑、测试更多)。

考虑因素:

  • Azure备份不支持ADLS
  • 在的帮助下复制数据很慢,因为速度在50到1000 Mbps之间是不稳定的。我的数据量可能需要几天或一周的时间。我说的对吗? Azure存储资源管理器的速度不取决于我的本地互联网速度吗?
  • 我还没有尝试过AzCopy,但希望它具有与相同的速度
  • 在DBFS中将data_container挂载到archive_container,并尝试使用Databrick的dbutils.fs.cp复制数据,比Azure的工作速度还要慢:在大10 Notes30 DBU集群上运行3GB/10分钟。为什么?
  • ADF没有尝试过,但我不喜欢复制活动需要表/格式级别的细节这一事实。我想备份整个容器,而不是实现逻辑,取决于文件夹的数量和命名。
EN

回答 1

Stack Overflow用户

发布于 2022-02-16 04:57:27

对于原始数据/文件夹备份,我使用Microsoft数据移动服务将blob目录从ADLS Gen2复制到存储帐户。

为此,创建一个每日时间触发器函数来执行blob目录的增量副本。您可以配置类似的东西。

创建一个新文件夹,每个星期一(日期)完全备份,并将增量更改保存到周日。一个月后,删除旧的备份文件夹。

这是我的实现。

代码语言:javascript
复制
  public async Task<string> CopyBlobDirectoryAsync(BlobConfiguration sourceBlobConfiguration, BlobConfiguration destBlobConfiguration, string blobDirectoryName)
    {
        CloudBlobDirectory sourceBlobDir = await GetCloudBlobDirectoryAsync(sourceBlobConfiguration.ConnectionString, sourceBlobConfiguration.ContainerName, blobDirectoryName);

        CloudBlobDirectory destBlobDir = await GetCloudBlobDirectoryAsync(destBlobConfiguration.ConnectionString, destBlobConfiguration.ContainerName, destBlobConfiguration.BlobDirectoryPath + "/" + blobDirectoryName);

        // You can also replace the source directory with a CloudFileDirectory instance to copy data from Azure File Storage. If so:
        //   1. If recursive is set to true, SearchPattern is not supported. Data movement library simply transfer all azure files
        //      under the source CloudFileDirectory and its sub-directories.
        CopyDirectoryOptions options = new CopyDirectoryOptions()
        {
            Recursive = true
        };

        DirectoryTransferContext context = new DirectoryTransferContext();
        context.FileTransferred += FileTransferredCallback;
        context.FileFailed += FileFailedCallback;
        context.FileSkipped += FileSkippedCallback;

        // Create CancellationTokenSource used to cancel the transfer
        CancellationTokenSource cancellationSource = new CancellationTokenSource();

        TransferStatus trasferStatus = await TransferManager.CopyDirectoryAsync(sourceBlobDir, destBlobDir, CopyMethod.ServiceSideAsyncCopy, options, context, cancellationSource.Token);

        return TransferStatusToString(blobDirectoryName, trasferStatus);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64693799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档