RのパッケージparSapply()
から使用します。膨大な量のデータに対して計算を実行する必要があります。parallel
並行して実行しても実行には数時間かかるwrite.table()
ため、メモリ不足やその他のランダムな理由でプロセスが時々クラッシュするため、 を使用して定期的にクラスターからファイルに結果を書き込むことにしました。止まったところ。おそらく複数のプロセスが同時にファイルに書き込みを行った結果、取得したcsvファイルの一部の行が途中で切り取られていることに気付きました。実行中にファイルをロックして、write.table()
他のクラスターがアクセスできないようにする方法はありますか? または、各クラスターから別のファイルに書き込み、結果をマージするしかありません。
1520 次
1 に答える
0
filelock
( GitHub )を使用してファイル ロックを作成できるようになりました。
これを容易にするにparSapply()
は、ループを編集して、ファイルがロックされている場合にプロセスが単純に終了するのではなく、再試行するかSys.sleep()
短時間実行するようにする必要があります。ただし、これがパフォーマンスにどのように影響するかはわかりません。
代わりに、データを保持できるクラスター固有のファイルを作成して、ロック ファイルを不要にし、パフォーマンスを低下させないようにすることをお勧めします。その後、これらのファイルを織り込んで、最終結果ファイルを作成できるはずです。サイズが問題になる場合はdisk.frame
、システム RAM よりも大きいファイルを操作するために使用できます。
于 2020-12-03T10:39:19.803 に答える