0

大量のファイル (数千の異なるファイル、ファイルあたりの平均サイズは 2MB) を同時に処理する必要があります。

すべての情報は 1 台 (1.5 TB) のネットワーク ハード ドライブに保存され、約 30 台の異なるマシンからアクセス (読み取り) されます。効率を高めるために、各マシンは異なるファイルを読み取り (および処理) します (処理する必要があるファイルは数千あります)。

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

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

(問題がなければ、すべてのマシンで Linux、Ubuntu 10.04 LTS を使用しています)

4

2 に答える 2

1

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

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

処理に長い時間がかからない限り (たとえば、ファイルごとに数秒)、プロセスを追加してもクロールの速度が低下するポイントを過ぎてしまいます。そんなに。

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

書けば書くほど、各ファイルに対してどれだけの処理を行う必要があるかが分かります。単純な解析、つまり数ミリ秒かかるものであれば、1 台のマシンでも 30 台でもほとんど違いはありません。

于 2010-12-14T00:48:43.083 に答える
0

2つのワーカープロセスが同じ作業を同時に取得(および実行しよう)しないように注意する必要があります。

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

ですから、私がお勧めするのは、ギアマンや生産者/消費者モデルのようなものを使用することです。このモデルでは、1つのプロセスで利用可能な人に作業が提供されます。

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

しかし、これはすべて、プロセスがほとんどCPUバウンドである場合にのみ価値があります。複数のクライアントを使用してNASからより多くのIO帯域幅(または操作)を取得しようとしている場合、それは機能しません。

ここでは、少なくともギガビットイーサネットを実行していると想定しています(または、おそらくそれだけの価値はありません)。

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

于 2010-12-14T07:51:30.863 に答える