Мне нужно скопировать 400 ГБ файлов с тома хранилища эластичных блоков в корзину s3 ... Это около 300 тыс. Файлов размером ~ 1 МБ
я пробовал s3cmd и s3fuse, оба они действительно очень медленные ... s3cmd работал целый день, сказал, что закончил копирование, и когда я проверил ведро, ничего не произошло (я полагаю, что что-то пошло не так, но по крайней мере s3cmd никогда ни на что не жаловался)
S3Fuse работает целый день и скопировал менее 10% файлов ...
Есть ли лучшее решение для этого?
Конечно, я использую Linux (ubuntu 12.04)
Есть несколько ключевых факторов, которые определяют пропускную способность от EC2 до S3:
В случаях передачи больших объемов данных может оказаться экономически целесообразным использовать экземпляр вычислительного кластера, так как эффективный выигрыш в пропускной способности (> 10x) превышает разницу в стоимости (2-3x).
Хотя приведенные выше идеи довольно логичны (хотя ограничение на поток может и не быть), довольно легко найти тесты, подтверждающие их. Один особенно подробный можно найти Вот.
Использование от 64 до 128 параллельных (одновременных) загрузок объектов размером 1 МБ должно насыщать восходящий канал 1 Гбит / с, который имеет m1.xlarge, и даже должен насыщать восходящий канал 10 Гбит / с экземпляра кластерных вычислений (cc1.4xlarge).
Хотя изменить размер экземпляра довольно просто, двумя другими факторами может быть сложнее управлять.
Итак, после долгих испытаний s3-параллельно-положить сделал трюк потрясающе. Очевидно, решение, если вам нужно загрузить много файлов на S3. Благодаря cyberx86 за комментарии.
Настройте значения конфигурации AWS CLI S3 в соответствии с http://docs.aws.amazon.com/cli/latest/topic/s3-config.html.
Ниже приведено увеличение скорости синхронизации S3 как минимум в 8 раз!
Пример:
$ more ~/.aws/config
[default]
aws_access_key_id=foo
aws_secret_access_key=bar
s3 =
max_concurrent_requests = 100
max_queue_size = 30000
Я написал оптимизированное консольное приложение на C # (CopyFasterToS3) сделать это. Я использовал в EBS vol, в моем случае у него было 5 папок с более чем 2 миллионами файлов в размере 20 ГБ. Скрипт выполнен менее чем за 30 минут.
В Эта статья Я показал, как использовать рекурсивную функцию с параллельным. Вы можете перевести его на другой язык.
Удачи!
А также есть: s3funnel, который кажется очень старым (2008 г.) и некоторыми открытыми ошибками, но все еще перечислен на самом Amazon: amzn-lnk
Попробуйте вместо этого s4cmd, он действительно быстрее, чем s3cmd. Его адрес: https://github.com/bloomreach/s4cmd
Попробуйте использовать s3-cli вместо s3cmd. Я использовал его вместо s3cmd для загрузки файлов в свою корзину s3, и это ускорило развертывание почти на 17 минут (с 21 до 4 минут)!
Вот ссылка: https://github.com/andrewrk/node-s3-cli
Еще один хороший вариант - пик /s5cmd:
При загрузке s5cmd в 32 раза быстрее, чем s3cmd, и в 12 раз быстрее, чем aws-cli. Для загрузок s5cmd может загружать канал 40 Гбит / с (~ 4,3 ГБ / с), тогда как s3cmd и aws-cli могут достигать только 85 МБ / с и 375 МБ / с соответственно.