Download di un set di dati di grandi dimensioni sul Web direttamente in AWS S3


12

Qualcuno sa se è possibile importare un set di dati di grandi dimensioni in Amazon S3 da un URL?

Fondamentalmente, voglio evitare di scaricare un file enorme e quindi ricaricarlo su S3 attraverso il portale web. Voglio solo fornire l'URL di download a S3 e aspettare che lo scarichino nel loro filesystem. Sembra una cosa facile da fare, ma non riesco proprio a trovare la documentazione.


Ottima domanda
Pramit

Risposte:


10

Dal momento che possiedi ovviamente un account AWS, ti consigliamo di:

  • Crea un'istanza EC2 (qualsiasi dimensione)
  • Usa wget (o curl) per recuperare i file a quell'istanza EC2. Ad esempio: wget http://example.com/my_large_file.csv.
  • Installa s3cmd
  • Utilizzare s3cmdper caricare il file su S3. Per esempio:s3cmd cp my_large_file.csv s3://my.bucket/my_large_file.csv

Poiché le connessioni effettuate tra vari servizi AWS sfruttano la rete interna di AWS, il caricamento da un'istanza EC2 a S3 è piuttosto veloce. Molto più veloce di caricarlo dal tuo computer. In questo modo è possibile evitare di scaricare il file sul computer e risparmiare tempo potenzialmente significativo caricandolo tramite l'interfaccia Web.


Grazie. Stavo contemplando qualcosa del genere, ma volevo chiedere in giro per vedere se c'era un modo più semplice. Grazie per aver sottolineato anche tutti i passaggi. Molto utile
Will Stedden il

@Daniel Zohar Cosa succede se l'URL è dinamico? L'uso di wget non scarica il file ma solo la pagina con questo link: cms.unov.org/UNCorpus/en/Download?file=UNv1.0.en-zh.tar.gz.00
echan00

3
  1. Avviare un'istanza EC2 con memoria sufficiente

  2. ssh all'istanza

  3. Ottieni il comando arricciatura corrispondente al download dal tuo computer locale. Puoi utilizzare le opzioni per gli sviluppatori in Google Chrome -> scheda di rete -> copia -> copia come arricciatura (questo passaggio è necessario per alcuni siti Web che richiedono l'autenticazione come Kaggle)

  4. Dal terminale dell'istanza, eseguire il curlcomando (aggiungi -o output_fileal comando). Questo scaricherà e salverà il file

  5. Configura le credenziali aws per connettere l'istanza a s3 (un modo è usare il comando aws config, fornire ID chiave di accesso AWS e segreto),

  6. Utilizzare questo comando per caricare il file su s3:

    aws s3 cp path-to-file s3://bucket-name/
    

2

Consultare la documentazione di Aws: http://aws.amazon.com/code ci sono librerie disponibili per la maggior parte delle lingue di programmazione. Quindi puoi creare un bucket e configurare nel tuo codice per recuperare i dati dall'URL e scrivere su questo bucket in s3

per esempio in Python:

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

Rif: https://boto.readthedocs.org/en/latest/s3_tut.html


Non penso sia giusto. Non sono abbastanza chiaro da dove verrebbe l'url_data. Dalla documentazione, k.set_contents_from_string () sembra letteralmente impostare il contenuto del file 'foobar' su qualunque cosa sia contenuta in quella stringa. Voglio che il contenuto di quell'URL venga trasferito direttamente su s3 senza che sia necessario scaricarlo localmente.
Will Stedden,

1

Puoi montare il tuo bucket s3 sull'istanza ec2 e quindi cd nella cartella / path / to / s3_mounted_on_a_a, lì puoi semplicemente usare il comando:

wget https://your.download.url/

per montare s3 sul tuo ec2, usa s3fs.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.