Pobieranie dużego zestawu danych z Internetu bezpośrednio do AWS S3


12

Czy ktoś wie, czy można zaimportować duży zestaw danych do Amazon S3 z adresu URL?

Zasadniczo chcę uniknąć pobierania dużego pliku, a następnie ponownego ładowania go do S3 za pośrednictwem portalu internetowego. Chcę tylko podać adres URL pobierania do S3 i poczekać, aż ściągną go do swojego systemu plików. Wydaje się to łatwe, ale po prostu nie mogę znaleźć dokumentacji na ten temat.


Świetne pytanie.
Pramit

Odpowiedzi:


10

Ponieważ oczywiście masz konto AWS, polecam następujące rzeczy:

  • Utwórz instancję EC2 (dowolny rozmiar)
  • Użyj wget (lub curl), aby pobrać plik (i) do tej instancji EC2. Na przykład: wget http://example.com/my_large_file.csv.
  • Zainstaluj s3cmd
  • Użyj, s3cmdaby przesłać plik do S3. Na przykład:s3cmd cp my_large_file.csv s3://my.bucket/my_large_file.csv

Ponieważ połączenia między różnymi usługami AWS wykorzystują wewnętrzną sieć AWS, przesyłanie z instancji EC2 do S3 jest dość szybkie. Znacznie szybciej niż przesyłanie go z własnego komputera. W ten sposób można uniknąć pobierania pliku na komputer i zaoszczędzenia potencjalnie znacznego czasu na przesyłaniu go przez interfejs sieciowy.


Dziękuję Ci. Zastanawiałem się nad czymś takim, ale chciałem zapytać, czy istnieje łatwiejszy sposób. Dziękujemy za wskazanie wszystkich kroków. Bardzo pomocny
Will Stedden

@Daniel Zohar Co jeśli URL jest dynamiczny? Korzystanie z wget nie powoduje pobrania pliku, a jedynie stronę z tym linkiem: cms.unov.org/UNCorpus/en/Download?file=UNv1.0.en-zh.tar.gz.00
echan00

3
  1. Uruchom instancję EC2 z wystarczającą ilością pamięci

  2. ssh do instancji

  3. Uzyskaj polecenie curl odpowiadające pobieraniu z komputera lokalnego. Możesz użyć opcji programisty w Google Chrome -> karta sieci -> kopiuj -> kopiuj jako curl (ten krok jest konieczny w przypadku niektórych stron internetowych wymagających uwierzytelnienia, takich jak Kaggle)

  4. Z terminalu instancji uruchom curlpolecenie (dołącz -o output_filedo polecenia). Spowoduje to pobranie i zapisanie pliku

  5. Skonfiguruj poświadczenia aws, aby połączyć instancję z s3 (jednym ze sposobów jest użycie komendy aws config, podanie identyfikatora i klucza dostępu AWS oraz klucza tajnego),

  6. Użyj tego polecenia, aby przesłać plik do s3:

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

2

Odwołaj się do dokumentacji Aws: http://aws.amazon.com/code dostępne są biblioteki dla większości języków programowania. Możesz więc utworzyć segment i skonfigurować w kodzie pobieranie danych z adresu URL i zapisywanie w tym segmencie w s3

na przykład w python:

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

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


Nie sądzę, żeby to było całkiem właściwe. Nie jestem pewien, skąd miałaby pochodzić url_data. Z dokumentacji wydaje się, że k.set_contents_from_string () dosłownie ustawia zawartość pliku „foobar” na cokolwiek zawartego w tym ciągu. Chcę, aby zawartość tego adresu URL była przekazywana bezpośrednio do s3 bez konieczności pobierania lokalnego.
Will Stedden,

1

Możesz zamontować wiadro s3 do instancji ec2, a następnie cd do folderu / path / to / s3_mounted_on_a_folder, tam możesz po prostu użyć polecenia:

wget https://your.download.url/

aby zamontować s3 na swoim ec2, użyj s3fs.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.