2017-05-26 14 views
1

csvファイルで利用可能な複数のデータセットに対して複数のアルゴリズムを実行しようとしています。ですから、すべてのインスタンスを異なるデータセットで並列に実行できるように、ec2インスタンスをスケールアップする必要があります。私はec2インスタンスをスケールアップし、各インスタンスに異なるデータセット(.csv)を貼り付ける方法を理解しようとしています。 注:キューイングシステムを実装してデータベースを使用する必要はありません。が別のec2インスタンスをスピンアップし、その上にcsvファイルをプッシュ

+0

あなたの要求をアーカイブするために、設定可能な管理ツール、例えば人形、人形、シェフ、塩について考えてみましょう。 – BMW

答えて

1

このパターンは一般的に含まれます。

  • を中央システムのすべてのインスタンスにアクセスできるストレージのいくつかのフォームに「プッシュ」仕事こと、などアマゾンSQSキューとして
  • オートスケーリング希望の数のAmazon EC2インスタンスを維持するグループ(メトリックに基づいてインスタンス数を変更するオプションのルールを使用)
  • 起動スクリプト各インスタンスそれは、それを処理し、アプリケーション引っ張るがキューから作業
  • アプリケーションを実行するどこかの結果を保存する(例えば、データベース内やAmazon S3内)、処理に

あなたが取るべきを繰り返し、あなたのソースデータ(CSVファイルなど)を取得し、Amazon SQSキュー内の個々のチャンクをプッシュします。メッセージには実際の入力データが含まれているか、Amazon S3に格納されているファイルへのリンクが含まれている可能性があります。

Amazon EC2インスタンス上で実行されているアプリケーションは、キューからメッセージを要求し、Amazon S3に格納されている場合はソースデータを取り出し、データを処理し、のどこかにを格納し、SQSキューメッセージを削除します。アプリケーションが失敗した場合、Amazon SQSは、あらかじめ決められた「不可視」期間の後に自動的にメッセージをキューに戻します。あなたは、データベースやキューイング・システムを使用する必要はありませんが、このような場合は、なぜあなたは言っていないと言うのデータベースまたはキュー

なし

。コストを避けたい場合は、キューに数セントの費用がかかることにご注意ください。データベースも非常に低コストにすることができます。

Amazon S3を使用して、各アプリケーションインスタンスが処理するファイルを取得して、作業を保存することができます。アプリケーションはファイルを削除し、作業を処理し、その結果をAmazon S3に保存します。

あなたは事実上、Amazon S3を擬似データベースと作業キューとして使用しています。

このアプローチの問題は、アプリケーションが失敗して作業が失われ、アプリケーションの複数のインスタンスが同じ作業項目を同時に取得しようとして、重複した作業が発生する可能性があることです。 Amazon SQSは、これらの状況を回避します。

インスタンスにファイルをプッシュ

あなたの質問はインスタンスにCSVファイルをプッシュについて尋ねます。これは非常に貧弱な建築設計であり、避けるべきです。中央システムを「プッシュ」するのではなく、個々の労働者がより多くの仕事をいつ消費できるかを知っているので、個々の労働者を「引っ張る」ことは常により堅牢です。情報をインスタンスにプッシュするには、完全に管理された集中キューを提供するだけでなく、作成するのがはるかに複雑になる可能性がある堅牢な方法が必要なので、はるかに簡単です。

"労働者EC2インスタンスをスピンアップ

最悪の場合、あなたはスピンアップ可能性が別のEC2インスタンスを、作業の各「チャンク」のため。作業定義が小さければ、それをユーザーデータの一部として渡すことができます。作業定義が大きい場合は、Amazon S3に格納し、ユーザーデータまたは起動時にインスタンスに割り当てられたタグを使用して、インスタンスへの参照を渡します。

このアプローチの欠点は、EC2が1時間ごとに課金されるということです。各インスタンスで1回の「処理」が行われるということです(インスタンスは、起動時に独自のタグを調べて参照を取得してS3からデータを取得できます)仕事のチャンク(chunk)がより高価になる可能性があります。特に、動作するにはほんのわずかな時間が必要です。代わりに、アマゾンEC2を使用しての

使用AWSラムダ

は、別のオプションは、AWSラムダ関数を使用することです。洗練された方法は、作品の各チャンクをオブジェクトとしてAmazon S3に格納することです。これにより、入力ファイルを処理し、出力をどこか別のS3バケットなどに格納するAWSラムダ関数をトリガできます。ただし、ラムダ機能は最大5分間しか実行できないため、ご使用のケースには当てはまらない可能性があります。

+0

精巧な答えに感謝します。あなたが指摘している具体的なことについて私は同意します。キューとデータベースを避ける理由は、キューイングシステムがすでに実装されているコードがデータパイプラインの一部になるため、別のキューを追加すると障害が発生する可能性があるからです。データベースには約100Kの類似のタスクがあるため、クエリを実行するとオーバーヘッドが増加します。だから私はインスタンスが専用のタスクで動作できるように、スピンアップのデータの塊を投稿できる方法を見つけようとしていました。 –

+1

最悪のケースでは、作業データ(または作業へのS3参照)をユーザーデータを介して渡して、作業ごとに個別のEC2インスタンスをスピンアップすることができます。しかし、これはあまり堅牢ではありません。 –

+0

合意。あなたはそのような有用な例にリンクしていますか? また、私はもう少し研究をした後、それぞれのインスタンスごとに個別のEBSを作成し、関連するファイルをコピーしてから、インスタンスにボリュームを添付することもできると考えています。それが実現可能かどうか、あるいはそれに有用なリソースがあれば教えてください。 –

0

さらに、ジョンの素晴らしい答えに加えて、AWS Batchを使って見てください。

関連する問題