Azure 数据工厂复制活动期间 Blob 存储接收器超时

问题描述 投票:0回答:1

我正在尝试使用 Azure 数据工厂管道中的复制数据活动将 Azure 表存储表备份到 Azure Blob 存储。

这大部分工作正常,但对于我的一些存储帐户,某些具有大量记录的表始终失败。管道中的错误消息是“客户端无法在指定超时内完成操作。”

我在阅读 Azure 表存储时将问题归结为间歇性峰值;备份过程中的大多数请求需要不到 250 毫秒才能完成,但有时有些请求需要约 19000 毫秒才能完成。当 Azure 表存储出现这些读取峰值时,Blob 上传会超时。这些峰值持续发生,以至于我永远无法完成这些表的备份。

有没有办法在写入 blob 存储时增加接收器超时,或者是否有其他配置可以用来帮助这些上传成功?

这是管道运行中的错误示例:

{
    "dataRead": 2073796386,
    "dataWritten": 211593105,
    "filesWritten": 12,
    "sourcePeakConnections": 1,
    "sinkPeakConnections": 1,
    "rowsRead": 1272000,
    "rowsCopied": 1272000,
    "copyDuration": 372,
    "throughput": 7302.1,
    "logFilePath": "backup-logs/copyactivity-logs/Copy to Blob Storage/163560cd-ec4b-4fba-86f2-c6a5ea8ce584/",
    "errors": [
        {
            "Code": 9011,
            "Message": "ErrorCode=UserErrorFailedFileOperation,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The file operation is failed, upload file failed at path: 'backups/20230908/activities/activities_00012.parquet'.,Source=Microsoft.DataTransfer.Common,''Type=Microsoft.WindowsAzure.Storage.StorageException,Message=The client could not finish the operation within specified timeout.,Source=Microsoft.WindowsAzure.Storage,''Type=System.TimeoutException,Message=The client could not finish the operation within specified timeout.,Source=,'",
            "EventType": 0,
            "Category": 5,
            "Data": {},
            "MsgId": null,
            "ExceptionType": null,
            "Source": null,
            "StackTrace": null,
            "InnerEventInfos": []
        }
    ],
    "effectiveIntegrationRuntime": "PrivateNetworkIntegrationRuntime (North Central US)",
    "usedDataIntegrationUnits": 4,
    "billingReference": {
        "activityType": "DataMovement",
        "billableDuration": [
            {
                "meterType": "ManagedVNetIR",
                "duration": 0.4666666666666667,
                "unit": "DIUHours"
            }
        ]
    },
    "usedParallelCopies": 1,
    "executionDetails": [
        {
            "source": {
                "type": "AzureTableStorage"
            },
            "sink": {
                "type": "AzureBlobStorage"
            },
            "status": "Failed",
            "start": "9/8/2023, 10:21:57 AM",
            "duration": 372,
            "usedDataIntegrationUnits": 4,
            "usedParallelCopies": 1,
            "profile": {
                "queue": {
                    "status": "Completed",
                    "duration": 87
                },
                "transfer": {
                    "status": "Completed",
                    "duration": 284,
                    "details": {
                        "readingFromSource": {
                            "type": "AzureTableStorage",
                            "workingDuration": 274,
                            "timeToFirstByte": 0
                        },
                        "writingToSink": {
                            "type": "AzureBlobStorage",
                            "workingDuration": 4
                        }
                    }
                }
            },
            "detailedDurations": {
                "queuingDuration": 87,
                "timeToFirstByte": 0,
                "transferDuration": 284
            }
        }
    ],
    "dataConsistencyVerification": {
        "VerificationResult": "NotVerified"
    },
    "durationInQueue": {
        "integrationRuntimeQueue": 0
    }
}

复制数据活动的“常规”超时配置已设置为 12 小时,因此这不是一个因素。如果复制活动运行完成,则需要不到一个小时(基于具有相同表且不存在此问题的其他存储帐户)。

我尝试了一些方法来尝试让管道成功:我单独运行了单个表的备份,以确保它不是负载问题,但这些也失败了。我还调整了“最大数据集成单位”和“复制并行度”以尝试减慢复制过程(再次减少负载),但这也没有影响。

azure-blob-storage azure-data-factory azure-table-storage
1个回答
0
投票

AFAIK,默认情况下,将数据写入接收器的超时时间是 2 小时。我们无法增加它。

对于较大的表(即卷为 100 GB 或更大或无法在两小时内迁移到 Azure 的表),我们建议您对数据进行分区

要解决这种情况,您可以尝试以下选项来分区数据。

在每个文件中写入特定的行集 enter image description here

在此之后使用另一复制活动尝试将文件合并为一个,以便将所有数据复制到一个文件中。

© www.soinside.com 2019 - 2024. All rights reserved.