簡體   English   中英

備份 ADLS gen2

[英]Backup ADLS gen2

我有數據湖和數據倉庫,其中包含 Azure ADLS gen2、CSV 和 Delta 格式的大約 5-10 TB 數據。 ADLS 的 Performance/Tier=Standard/Hot,replication=GRS,type=StorageV2。

備份我的 ADLS gen2 數據的最佳方法是什么?

  • 從數據損壞的角度來看,我想備份原始攝取數據。 這可以定期增量地、少量數據地完成。
  • 從 PROD 可用性的角度來看,我想在復雜的 PROD 遷移之前很少備份所有 5-10 TB。 是的,數據可以從原始數據中得出,但可能需要幾天甚至一周的時間(包括核對、測試甚至更多)。

注意事項:

  • Azure 備份不支持ADLS
  • 在 Azure Storage Explorer 的幫助下復制數據很慢,因為速度在 50 到 1000 Mbps 之間不穩定。 我的數據量可能需要幾天或一周的時間。 我說得對嗎 Azure Storage Explorer 速度不取決於我本地的 inte.net 速度?
  • 我沒有嘗試過 AzCopy,但希望它的速度與 Azure Storage Explorer 相同
  • data_container掛載到 DBFS 中的archive_container ,並嘗試使用 Databrick 的dbutils.fs.cp復制數據比 Azure 更慢 存儲資源管理器:3GB/10 分鍾,大 10 notes 30 DBU 集群。 為什么?
  • ADF 沒有嘗試過,但我不喜歡Copy 活動需要表/格式級別的詳細信息這一事實。 我想備份整個容器,而不是實現邏輯並且取決於文件夾數量和命名。

對於原始數據/文件夾備份,我使用 Microsoft 數據移動服務將 blob 目錄從 ADLS Gen2 復制到存儲帳戶中。

為此,每天創建一個時間觸發器 function 來執行 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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM