Загрузка большого набора данных в Интернете непосредственно в AWS S3

12

Кто-нибудь знает, возможно ли импортировать большой набор данных в Amazon S3 с URL?

По сути, я хочу избежать загрузки огромного файла и последующей его загрузки на S3 через веб-портал. Я просто хочу указать URL-адрес загрузки для S3 и подождать, пока они загрузят его в свою файловую систему. Это кажется легким делом, но я просто не могу найти документацию по нему.

Будет Stedden
источник
Отличный вопрос
Прамит

Ответы:

10

Так как вы, очевидно, обладают AWS AN счета, я бы рекомендовал следующее:

  • Создать экземпляр EC2 (любой размер)
  • Использование Wget (или скручивание) для извлечения файла (ов) к этому экземпляру EC2. Например: wget http://example.com/my_large_file.csv.
  • Установить s3cmd
  • Используйте s3cmdдля загрузки файла на S3. Например:s3cmd cp my_large_file.csv s3://my.bucket/my_large_file.csv

Поскольку соединения между внутренней сетью различных AWS услуг используются AWS игровой, загружая из экземпляра EC2 к S3 довольно быстро. Гораздо быстрее, чем загрузить его со своего компьютера. Этот способ позволяет избежать загрузки файла на компьютер и сэкономить потенциально значительное время, загружая его через веб-интерфейс.

Даниэль Зохар
источник
Спасибо. Я размышлял о чем-то подобном, но я хотел спросить, есть ли более легкий путь. Спасибо за указание всех шагов тоже. Очень полезно
Уилл Stedden
@Daniel Zohar Что делать, если URL-адрес является динамическим? Использование wget не загружает файл, а только страницу с этой ссылкой: cms.unov.org/UNCorpus/en/Download?file=UNv1.0.en-zh.tar.gz.00
echan00
3
  1. Запустите экземпляр EC2 с достаточным объемом памяти

  2. SSH к экземпляру

  3. Получите команду curl, соответствующую загрузке с вашего локального компьютера. Вы можете использовать параметры разработчика в Google Chrome -> вкладка сети -> копировать -> копировать как curl (этот шаг необходим для некоторых веб-сайтов, требующих аутентификации, таких как kaggle)

  4. В терминале экземпляра выполните curlкоманду (добавьте -o output_fileк команде). Это загрузит и сохранит файл

  5. Сконфигурируйте учетные данные aws для подключения экземпляра к s3 (одним из способов является использование команды aws config, предоставление идентификатора и секретного ключа доступа AWS),

  6. Используйте эту команду для загрузки файла в s3:

    aws s3 cp path-to-file s3://bucket-name/
    
MNassar
источник
2

Обратитесь к документации Aws: http://aws.amazon.com/code. Есть библиотеки, доступные для большинства языков программирования. Таким образом, вы можете создать контейнер и настроить его в своем коде для извлечения данных из URL и записи в этот контейнер в s3.

Например, в Python:

from boto.s3.key import Key
k = Key(bucket)
k.key = 'foobar'
k.set_contents_from_string(url_data)

Ссылка: https://boto.readthedocs.org/en/latest/s3_tut.html

Sreejithc321
источник
Я не думаю, что это совершенно правильно. Мне немного неясно, откуда будет url_data. Судя по документации, k.set_contents_from_string () буквально устанавливает содержимое файла 'foobar' на то, что содержится в этой строке. Я хочу, чтобы содержимое по этому URL-адресу было отправлено непосредственно на s3 без необходимости локальной загрузки.
Уилл Стедден
1

Вы можете смонтировать ваш s3 bucket на экземпляр ec2, а затем перейти к / path / to / s3_mounting_on_a_folder, там вы можете просто использовать команду:

wget https://your.download.url/

чтобы смонтировать s3 в ec2, используйте s3fs.

Танмай Гаутам
источник