/ /複数のマシン - 同時に多くのファイルを処理する? - Linux、ネットワーク、ハードウェア、ハードドライブ

複数のマシン - 複数のファイルを同時に処理する? - Linux、ネットワーク、ハードウェア、ハードドライブ

私は同時に大量のファイル(1ファイルにつき2MBの平均サイズを持つ何千もの異なるファイル)を処理する必要があります。

すべての情報は1つに格納されます(1。5TB)のネットワークハードドライブに接続され、約30台の異なるマシンでアクセス(読み込み)されます。効率を上げるために、各マシンは異なるファイルを読み込み(処理する)必要があります(何千ものファイルが処理される必要があります)。

すべてのマシン - ファイルを読み込んだ後1.5TBハードドライブの「着信」フォルダから情報を処理し、処理された情報を1.5TBドライブの「処理済み」フォルダに出力する準備が整います。すべてのファイルの処理情報は、入力ファイルとほぼ同じ平均サイズです(ファイルあたり約2MB)。

あるときは "do"と "donts"がありますか?そのような操作を構築する?同時に30台のマシンに同じネットワークドライブに情報を読み込ませる(または書き込む)のが問題ですか? (注:既存のファイルは追加/書き込みされずに読み込まれ、新しいファイルは最初から作成されるため、同じファイルへの複数のアクセスの問題はありません...)。 私が期待すべきボトルネックはありますか?

(私はすべてのマシン上でLinux、Ubuntu 10.04 LTSを使用しています。

回答:

回答№1は1

あなたが考えるべきこと:

各ファイルに対して実行される処理が単純な場合、実際のボトルネックは、読み込んだ並列ファイルの量ではなく、ハードディスクドライブの能力です。

処理に時間がかかる場合(例えば、秒)を超えると、すべてのプロセスが結果を読み書きしているだけで、多くのプロセスを追加するとクロールの問題が遅くなり、ディスクはあまりにも多くの処理しかできなくなります。

ディスクへのアクセスを最小限に抑えてください。たとえば、他のプロセスがダウンロードされている間にファイルをダウンロードして結果をローカルに生成し、ディスクの負荷が低下したときに結果を戻します。

私が書くほど、ファイルごとにどのくらい処理する必要があるかがわかります。単純な構文解析の場合は、1ミリ秒か1マシンか30秒の時間がかかります。


回答№2の場合は0

あなたは、2つのワーカープロセスが同時に同じ作業をしないように注意する必要があります。

残念なことに、NFSファイルシステムには、簡単に行うことができるセマンティクスはありません。

ですから、Gearmanやプロデューサー/コンシューマーモデルのようなものを使用することをお勧めします。このプロセスでは、誰かがそれを行うことができる人に仕事を提供します。

もう1つの可能性は、すべてのタスクのテーブルを持つデータベース(mysqlなど)を持ち、プロセスがそれ自身のためにタスクをアトミックに「要求」するようにすることです。

しかし、あなたのプロセスがほとんどCPUに縛られていれば、これはすべて価値があります。複数のクライアントを使用してNASからIO帯域幅(または操作)を増やそうとしている場合は、動作しません。

私はあなたがここで少なくともギガビットのイーサネットを走っていることを前提としています(またはそれはおそらく価値がありません)。

同じマシンで複数のプロセスを実行しようとしましたか?