ラベル s3cmd の投稿を表示しています。 すべての投稿を表示
ラベル s3cmd の投稿を表示しています。 すべての投稿を表示

2013-08-05

S3に5GB以上のファイルをアップロードしてみた

普段はs3cmdを愛用しているのですが、stable版では5GBのファイルのアップロードに対応していないのでs4cmdというのを利用してみました

https://github.com/bloomreach/s4cmd

実験に利用したファイルは約7.5GB
$ ls -hl /mnt/ephemeral/xxx.gz 
-rw-r--r-- 1 root root 7.5G Aug  5 17:03 /mnt/ephemeral/xxx.gz

2回アップロードを試してみました

1回目
$ time s4cmd put /mnt/ephemeral/xxx.gz s3://yyy/
/mnt/ephemeral/xxx.gz => s3://yyy/xxx.gz
         
real 1m40.491s
user 0m35.970s
sys 0m16.281s

2回目
$ time s4cmd put /mnt/ephemeral/xxx.gz s3://yyy/
/mnt/ephemeral/xxx.gz => s3://yyy/xxx.gz
         
real 1m35.689s
user 0m35.726s
sys 0m17.057s

いずれも2分掛からずに終了しました

アップロード中のグラフを見てみると800Mbpsぐらいは出てる模様です
※インスタンスタイプはm2.4xlargeというお高いやつですが・・・

2013-07-23

s3cmd version 1.5.0-alpha3入れたらjsonが無いと言われた

s3cmdで5GB以上のファイルをアップロードするには、1.1.0 beta2以降で

--multipart-chunk-size-mb=5120

をつけてアップロードしてあげれば良いらしいのだが

$ s3cmd --version
Traceback (most recent call last):
  File "/usr/bin/s3cmd", line 28, in ?
    import S3.Exceptions
  File "/usr/lib/python2.4/site-packages/S3/Exceptions.py", line 6, in ?
    from Utils import getTreeFromXml, unicodise, deunicodise
  File "/usr/lib/python2.4/site-packages/S3/Utils.py", line 22, in ?
    import Config
  File "/usr/lib/python2.4/site-packages/S3/Config.py", line 14, in ?
    import json
ImportError: No module named json

というエラーがでてしまう

どうやらpython-jsonを入れてあげれば良いらしい
# yum install -y python-json

$ s3cmd --version
s3cmd version 1.5.0-alpha3
これで解決ヾ(*・ω・)シ

2012-08-02

s3cmd syncで既にあるファイルまで同期されてしまう

s3cmdの同期機能であるs3cmd syncなのですが
既に存在しているファイルまでご丁寧にダウンロードしてくれてしまい嵌まったのでメモ。
2. Conditional transfer — only files that don’t exist at the destination in the same version are transferred by the s3cmd sync command. By default a md5 checksum and file size is compared. This is similar to a unix rsync command, with some exceptions outlined below.
Filenames handling rules and some other options are common for both these methods.
と書かれているので設計的には既に存在している同じ内容のファイルについてはスキップしてくれるはずなのです。
ところが実際test.bucketというS3上のバケットから/mntというローカルディレクトリに同期させてみると何度やっても同じ結果でした。
s3cmd sync -v --no-progress s3://test.bucket/ /mnt
INFO: Compiling list of local files...
INFO: Retrieving list of remote files for s3://test.bucket/ ...
INFO: Found 5 remote files, 4 local files
INFO: Applying --exclude/--include
INFO: Verifying attributes...
INFO: Summary: 5 remote files to download, 4 local files to delete
リモート(S3)にダウンロードすべきファイルが5個ファイルが見つかって、ローカルには4つ削除すべきファイルが見つかりました…と。
5個のうち1はディレクトリのダミーファイル(S3にはディレクトリという概念がないのでダミーファイルでディレクトリを表現している)なので、実ファイル4つ全てが削除されて新たにダウンロードされることになってます。
・・・もしやと思い、ローカルディレクトリ指定の最後に/を追加してみました
s3cmd sync -v --no-progress s3://test.bucket/ /mnt/
INFO: Compiling list of local files...
INFO: Retrieving list of remote files for s3://test.bucket/ ...
INFO: Found 5 remote files, 4 local files
INFO: Applying --exclude/--include
INFO: Verifying attributes...
INFO: Summary: 1 remote files to download, 0 local files to delete
削除されるファイルは無く、ディレクトリのダミーファイル1つだけがダウンロード対象になりましたよ!
これで、解決ですヾ(*・ω・)シ