azure - 备份 ADLS gen2
问题描述
我有数据湖和数据仓库,其中包含大约 5-10 TB 的 Azure ADLS gen2、CSV 和 Delta 格式的数据。ADLS 的 Performance/Tier=Standard/Hot,replication=GRS,type=StorageV2。
备份我的 ADLS gen2 数据的最佳方法是什么?
- 从数据损坏的角度来看,我想备份原始摄取的数据。这可以通过增量、少量数据、定期进行。
- 从 PROD 可用性的角度来看,我希望在复杂的 PROD 迁移之前很少备份所有 5-10 TB。是的,数据可以从原始数据中得出,但可能需要几天甚至一周的时间(包括对账、测试甚至更多)。
注意事项:
- Azure 备份不支持 ADLS
- 借助 Azure 存储资源管理器复制数据很慢,因为速度在 50 到 1000 Mbps 之间不稳定。我的数据量可能需要几天或一周的时间。我是否正确 Azure 存储资源管理器的速度不取决于我的本地互联网速度?
- 我没有尝试过 AzCopy,但希望它具有与 Azure 存储资源管理器相同的速度
- 安装
data_container
到archive_container
DBFS 中,并尝试使用 Databrick 复制数据的dbutils.fs.cp
工作比 Azure 存储资源管理器更慢:在 big 10 notes 30 DBUs 集群上 3GB/10 分钟。为什么? - ADF 没有尝试过,但我不喜欢复制活动需要表格/格式级别的详细信息这一事实。我想备份整个容器,不执行逻辑并且取决于文件夹数量和命名。
解决方案
对于原始数据/文件夹备份,我使用 Microsoft 数据移动服务将 blob 目录从 ADLS Gen2 复制到存储帐户。
为此,创建一个每日时间触发函数来执行 blob 目录的增量副本。你可以配置这样的东西。
使用每个星期一(日期)的完整备份创建一个新文件夹,并将增量更改保留到星期日。一个月后删除旧的备份文件夹。
这是我的实现。
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);
}
推荐阅读
- javascript - 在异步函数中导出组件
- anylogic - 从参数变化实验中每次复制导出一个数据集
- azure - MS Azure OAuth2 代理 - 基于令牌的身份验证不是 oauth_proxy cookie
- python - 前缀和提醒命令数据库 discord.py
- javascript - 反应:单击时从父组件更新子组件
- python - 熊猫我如何将相似的列名合并在一起?
- javascript - 打开设置菜单点击 Javascript
- python - 熊猫:从另一列填充混合日期时间字段
- web-scraping - 谷歌如何在搜索时刮掉stackoverflow的所有问题?
- wpf - 检测WPF中的多个纯字母键