Заархивируйте весь каталог на S3

Если у меня есть каталог с ~ 5000 небольших файлов на S3, есть ли способ легко заархивировать весь каталог и оставить полученный zip-файл на S3? Мне нужно сделать это без необходимости вручную обращаться к каждому файлу.

Спасибо!


person Jin    schedule 03.05.2013    source источник
comment
w2lessons.com/2012/01/fast-zipping- in-amazon-s3.html   -  person Christian Stewart    schedule 04.05.2013
comment
я это видел, но для этого по-прежнему требуется загружать каждый файл отдельно на ec2, что в настоящее время является нашим узким местом.   -  person Jin    schedule 04.05.2013


Ответы (2)


Нет, волшебной пули не существует.

(Кроме того, вы должны понимать, что в S3 нет такого понятия, как «каталог». Есть только объекты с путями. можете получить префиксы любым символом, который вы хотите.)

Как кто-то указал, их «предварительное архивирование» может помочь как в скорости загрузки, так и в скорости добавления. (За счет дублирования хранилища.)

Если загрузка является узким местом, похоже, вы загружаете последовательно. S3 может поддерживать 1000 одновременных подключений к одному и тому же объекту без особых усилий. Вам нужно будет запустить тесты, чтобы увидеть, какое количество соединений является лучшим, поскольку слишком много соединений с одного устройства может быть ограничено S3. Кроме того, вам может потребоваться настройка TCP при выполнении тысяч подключений в секунду.

«Решение» сильно зависит от ваших шаблонов доступа к данным. Попробуйте переформулировать задачу. Если ваши загрузки одного файла происходят нечасто, возможно, имеет смысл сгруппировать их по 100 за раз в S3, а затем разбивать их по запросу. Если это небольшие файлы, может иметь смысл кэшировать их в файловой системе.

Или может иметь смысл хранить все 5000 файлов в виде одного большого zip-файла в S3 и использовать «умный клиент», который может загружать определенные диапазоны zip-файла для обслуживания отдельных файлов. (Насколько я помню, S3 поддерживает диапазоны байтов.)

person BraveNewCurrency    schedule 03.05.2013
comment
Ясно.. Я так и думал. На самом деле нашим узким местом является то, что EMR снова и снова обращается к S3 для этих файлов. Мы пытались использовать s3distcp для копирования всего, но это все еще безумно медленно. Я переосмыслю платформу и, возможно, объединим все файлы вместе, а затем отправлю их на S3 (вероятно, это также улучшит производительность EMR). Спасибо за понимание! - person Jin; 04.05.2013
comment
Это такое обычное дело. Жаль, что никто еще не поделился своим решением публично, и всем приходится заново изобретать велосипед. - person Andrew Savinykh; 30.07.2014

Я согласен с ответом @BraveNewCurrency.
Вам понадобится собственный сервер, чтобы сделать это эффективно, поскольку AWS S3 — это просто хранилище ключей и значений в реальном смысле.
Инструменты командной строки не будут работать, так как есть слишком много файлов и аргументов.

Однако у вас есть некоторые опции, которые могут быть не такими бесплатными или простыми в настройке.

ПЛАТНЫЕ ВАРИАНТЫ
На самом деле я участвую в дешевом коммерческом проекте, который просто делает это. Они предоставляют как API, так и возможность запуска собственного предварительно настроенного сервера Zipper EC2.
https://s3zipper.com/
https://docs.s3zipper.com/

Крупные миграции (в масштабе терабайт-›петабайт)
AWS Snowball

БЕСПЛАТНЫЕ ВАРИАНТЫ
Вы также можете создавать свои собственные серверы, используя следующие бесплатные пакеты (JavaScript и Go(Golang)):
https://github.com/orangewise/s3-zip
https://github.com/DanielHindi/aws-s3-zipper
https://github.com/Teamwork/s3zipper

person Edwinner    schedule 22.10.2018