Descargar un gran conjunto de datos en la web directamente en AWS S3


12

¿Alguien sabe si es posible importar un gran conjunto de datos a Amazon S3 desde una URL?

Básicamente, quiero evitar descargar un archivo enorme y luego volver a cargarlo en S3 a través del portal web. Solo quiero proporcionar la URL de descarga a S3 y esperar a que la descarguen en su sistema de archivos. Parece una cosa fácil de hacer, pero simplemente no puedo encontrar la documentación.


Gran pregunta
Pramit

Respuestas:


10

Como obviamente posee una cuenta de AWS, le recomiendo lo siguiente:

  • Crear una instancia EC2 (cualquier tamaño)
  • Use wget (o curl) para buscar los archivos en esa instancia EC2. Por ejemplo: wget http://example.com/my_large_file.csv.
  • Instalar s3cmd
  • Use s3cmdpara cargar el archivo a S3. Por ejemplo:s3cmd cp my_large_file.csv s3://my.bucket/my_large_file.csv

Dado que las conexiones realizadas entre varios servicios de AWS aprovechan la red interna de AWS, la carga de una instancia de EC2 a S3 es bastante rápida. Mucho más rápido que cargarlo desde su propia computadora. De esta manera, puede evitar descargar el archivo a su computadora y ahorrar tiempo potencialmente significativo al cargarlo a través de la interfaz web.


Gracias. Estaba contemplando algo como esto, pero quería preguntar para ver si había una manera más fácil. Gracias por señalar todos los pasos también. Muy útil
Will Stedden

@Daniel Zohar ¿Qué pasa si la URL es dinámica? El uso de wget no descarga el archivo, sino solo la página con este enlace: cms.unov.org/UNCorpus/en/Download?file=UNv1.0.en-zh.tar.gz.00
echan00

3
  1. Inicie una instancia de EC2 con suficiente almacenamiento

  2. ssh a la instancia

  3. Obtenga el comando curl correspondiente a la descarga desde su máquina local. Puede usar las opciones de desarrollador en Google Chrome -> pestaña de red -> copiar -> copiar como curl (este paso es necesario para algunos sitios web que requieren autenticación como kaggle)

  4. Desde el terminal de la instancia, ejecute el curlcomando (agregar -o output_fileal comando). Esto descargará y guardará el archivo

  5. Configure las credenciales aws para conectar la instancia a s3 (una forma es usar el comando aws config, proporcionar el ID y el secreto de la clave de acceso de AWS),

  6. Use este comando para cargar el archivo en s3:

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

2

Consulte la documentación de Aws: http://aws.amazon.com/code hay bibliotecas disponibles para la mayoría de los lenguajes de programación. Por lo tanto, puede crear un depósito y configurarlo en su código para obtener datos de url y escribir en este depósito en s3

por ejemplo en python:

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

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


No creo que esto sea del todo correcto. No estoy claro de dónde vendrían url_data. De la documentación, k.set_contents_from_string () parece establecer literalmente el contenido del archivo 'foobar' a lo que esté contenido en esa cadena. Quiero que el contenido de esa url se envíe directamente a s3 sin necesidad de descargarlo localmente.
Will Stedden

1

Puede montar su bucket s3 en la instancia ec2 y luego cd a / path / to / s3_mounted_on_a_folder, allí simplemente puede usar el comando:

wget https://your.download.url/

para montar s3 en tu ec2, usa s3fs.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.