Синхронизация ADLS с хранилищем Azure с помощью AzCopy

Ищу помощь в устранении ошибок, с которыми я сталкиваюсь. Позвольте мне объяснить сценарий. Я пытаюсь синхронизировать один из контейнеров ADLS Gen2 с хранилищем BLOB-объектов Azure. У меня AzCopy 10.4.3, для этого я использую Azcopy Sync. Я использую команду ниже

azcopy sync 'https://ADLSGen2.blob.core.windows.net/testsamplefiles/SAMPLE' 'https://AzureBlobStorage.blob.core.windows.net/testsamplefiles/SAMPLE' --recursive

Когда я запускаю эту команду, я получаю ошибку ниже

REQUEST/RESPONSE (Try=1/71.0063ms, OpTime=110.9373ms) -- RESPONSE SUCCESSFULLY RECEIVED
   PUT https://AzureBlobStorage.blob.core.windows.net/testsamplefiles/SAMPLE/SampleFile.parquet?blockid=ZDQ0ODlkYzItN2N2QzOWJm&comp=block&timeout=901
   X-Ms-Request-Id: [378ca837-d01e-0031-4f48-34cfc2000000]

ERR: [P#0-T#0] COPYFAILED: https://ADLSGen2.blob.core.windows.net/testsamplefiles/SAMPLE/SampleFile.parquet: 404 : 404 The specified resource does not exist.. When Staging block from URL. X-Ms-Request-Id: [378ca837-d01e-0031-4f48-34cfc2000000]

   Dst: https://AzureBlobStorage.blob.core.windows.net/testsamplefiles/SAMPLE/SampleFile.parquet
REQUEST/RESPONSE (Try=1/22.9854ms, OpTime=22.9854ms) -- RESPONSE SUCCESSFULLY RECEIVED
   GET https://AzureBlobStorage.blob.core.windows.net/testsamplefiles/SAMPLE/SampleFile.parquet?blocklisttype=all&comp=blocklist&timeout=31
   X-Ms-Request-Id: [378ca84e-d01e-0031-6148-34cfc2000000]

Пока я проверил и убедился, что ниже

  • Я вошел в правильный клиент при входе в AzCopy
  • Storage Blob Data Contributor роль была предоставлена ​​моим учетным данным AD

Не уверен, что еще мне не хватает, поскольку файл существует в источнике, и я получаю ту же ошибку. Я пробовал использовать SAS, но получил другую ошибку. Я не могу продолжить использование SAS из-за политики поставщика, поэтому мне нужно убедиться, что он работает с oAuth. Любые входы действительно приветствуются.


person VidhyaSagar    schedule 28.05.2020    source источник


Ответы (1)


Для ошибки 404 вы можете проверить, есть ли опечатка в команде и существует ли путь /testsamplefiles/SAMPLE как в исходной, так и в целевой учетной записи. Также обратите внимание, что из советов .

Используйте одинарные кавычки во всех командных оболочках, кроме командной оболочки Windows (cmd.exe). Если вы используете командную оболочку Windows (cmd.exe), заключите аргументы пути в двойные кавычки ("") вместо одинарных кавычек ('').

Из поддерживаемого сценария azcopy sync:

BLOB-объект Azure ‹-> BLOB-объект Azure (источник должен включать SAS или быть общедоступным; в качестве пункта назначения можно использовать аутентификацию SAS или OAuth)

Мы должны включить в источник токен SAS, но я попробовал приведенный ниже код с аутентификацией AD.

azcopy sync "https://[account].blob.core.windows.net/[container]/[path/to/blob]?[SAS]" "https://[account].blob.core.windows.net/[container]/[path/to/blob]" 

но получил ту же ошибку 400, что и проблема Github.

Таким образом, в этом случае после моей проверки вы можете использовать эту команду для синхронизации одного из контейнеров ADLS Gen2 с хранилищем BLOB-объектов Azure без выполнения azcopy login. Если у вас есть логин, вы можете запустить azcopy logout.

azcopy sync "https://nancydl.blob.core.windows.net/container1/sample?sv=xxx" "https://nancytestdiag244.blob.core.windows.net/container1/sample?sv=xxx" --recursive --s2s-preserve-access-tier=false

введите здесь описание изображения

person Nancy Xiong    schedule 02.06.2020