Startcluster / qsub / grid engineを使用して並列ジョブを実行するのは初めてで、同じことに関する他のいくつかの投稿を読んでみました。特定の要件に合わせてスケーラブルなソリューションを構築する方法がまだわかりません。同じことを進める前に、もう少し提案を取り入れたいと思います。
これが私の要件です:
私は巨大なtarファイルを持っています[〜40-50 GB、最大100GBになる可能性があります]----->ここでできることはあまりありません。私はその巨大な単一のtarファイルを入力として受け入れました。
tarを解凍して解凍する必要があります----->tarxvftarfilename.tar|を実行します。pbzip -dを並列にして、同じものを解凍して解凍します。
この解凍の出力は、たとえば数十万ファイル、約50万ファイルです。
この非圧縮ファイルは処理する必要があります。すべてのファイルを取り込んで処理し、5つの異なるファイルを出力できるモジュラーコードがあります。
Tarファイル-----並列非圧縮--->非圧縮ファイル-----並列処理--->処理されたファイルごとに5つの出力ファイル
私は現在、16コアで実行される並列Pythonスクリプトを持っています。16GBのメモリは、この非圧縮ファイルのリストを取り込んで、同じものを並列処理します。
問題は、どのようにシームレスにスケーリングするかです。たとえば、コードが10時間実行されていると言っていて、それに8コアマシンをもう1つ追加したい場合、プロセッサの数を事前に知っている必要があるため、並列Pythonでそれを行うことはできません。
同時に、現在のクラスターに動的にノードを追加する場合、データのアクセス可能性と読み取り/書き込み操作はどうですか?
それで、私は星団とqsubを読んで基本的な実験をしました。qsubを介して複数のジョブを送信できることはわかりますが、非圧縮の入力フォルダーから入力ファイルを取得するにはどうすればよいですか?
たとえば、forループでファイル名を1つずつ選択してqsubコマンドに送信するscript.shを作成できますか?別の効率的な解決策はありますか?
たとえば、それぞれ16個のCPUを搭載した3台のマシンがあり、48個のジョブをキューに送信した場合、qsubはクラスターの異なるCPUでそれらを自動的に起動するか、-nporteコマンドなどの並列環境パラメーターを使用して番号を設定する必要があります。それぞれのクラスター内のCPUの数。PythonスクリプトをMPIで実行可能にする必要がありますか?
要約すると、入力として数十万のファイルがあり、それらをマルチコアマシンのジョブキューに送信したいと思います。マシンを動的に追加すると、ジョブは自動的に分散されます。
もう1つの大きな課題は、500,000の奇数操作のすべての出力を最後に集約する必要があるということです。出力が書き出されるときに、並列ジョブの出力を集約する方法についての提案はありますか?
私はいくつかのシナリオをテスト実行していますが、同様のシナリオで実験した人がいるかどうか知りたいです。
Hadoopプラグインを使用した提案はありますか?http://star.mit.edu/cluster/docs/0.93.3/plugins/hadoop.html
事前にKarthickに感謝します