Web上の大きなデータセットをAWS S3に直接ダウンロードする
質問
URLから大規模なデータセットをAmazon S3にインポートできるかどうかは誰もが知っていますか?
基本的に、巨大なファイルのダウンロードを避けてから、Webポータルを介してS3に再アップロードしたいと思います。ダウンロードURLをS3に提供し、ファイルシステムにダウンロードするのを待ちたいだけです。簡単なことのように思えますが、ドキュメントが見つかりません。
解決
あなたは明らかにAWSアカウントを所有しているので、私は次のことをお勧めします:
- EC2インスタンス(任意のサイズ)を作成する
- 使用する wget(またはcurl)その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へのアップロードは非常に高速です。自分のコンピューターからアップロードするよりもはるかに高速です。この方法では、ファイルをコンピューターにダウンロードし、Webインターフェイスを介してアップロードする潜在的に重要な時間を保存することを避けることができます。
他のヒント
十分なストレージでEC2インスタンスを起動します
インスタンスへのssh
ローカルマシンからのダウンロードに対応するCurlコマンドを取得します。 Google Chrome-> Network Tab-> Copy-> Copyとしての開発者オプションを使用できます(この手順は、Kaggleなどの認証を必要とするいくつかのWebサイトに必要です)
インスタンス端子から、実行します
curl
コマンド(付録-o output_file
コマンドに)。これにより、ファイルをダウンロードして保存しますインスタンスをS3に接続するようにAWS資格情報を構成します(1つの方法はコマンドを使用することです
aws config
, 、AWSアクセスキーIDと秘密を提供します)、このコマンドを使用して、ファイルをS3にアップロードします。
aws s3 cp path-to-file s3://bucket-name/
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)
S3バケットをEC2インスタンスにマウントし、/path/to/s3_mounted_on_a_folderにCDにマウントできます。コマンドを使用するだけで使用できます。
wget https://your.download.url/
S3をEC2にマウントするには、S3FSを使用します。