我有一个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.
答案 0 :(得分:3)
为了确保整个下载过程中的数据完整性,AzCopy将源代码blob的ETag传递给HTTP标头" If-Match"从源blob读取数据时。因此,HTTP状态代码412(前提条件失败)"不满足使用HTTP条件标头指定的条件。"只是意味着在AzCopy下载时你的blob被改变了。
下载时请避免更改源blob。如果您必须同时更改源blob,可以尝试以下解决方法:
首先拍摄源blob的快照,然后使用AzCopy(指定/ Snapshot选项)下载blob,以便AzCopy尝试下载源blob及其所有快照。虽然下载源blob可能会因412(前提条件失败)而失败,但下载快照可以成功。下载的快照的文件名为:{blob name without extension}({snapshot timestamp})。{extension}。
有关AzCopy和选项/快照的更多信息,请参阅Getting Started with the AzCopy Command-Line Utility。
一些更新:
您是否终止了AzCopy,然后使用相同的命令行恢复它?如果是这样,您需要确保在上一次执行AzCopy之后源blob没有被更改,因为AzCopy必须确保源块在第一次下载它并且下载源blob之间的时间段内保持不变成功。为了检查是否发生了恢复,您可以检查AzCopy的输出是否包含"在日志目录{Dir Path}中检测到相同命令行的不完整操作,AzCopy将开始恢复。"。
因为在命令行中指定了/ Y,所以将始终回答恢复提示"是"。为避免恢复行为,您可以清理默认日记文件夹"%LocalAppData%\ Microsoft \ Azure \ AzCopy"在执行AzCopy之前,或指定/ Z:为每次执行配置一个唯一的日记文件夹。