我在使用 Azure 数据工厂 V2 时遇到问题,其中没有复制具有大量 blob 的容器。一条管道运行了将近 75 小时,最终因错误而失败。
Activity Copy1 failed: ErrorCode=FailedStorageOperation,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=A storage operation failed with the following error
'Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.'.,Source=,''Type=Microsoft.WindowsAzure.Storage.StorageException,Message=Unable to read data from the transport connection:
An existing connection was forcibly closed by the remote host.,Source=Microsoft.WindowsAzure.Storage,''Type=System.IO.IOException,Message=Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.,Source=System,''Type=System.Net.Sockets.SocketException,Message=An
existing connection was forcibly closed by the remote host,Source=System,'
额外细节
- 5 个管道,每个管道都有 1 个复制活动(3 个成功,2 个失败)。
- 将 auto 用于并行复制和 DMU
- 跳过不兼容的行
- 没有分期
- 源数据集使用 Azure 存储帐户的 SAS 密钥。
- 存储帐户配置为 RA-GRS,我正在尝试从辅助(读取访问)位置读取。
- 使用递归和二进制文件选项。
- 目标数据集使用 Azure 存储帐户的 SAS 密钥。
- 存储帐户与源数据集位于同一数据中心(存储帐户的 RA 辅助)。
- 使用保留层次结构选项
- 来源和目的地都是美国中南部
我尝试了 5 个不同的源容器,3 个成功,2 个失败。失败的两个之间的共同点似乎是容器中的 blob 数量。一个容器的根中有超过 3000 万个 Blob。我不知道另一个容器中的数字,但它超过 1 TB,由小文件(每个 15 KB)组成,组织成 2 级深的子文件夹。我试图尽我所能重现文件夹结构。
- 容器 1(成功)
- {Guid-文件夹名称}/Blob.jpg
- 65GB,复制了 63,555 个文件
- 容器 2(成功)
- 文件夹/guid 文件名
- 209GB,复制了 2,724,023 个文件
- 容器 3(成功)
- 文件夹/{文件夹}/blob.txt
- 过滤到 *.txt
- 606MB,复制了 687,559 个文件
- 容器 4(失败)
- 文件夹/{IntId-FolderName}/blob
- 过滤为 *.json
- 超过 62,500,000 个文件,过滤到 *.json 将是其中的 10%
- 容器 5(失败)
- 文件夹/guid 文件名
- 超过 3000 万个 Blob
使用容器 4,我尝试了带过滤器和不带过滤器的源,但都没有工作。然后,我将源更改为更具体的路径 (Folder/1234),该路径具有约 100,000 个 blob,并且它在指定过滤器的情况下复制得很好。由于我已经使用过滤和未过滤的源以及不同的路径结构(容器 1-3)成功复制,因此问题似乎在于 blob 的数量。