来自 HDInsight 群集的 AzCopy 在 PowerShell 脚本中失败
AzCopy from HDInsight cluster failing in PowerShell script
我有一个 PowerShell 脚本,它在 HDinsight 上使用配置单元创建一些输出。输出放在本地 blob 中,然后我使用 AzCopy 将其复制到本地计算机。我经常这样做以获得我需要的各种数据,经常多次调用该脚本。问题是在某些时候 AzCopy
出错并显示消息 "The condition specified using HTTP conditional headers(s) is not met.",但这是在多次成功迭代之后。
我不确定这意味着什么,fiddler 成绩单也没有多大帮助。我尝试删除文件并重复 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 读取数据时将 ETag 源 blob 传递到 HTTP header "If-Match"。因此 HTTP 状态代码 412(前提条件失败)"The condition specified using HTTP conditional headers(s) is not met." 仅表示 您的 blob 在 AzCopy 下载它们时被更改。
请避免在下载时更改源 blob。如果您必须同时更改源 blob,可以尝试以下解决方法:
首先拍摄源 blob 的快照,然后使用 AzCopy(指定 /Snapshot 选项)下载 blob,以便 AzCopy 尝试下载源 blob 及其所有快照。尽管下载源 blob 可能会失败并显示 412(先决条件失败),但可以成功下载快照。下载快照的文件名为:{不带扩展名的 blob 名称}({快照时间戳})。{扩展名}。
有关AzCopy 和选项/Snapshot 的更多信息,请参阅Getting Started with the AzCopy Command-Line Utility。
一些更新:
您是否终止了 AzCopy,然后使用同一命令行恢复它?如果是这样,您需要确保源 blob 在上一次执行 AzCopy 后没有更改,因为 AzCopy 必须确保源 blob 在 AzCopy 首次下载它和源 blob 下载成功之间的时间段内保持不变。为了检查是否发生恢复,您可以检查 AzCopy 的输出是否包含 "Incomplete operation with same command line detected at the journal directory {Dir Path}, AzCopy will start to resume.".
因为在您的命令行中指定了 /Y,所以将始终回答恢复提示 "Yes"。为避免恢复行为,您可以在执行 AzCopy 之前清理默认日志文件夹“%LocalAppData%\Microsoft\Azure\AzCopy”,或指定 /Z: 为每次执行配置一个唯一的日志文件夹。
我有一个 PowerShell 脚本,它在 HDinsight 上使用配置单元创建一些输出。输出放在本地 blob 中,然后我使用 AzCopy 将其复制到本地计算机。我经常这样做以获得我需要的各种数据,经常多次调用该脚本。问题是在某些时候 AzCopy
出错并显示消息 "The condition specified using HTTP conditional headers(s) is not met.",但这是在多次成功迭代之后。
我不确定这意味着什么,fiddler 成绩单也没有多大帮助。我尝试删除文件并重复 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 读取数据时将 ETag 源 blob 传递到 HTTP header "If-Match"。因此 HTTP 状态代码 412(前提条件失败)"The condition specified using HTTP conditional headers(s) is not met." 仅表示 您的 blob 在 AzCopy 下载它们时被更改。
请避免在下载时更改源 blob。如果您必须同时更改源 blob,可以尝试以下解决方法:
首先拍摄源 blob 的快照,然后使用 AzCopy(指定 /Snapshot 选项)下载 blob,以便 AzCopy 尝试下载源 blob 及其所有快照。尽管下载源 blob 可能会失败并显示 412(先决条件失败),但可以成功下载快照。下载快照的文件名为:{不带扩展名的 blob 名称}({快照时间戳})。{扩展名}。
有关AzCopy 和选项/Snapshot 的更多信息,请参阅Getting Started with the AzCopy Command-Line Utility。
一些更新:
您是否终止了 AzCopy,然后使用同一命令行恢复它?如果是这样,您需要确保源 blob 在上一次执行 AzCopy 后没有更改,因为 AzCopy 必须确保源 blob 在 AzCopy 首次下载它和源 blob 下载成功之间的时间段内保持不变。为了检查是否发生恢复,您可以检查 AzCopy 的输出是否包含 "Incomplete operation with same command line detected at the journal directory {Dir Path}, AzCopy will start to resume.".
因为在您的命令行中指定了 /Y,所以将始终回答恢复提示 "Yes"。为避免恢复行为,您可以在执行 AzCopy 之前清理默认日志文件夹“%LocalAppData%\Microsoft\Azure\AzCopy”,或指定 /Z: 为每次执行配置一个唯一的日志文件夹。