2016-08-25 36 views
6

私は約400万のファイルを持つS3バケットを持っています。ファイルを新しいバケットに同期する必要があります(バケツの名前を変更するだけで十分ですが、新しいバケットを作成し、そこにファイルを移動して古いバケットを削除する必要はありません)。2つのAmazon S3バケットを同期する最速の方法

AWS CLIのs3 syncコマンドを使用していますが、ジョブは実行されますが、時間がかかります。 従属システムのダウンタイムが最小になるように時間を短縮したいです

ローカルマシンとEC2 c4.xlargeインスタンスの両方から同期を実行しようとしていましたが、時間の差はあまりありません。

は私がすなわち

aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "1?/*" 
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "2?/*" 
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "3?/*" 
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "4?/*" 
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "1?/*" --exclude "2?/*" --exclude "3?/*" --exclude "4?/*" 

--exclude--includeオプションを使用して、別の端末のウィンドウから、それらを並行して実行する複数のバッチジョブを分割する際にかかる時間が多少短縮することができることに気づいた何かがあります同期をさらに高速化できますか?この仕事にもっと適した別のタイプのEC2インスタンスがありますか?ジョブを複数のバッチに分割して、同じバケット上で並列に実行できるsyncプロセスの「最適な」数のようなものがありますか?

更新

私は、移行を行う、システムをダウン取る前にバケツを同期する戦略に傾いて、その後に変更されたファイルのほんの数をコピーするために、再びバケットを同期していますその間。しかし、違いがないバケットでも同じsyncコマンドを実行すると時間がかかります。

+0

500gigをコピーするために長い時間がかかるとしている。..バケットを同期を開始する前に、cross-regionバケツの複製を可能にすることができますあなたが何をしていても。ディスクの帯域幅は非常に広くなっています。 –

+0

@MarcB true。私が目指す移行戦略は、システムをダウンさせる前にバケットを同期させることだと言いました。その間に変更された最小量のファイルのみをコピーするには、スイッチを切り替えてから再度同期を実行します。実際にファイルをコピーする必要がない場合でも、 'sync'コマンドはファイルが変更されたかどうかを確認するだけでも多くの時間がかかります。 – mrt

+1

この500gigにはいくつのファイルがありますか?基本的にはタイムスタンプを比較するだけでも遅くなります。なぜなら、基本的には、すべての単一ファイルに対して 'stat()'操作を要求するからです。実際にバックグラウンドで同期が行われているかどうかはわかりませんが、バックエンドシステムが物理的なバイト(タイムスタンプが変更されなかった場合)を比較するか、ファイルをハッシュしてハッシュを比較すると、2x500ギガバイトのデータを読み取ってバイト/ 。 –

答えて

3

EMRとS3-distcpを使用できます。 2つのバケット間で153TBを同期させなければならなかった。これには約9日間かかった。また、バケットが同じ地域にあることも確認してください。これは、データ転送のコストが発生するためです。

aws emr add-steps --cluster-id <value> --steps Name="Command Runner",Jar="command-runner.jar",[{"Args":["s3-dist-cp","--s3Endpoint","s3.amazonaws.com","--src","s3://BUCKETNAME","--dest","s3://BUCKETNAME"]}] 

すでにやっているOPの変形例として

0

http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html

http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-commandrunner.html ... 一つ
は、すべてのファイルのリストを作成することができますがaws s3 sync --dryrun

aws s3 sync s3://source-bucket s3://destination-bucket --dryrun 
# or even 
aws s3 ls s3://source-bucket --recursive 
で、同期します

同期するオブジェクトのリストを使用して、ジョブを複数のaws s3 cp ...コマンド。この方法では、--exclude "*" --include "1?/*"タイプの引数を使用して複数の同期ジョブを開始するときと同じように、同期候補のリストを取得しながら、「aws cli」はそこにぶら下がりません。

すべての「コピー」ジョブが完了すると、オブジェクトが「ソース」バケットから削除される可能性がある場合は、--deleteの可能性があります。

「ソース」と異なる領域に位置する「宛先」バケットの場合、1は、データの

関連する問題