Если у меня есть каталог с ~ 5000 небольших файлов на S3, есть ли способ легко заархивировать весь каталог и оставить полученный zip-файл на S3? Мне нужно сделать это без необходимости вручную обращаться к каждому файлу.
Спасибо!
Если у меня есть каталог с ~ 5000 небольших файлов на S3, есть ли способ легко заархивировать весь каталог и оставить полученный zip-файл на S3? Мне нужно сделать это без необходимости вручную обращаться к каждому файлу.
Спасибо!
Нет, волшебной пули не существует.
(Кроме того, вы должны понимать, что в S3 нет такого понятия, как «каталог». Есть только объекты с путями. можете получить префиксы любым символом, который вы хотите.)
Как кто-то указал, их «предварительное архивирование» может помочь как в скорости загрузки, так и в скорости добавления. (За счет дублирования хранилища.)
Если загрузка является узким местом, похоже, вы загружаете последовательно. S3 может поддерживать 1000 одновременных подключений к одному и тому же объекту без особых усилий. Вам нужно будет запустить тесты, чтобы увидеть, какое количество соединений является лучшим, поскольку слишком много соединений с одного устройства может быть ограничено S3. Кроме того, вам может потребоваться настройка TCP при выполнении тысяч подключений в секунду.
«Решение» сильно зависит от ваших шаблонов доступа к данным. Попробуйте переформулировать задачу. Если ваши загрузки одного файла происходят нечасто, возможно, имеет смысл сгруппировать их по 100 за раз в S3, а затем разбивать их по запросу. Если это небольшие файлы, может иметь смысл кэшировать их в файловой системе.
Или может иметь смысл хранить все 5000 файлов в виде одного большого zip-файла в S3 и использовать «умный клиент», который может загружать определенные диапазоны zip-файла для обслуживания отдельных файлов. (Насколько я помню, S3 поддерживает диапазоны байтов.)
s3distcp
для копирования всего, но это все еще безумно медленно. Я переосмыслю платформу и, возможно, объединим все файлы вместе, а затем отправлю их на S3 (вероятно, это также улучшит производительность EMR). Спасибо за понимание!
- person Jin; 04.05.2013
Я согласен с ответом @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