2016-08-22 13 views
0

私はexecutorServiceを使用して並列に3つの異なるホストにsshを実行する必要があります。 私はM個のホストとN個のジョブを各ホストに持っていますので、M個のホストに並列にログインし、N個のジョブを(各ホストごとに)順番に実行できるようにします。 私はSSHJを試しましたが、それは並列SSHをサポートしていないようです。executorServiceを使用した並列SSH

最近、私はParallecを試しています。すべてのタスクを収集し、configの並行性の値に基づいて並列実行するようです。

実行可能なアプローチ/ライブラリはありますか?

+0

JSCH(http://www.jcraft.com/jsch/)を試しましたか? –

答えて

0

これは、ホストのクラスタを管理する際によく見られる典型的なワークフロー/オーケストレーションの問題のようです。

パラレルでは、onCompleted()ハンドラ中の応答/タスク状態をハッシュマップに保存し、ハッシュマップをポーリングし続けることができます。少なくともN個のジョブを収集して現在のステージを終了すると、次のラウンドで実行する別の並列タスクを起動できます。

5つのシェルスクリプトS1 ... S5を5つのステージとして順番に実行するには、1000台のホストH1 ... H1000があるとします。

各ホストの実行状態を保存するために、同時ハッシュマップを作成できます。各スクリプト/ステージには[NOT_RUN |実行中| COMPLETED_SUCCESS(COMPLETED_ERROR)]状態になります。また、並列タスクの実行を担当するホストごとに格納することもできます。

スクリプト1を最初のパラレルタスクとして実行するために、1,000台のホストをすべて起動します。実行する前に、ハッシュマップの各要素を<#、RUNNING> stateのように設定します。現在のスレッドをブロックしないように、タスクasynchronouslyを実行する必要があります。応答ハンドラonCompleted()では、結果を解析し、対応するエントリをマップのCOMPLETED_X状態に更新します。

間隔を置いてこのマップをポーリングし続けることができます。完成したステージに少なくともK個のタスク(または最後のタスクグループが残っている)が見つかるたびに、完了したK個のホスト現在のステージを次のステージに移動します。

並列タスクでは、各ホストが異なるステージで実行される可能性があることに注意してください。いくつかはスクリプト1であり、一部はスクリプト4である。これは、異なるホストで異なるリクエストでサポートされています。http://www.parallec.io/docs/submit-task/#apis-on-variable-replacement-for-heterogeneous-requests 要約すると、小さなバッチとして実行して、次のステージに移動できるホストを確認することです。マネージャスレッドは、次のラウンドのために現在のステージを終了したホストだけをピックアップするので、ロックする必要はありません。

関連する問題