3

我有一个 PowerShell 脚本,它使用 HDinsight 上的 hive 创建一些输出。输出放置在本地 blob 中,然后我使用 AzCopy 将其复制到本地计算机。我经常这样做以获得我需要的各种数据,经常多次调用该脚本。问题在于,有时会AzCopy出现错误消息“未满足使用 HTTP 条件标头指定的条件。”,但这是在多次成功迭代之后。

我不确定这意味着什么,提琴手成绩单也没有多大帮助。我尝试删除文件并重复AzCopy,但错误仍然存​​在,因此它可能与AzCopyhttp 会话有关。任何人都可以启发我吗?

PS C:\hive> AzCopy /Y /Source:https://msftcampusdata.blob.core.windows.net/crunch88-1 /Dest:c:\hive\extracts\data\ /SourceKey:attEwHZ9AGq7pzzTYwRvjWwcmwLvFqnkxIvJcTblYnZAs1GSsCCtvbBKz9T/TTtwDSVMDuU3DenBbmOYqPIMhQ== /Pattern:hivehost/stdout 
AzCopy : [2015/05/10 15:08:44][ERROR] hivehost/stdout: The remote server returned an error: (412) The condition specified using HTTP conditional header(s) 
is not met..
At line:1 char:1
+ AzCopy /Y /Source:https://msftcampusdata.blob.core.windows.net/crunch88-1 /Dest: ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ([2015/05/10 15:...s) is not met..:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

The condition specified using HTTP conditional header(s) is not met.

在此处输入图像描述

4

1 回答 1

3

为了保证整个下载过程中的数据完整性,AzCopy 在从源 blob 读取数据时,将源 blob 的ETag传递到 HTTP 标头“If-Match”中。因此 HTTP 状态代码 412(前提条件失败)“不满足使用 HTTP 条件标头指定的条件。” 只是意味着您的 blob 在 AzCopy 下载它们时被更改

请避免在下载它们时更改源 blob。如果您必须同时更改源 blob,您可以尝试以下解决方法:

首先拍摄源 blob 的快照,然后使用 AzCopy(指定 /Snapshot 选项)下载 blob,这样 AzCopy 将尝试下载源 blob 及其所有快照。虽然下载源 blob 可能会失败并显示 412(前提条件失败),但下载快照可以成功。下载快照的文件名为:{blob name without extension} ({snapshot timestamp}).{extension}。

有关 AzCopy 和选项 /Snapshot 的详细信息,请参阅AzCopy 命令行实用程序入门

一些更新:

您是否终止了 AzCopy,然后使用相同的命令行恢复它?如果是这样,则需要确保在上次执行 AzCopy 后源 blob 未更改,因为 AzCopy 必须确保在 AzCopy 首次下载源 blob 到成功下载源 blob 之间的时间段内源 blob 保持不变。为了检查是否恢复,您可以检查 AzCopy 的输出是否包含“Incomplete operation with same command line detected at the journal directory {Dir Path}, AzCopy will start to resume.”。

因为在您的命令行中指定了 /Y,所以恢复提示将始终回答“是”。为避免恢复行为,您可以在执行 AzCopy 之前清理默认日志文件夹“%LocalAppData%\Microsoft\Azure\AzCopy”,或指定 /Z: 以为每次执行配置唯一的日志文件夹。

于 2015-05-11T02:33:28.183 回答