Herunterladen eines großen Datensatzes im Web direkt in AWS S3
Frage
Weiß jemand, ob es möglich ist, einen großen Datensatz in Amazon S3 aus einer URL zu importieren?
Grundsätzlich möchte ich es vermeiden, eine riesige Datei herunterzuladen und sie dann über das Webportal auf S3 zu beladen. Ich möchte nur die Download -URL an S3 zur Verfügung stellen und darauf warten, dass sie sie in ihr Dateisystem herunterladen. Es scheint eine einfache Sache zu tun, aber ich kann die Dokumentation einfach nicht finden.
Lösung
Da Sie offensichtlich ein AWS -Konto besitzen, würde ich Folgendes empfehlen:
- Erstellen Sie eine EC2 -Instanz (jede Größe)
- Verwenden wget(oder locken), um die Datei (en) zu dieser EC2 -Instanz abzurufen. Zum Beispiel:
wget http://example.com/my_large_file.csv
. - Installieren s3cmd
- Verwenden
s3cmd
So laden Sie die Datei auf S3 hoch. Zum Beispiel:s3cmd cp my_large_file.csv s3://my.bucket/my_large_file.csv
Da Verbindungen zwischen verschiedenen AWS -Diensten hergestellt wurden, nutzen Sie das interne Netzwerk von AWS, und das Hochladen von einer EC2 -Instanz zu S3 ist ziemlich schnell. Viel schneller als das Hochladen von Ihrem eigenen Computer. Auf diese Weise können Sie vermeiden, die Datei auf Ihren Computer herunterzuladen und potenziell erhebliche Zeit zu speichern, das sie über die Weboberfläche hochladen kann.
Andere Tipps
Starten Sie eine EC2 -Instanz mit ausreichend Speicherplatz
SSH zur Instanz
Rufen Sie den Befehl curl ab, der dem Download von Ihrem lokalen Computer entspricht. Sie können die Entwickleroptionen in Google Chrome -> Registerkarte Netzwerk -> kopieren -> als Curl kopieren (dieser Schritt ist für einige Websites erforderlich, für die Authentifizierung wie Kaggle erforderlich ist).
Führen Sie die Instanzterminal aus
curl
Befehl (anhängen-o output_file
zum Befehl). Dadurch wird die Datei heruntergeladen und gespeichertKonfigurieren Sie AWS -Anmeldeinformationen, um die Instanz mit S3 zu verbinden (eine Möglichkeit besteht darin, den Befehl zu verwenden
aws config
, geben Sie AWS Access Key ID und Geheimnis an).Verwenden Sie diesen Befehl, um die Datei auf S3 hochzuladen:
aws s3 cp path-to-file s3://bucket-name/
Siehe AWS -Dokumentation: http://aws.amazon.com/code Für die meisten Programmiersprachen stehen Bibliotheken zur Verfügung. Sie können also einen Eimer erstellen und in Ihrem Code konfigurieren, um Daten von der URL abzurufen und in diesen Eimer in S3 zu schreiben
für zB in Python:
from boto.s3.key import Key
k = Key(bucket)
k.key = 'foobar'
k.set_contents_from_string(url_data)
Sie können Ihren S3 -Bucket an der EC2 -Instanz und anschließend an den/path/to/s3_mounted_on_a_Folder montieren. Dort können Sie einfach den Befehl verwenden:
wget https://your.download.url/
Verwenden Sie S3Fs, um S3 zu Ihrem EC2 zu montieren.