3

HDinsight でハイブを使用して出力を作成する PowerShell スクリプトがあります。出力はローカル BLOB に配置され、AzCopy を使用してローカル コンピューターにコピーします。必要なさまざまなデータを取得するためにこれを頻繁に行い、多くの場合、そのスクリプトを複数回呼び出します。問題は、ある時点でAzCopy「HTTP 条件付きヘッダーを使用して指定された条件が満たされていない」というメッセージでエラーが発生することですが、これは何度も繰り返し成功した後です。

これが何を意味するのかよくわかりませんし、フィドラーのトランスクリプトもあまり役に立ちませんでした。ファイルを削除して繰り返してみましたが、エラーが持続したため、 httpセッションAzCopyと関係がある可能性があります。AzCopy誰でも私を啓発できますか?

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 (Precondition Failed) 「HTTP 条件付きヘッダーを使用して指定された条件が満たされていません。」ただ、AzCopy が BLOB をダウンロードしている間に BLOB が変更されていたことを意味します

ダウンロード中にソース BLOB を変更しないでください。ソース BLOB を同時に変更する必要がある場合は、次の回避策を試すことができます。

最初にソース BLOB のスナップショットを取得し、次に AzCopy (/Snapshot オプションを指定) を使用して BLOB をダウンロードします。これにより、AzCopy はソース BLOB とそのすべてのスナップショットをダウンロードしようとします。ソース BLOB のダウンロードは 412 (Precondition Fail) で失敗する場合がありますが、スナップショットのダウンロードは成功する可能性があります。ダウンロードされたスナップショットのファイル名は、{拡張子のないブロブ名} ({スナップショットのタイムスタンプ}).{拡張子} です。

AzCopy とオプション /Snapshot の詳細については、「AzCopy コマンド ライン ユーティリティの概要」を参照してください。

いくつかの更新:

AzCopy を終了してから、同じコマンド ラインで再開しましたか? その場合、AzCopy が最初にダウンロードしてからソース BLOB が正常にダウンロードされるまでの間、AzCopy はソース BLOB が変更されていないことを確認する必要があるため、AzCopy の前回の実行後にソース BLOB が変更されていないことを確認する必要があります。再開が発生するかどうかを確認するには、AzCopy の出力に「ジャーナル ディレクトリ {Dir Path} で検出された同じコマンド ラインによる不完全な操作、AzCopy の再開が開始されます。」が含まれているかどうかを確認できます。

コマンド ラインで /Y が指定されているため、再開プロンプトには常に「はい」と応答します。動作の再開を回避するには、AzCopy を実行する前に既定のジャーナル フォルダー "%LocalAppData%\Microsoft\Azure\AzCopy" をクリーンアップするか、/Z: を指定して実行ごとに一意のジャーナル フォルダーを構成します。

于 2015-05-11T02:33:28.183 に答える