2013-01-02 5 views
3

Я периодически загружать файл на AWS ледник, используя Boto следующим образом:Boto Glacier - Загрузить файл размером более 4 ГБ с помощью многослойных загрузок

# Import boto's layer2 
import boto.glacier.layer2 

# Create a Layer2 object to connect to Glacier 
l = boto.glacier.layer2.Layer2(aws_access_key_id=awsAccess, aws_secret_access_key=awsSecret) 

# Get a vault based on vault name (assuming you created it already) 
v = l.get_vault(vaultName) 

# Create an archive from a local file on the vault 
archiveID = v.create_archive_from_file(fileName) 

Однако это не удается для файлов, размер которых превышает 4 Гб.

Я предполагаю, что это связано с тем, что, как указано в Amazon Glacier FAQ: «Самый большой архив, который может быть загружен в один запрос на загрузку, составляет 4 гигабайта. Для элементов размером более 100 мегабайт клиентам следует рассмотреть возможность использования возможности загрузки Multipart «.

Как использовать возможность многоточечной загрузки с помощью boto и AWS Glacier?

+0

Эти команды содержатся в оболочке Python справа? Если да, как мне сделать последний шаг? '' 'Filename''' должен содержать путь и фактическое имя файла? Благодаря! – user3768495

+0

Да, это в оболочке Python, используя библиотеку boto. Обратите внимание, что это код с 2013 года - возможно, с тех пор библиотека изменилась. Я думаю, что «filename» должен быть абсолютным/полным путем, но, пожалуйста, проверьте его. – Suman

ответ

2

Amazon Glacier использует термин «архив» для описания файлов. Другими словами, вы не можете загрузить файл размером более 4 ГБ на ледник. Если вы хотите попробовать многосекционный загрузчик в любом случае, смотреть на vault.concurrent_create_archive_from_file или vault.create_archive_writer

+0

Спасибо! Позвольте мне попробовать concurrent_create_archive_from_file() и вернуться к вам. – Suman

+0

concurrent_create_archive_from_file() работал отлично. Благодаря! – Suman

+1

Фактически 4 ГБ - максимальная загрузка за одну операцию. В леднике вы можете архивировать до 40 ТБ, выполняя 10 000 многостраничных загрузок 4 ГБ. –

1

glacier docs четко указано:

В зависимости от размера данных, которые вы загружаете, Amazon Glacier предлагает следующее варианты:

  • Загрузить архивы в одной операции -В одной операции, вы можете загружать архивы от 1 байта до до 4 ГБ. Тем не менее, мы, , рекомендуем клиентам Amazon Glacier использовать Multipart Upload для загрузки архивов размером более 100 МБ.

  • Загрузите архивы на части. Используя API загрузки Multipart, вы можете загружать большие архивы размером до 40 000 ГБ (10 000 * 4 ГБ).

    Вызов API многостраничной загрузки предназначен для улучшения загрузки для больших архивов. Вы можете загружать архивы по частям. Эти части могут быть загружены независимо, в любом порядке и параллельно. Если загрузка детали не удалась, вам нужно снова загрузить эту часть, а не весь архив. Вы можете использовать Multipart Upload для архивов от 1 байт до 40 000 ГБ.

В boto слое 2 это означает, что вы должны использовать один из следующих методов из boto.glacier.vault.Vault

  • concurrent_create_archive_from_file
  • create_archive_writer
  • upload_archive
1

Я просто посмотрел в источники и кажется, что boto.glacier.vault.Vault.upload_archive() делает всю магию автоматически:

Добавляет архив в хранилище. Для архивов размером более 100 МБ будет использоваться многостраничная загрузка.