簡體   English   中英

多台計算機-同時處理多個文件?

[英]Multiple Machines — Process Many Files Concurrently?

我需要同時處理大量文件(成千上萬個不同文件,每個文件平均大小為2MB)。

所有信息都存儲在一個(1.5TB)網絡硬盤上,大約30台不同的計算機可以訪問(讀取)這些信息。 為了提高效率,每台機器將讀取(和處理)不同的文件(有成千上萬的文件需要處理)。

在從1.5TB硬盤驅動器上的“傳入”文件夾中讀取文件后,每台機器都將處理該信息,並准備將處理后的信息輸出回1.5TB驅動器上的“已處理”文件夾中。 每個文件的處理信息的平均大小與輸入文件的大小大致相同(每個文件約2MB)。

當人們進行這樣的手術時,有什么“做”和“不要”? 擁有30台左右的計算機同時讀取(或寫入)同一網絡驅動器是否有問題? (請注意:現有文件只會被讀取,不會被追加/寫入;新文件將從頭開始創建,因此不存在對同一文件進行多次訪問的問題...)。 我應該期待瓶頸嗎?

(如果很重要,我將在所有計算機上使用Linux,Ubuntu 10.04 LTS)

您應該考慮的事情:

如果對每個文件進行的處理都很簡單,那么您真正的瓶頸不是讀取的並行文件的數量,而是硬盤驅動器的功能。

除非處理花費很長時間(例如,每個文件花費幾秒鍾),否則您將超過一個點,在該點添加更多進程只會減慢爬網的速度,因為每個進程都在讀取和寫入結果,而磁盤只能非常。

嘗試最小化磁盤訪問:例如,在其他進程正在下載時下載文件並在本地生成結果,並在磁盤負載下降時將結果發送回去。

我寫的越多,就可以歸結為每個文件需要完成多少處理。 如果是簡單的解析,則花費幾毫秒,一台計算機或30台計算機的時間幾乎沒有什么不同。

您需要注意,兩個工作進程不會同時接(並嘗試做)同一工作。

不幸的是,NFS文件系統沒有讓您輕松做到這一點的語義。

因此,我建議使用諸如Gearman和生產者/消費者模型之類的東西,其中一個過程將工作分配給有能力的人。

另一種可能性是擁有一個包含所有任務表的數據庫(例如mysql),並讓進程以原子方式自動“聲明”任務。

但是,只有當您的進程主要受CPU限制時,所有這些都是值得的。 如果您試圖通過使用多個客戶端來從NAS中獲得更多的IO帶寬(或操作),它將無法正常工作。

我假設您將在這里至少運行千兆以太網(否則可能不值得)。

您是否嘗試過在同一台計算機上運行多個進程?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM