来自HDInsight群集的AzCopy在PowerShell脚本中失败

来自HDInsight群集的AzCopy在PowerShell脚本中失败,powershell,azure-hdinsight,azcopy,Powershell,Azure Hdinsight,Azcopy,我有一个PowerShell脚本,它使用HDinsight上的配置单元创建一些输出。输出放在本地blob中,然后我使用AzCopy将其复制到本地机器。我经常这样做是为了获得我需要的各种数据,经常多次调用该脚本。问题是,AzCopy在某个时候出错,并显示消息“使用HTTP条件头指定的条件未满足”。但这是在多次成功迭代之后发生的 我不知道这意味着什么,一份小提琴手的成绩单也没有多大帮助。我尝试删除文件并重复AzCopy,但错误仍然存在,因此可能与AzCopyhttp会话有关。谁能启发我 PS C:\

我有一个PowerShell脚本,它使用HDinsight上的配置单元创建一些输出。输出放在本地blob中,然后我使用AzCopy将其复制到本地机器。我经常这样做是为了获得我需要的各种数据,经常多次调用该脚本。问题是,
AzCopy
在某个时候出错,并显示消息“使用HTTP条件头指定的条件未满足”。但这是在多次成功迭代之后发生的

我不知道这意味着什么,一份小提琴手的成绩单也没有多大帮助。我尝试删除文件并重复
AzCopy
,但错误仍然存在,因此可能与
AzCopy
http会话有关。谁能启发我

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.

为了确保整个下载过程中的数据完整性,AzCopy在从源blob读取数据时将源blob的数据“如果匹配”传递到HTTP头中。因此,HTTP状态代码412(前置条件失败)“不满足使用HTTP条件头指定的条件”。这只意味着您的Blob在AzCopy下载时发生了更改

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

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

有关AzCopy和选项/快照的更多信息,请参阅

一些更新:


是否终止AzCopy,然后使用相同的命令行恢复它?如果是这样,您需要确保在上次执行AzCopy后源blob没有更改,因为AzCopy必须确保在AzCopy首次下载源blob到成功下载源blob之间的时间段内源blob保持不变。为了检查是否恢复,您可以检查AzCopy的输出是否包含“在日志目录{Dir Path}检测到相同命令行的不完整操作,AzCopy将开始恢复。”


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

非常好的信息,尽管我看不到自创建此输出的配置单元作业(在stdout上)以来如何更改blob已完成执行。是否终止AzCopy,然后使用相同的命令行恢复它?如果是这样,您需要确保在上次执行AzCopy后源blob没有更改,因为AzCopy必须确保在AzCopy首次下载源blob到成功下载源blob之间的时间段内源blob保持不变。为了检查是否发生恢复,您可以检查AzCopy的输出是否包含“在日志目录{Dir Path}检测到相同命令行的不完整操作,AzCopy将开始恢复。”。是的,这是在初始故障后发生的,但不能解释初始故障。我不知道怎么会这样,也许我需要在那里建立一些睡眠。然而,我从不希望AzCopy在那个脚本中恢复,我总是希望它从头开始。是否仍要在AzCopy命令中指定?因为在命令行中指定了/Y,所以恢复提示将始终回答“是”。为了避免恢复行为,您可以在执行AzCopy之前清理默认日志文件夹“%LocalAppData%\Microsoft\Azure\AzCopy”,或者指定/Z:为每次执行配置一个唯一的日志文件夹。如果您使用该信息更新答案,那将很酷。呜呜呜-一千个视图