2014-04-18 60 views
0

(Ubuntu 12.04)。我設想某種排隊來放置數千個任務,並讓ec2 isntance並行處理(100個ec2實例),其中每個實例處理隊列中的一個任務。AWS EC2:如何使用100個並行ec2實例處理隊列?

此外,每個ec2實例使用我提供的圖像,它將安裝二進制文件和軟件以供使用。

基本上我想要做的是,在Amazon的EC2上並行運行100個處理(一個使用依賴於該映像上安裝的二進制文件的包的python函數)一小時或更少,關閉它們並重復此操作只要需要就進行處理。

這是可行的嗎?我正在使用Python Boto來做到這一點。

+0

你能給我們更多關於你在做什麼的細節嗎?所有這些任務的輸出是什麼,你在做什麼輸出? – qwwqwwq

+0

我正在隊列中的每個項目上運行計算機視覺。輸出需要存儲在s3桶中。基本上,我需要一種方法來啓動包含安裝的計算機視覺庫的自定義圖像,並且需要在某個點運行100個實例來進行並行處理。 – KJW

回答

2

這聽起來像使用EMR可能更容易。

你在評論中提到你正在做計算機視覺。您可以通過準備一個文件,使每行都有一個base64編碼的圖像文件,使您的工作變得更加友好。

您可以準備一個簡單的引導腳本以確保羣集的每個節點都安裝了您的軟件。 Hadoop流式傳輸將允許您按原樣使用圖像處理代碼(而不是用java重寫)。

當您的工作結束後,羣集實例將被關閉。您還可以指定您的輸出直接傳輸到S3存儲桶,並將其全部燒入。EMR價格便宜,100 m1。運行一小時的介質EC2實例根據最新定價僅花費2美元左右:http://aws.amazon.com/elasticmapreduce/pricing/

+0

,看起來它會做的工作,我不知道是否每個這些m1實例具有唯一的IP地址。他們也沒有t1微型實例,但看起來像m1.small可以完成這項工作。另一個問題是FIFO訂單是否可以維持。例如s3桶中的100個圖像必須在所得的s3桶中產生完全相同的順序。我猜EMR不需要SQS? – KJW

+0

「Hadoop流式傳輸將允許您按原樣使用圖像處理代碼(而不是用java重寫)。」我怎樣才能做到這一點? – KJW

+0

hadoop流媒體的基本思想是用任何從STDIN中讀取並寫入STDOUT的語言編寫腳本。有很好的文檔:http://hadoop.apache.org/docs/r1.2.1/streaming。html對於這裏並不真正適用的FIFO順序,從概念上講,所有圖像將在同一時間進行處理(不管這實際發生取決於實例的數量/輸入的大小)。您始終可以通過密鑰對輸出進行排序,這可以滿足您按照特定順序獲取數據的需求。每個實例都有一個唯一的IP。 – qwwqwwq

3

這是可行的。你應該看看使用SQS。作業放在隊列中,工作實例將作業從隊列中彈出並執行相應的工作。作業完成後,工作人員從隊列中刪除作業,因此沒有作業運行多次。

您可以在啓動時使用用戶數據配置您的實例,或者您可以預先安裝所有軟件來烘烤AMI。我建議使用Packer來烘烤AMI,因爲它非常好用,而且非常容易編寫腳本,所以您的AMI可以在需要更改的情況下始終如一地進行重建。

要打開和關閉大量實例,請使用AutoScaling進行調查。只需將組的所需容量設置爲想要運行的工作者實例的數量,剩下的工作就可以完成。