連載
» 2013年12月25日 18時00分 公開

OSS「JobScheduler」で実現するこれからの運用自動化(3):排他制御などを活用して複雑なジョブ定義だってOK (3/3)

[船井覚,@IT]
前のページへ 1|2|3       

ParallelExecution Job Chainの作成

 次は、excuteジョブから実行するParallelExecution Job Chainを作成します。

 まず、JOEのFileメニューから[New]→[HotFolderObject]→[JobChain]を選択します。

図15

 Chain Nameに「ParallelExecution」と入力し、左側のメニューから「Steps/Nodes」を選択します。

図16

 ここでは、「p1→sync」「p2→sync」「p3→sync」という3通りの実行フローを作成するため、「p1」「p2」「p3」「sync」「success」「error」という6個のNode(Job)を定義します。

図17

 「New Chain Node」をクリックし、Stateに「p1」、jobに実行するジョブ名、Next Stateに「sync」、Error stateに「error」と入力し、Apply Chain Nodeをクリックします。同様に、残りのNodeも追加していきます。

 ただし、SuccessとErrorだけは「Full Node」ではなく「End Node」とします。

図18

 保存されたXMLファイルを開くと下記の内容になっています。

<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain  orders_recoverable="yes" visible="yes" name="ParallelExecution">
    <job_chain_node  state="p1" job="ParallelJob1" next_state="sync" error_state="error"/>
    <job_chain_node  state="p2" job="ParallelJob2" next_state="sync" error_state="error"/>
    <job_chain_node  state="p3" job="Paralleljob3" next_state="sync" error_state="error"/>
    <job_chain_node  state="sync" job="Sync" next_state="success" error_state="error"/>
    <job_chain_node  state="success"/>
    <job_chain_node  state="error"/>
</job_chain>

 ここまで来たら、あと少しです。

ジョブ2-3の排他制御設定

 ジョブ2-3(Paralleljob3)だけを単独実行させるために排他制御の設定を行います。

 左側メニューの「Locks」を選択し、「New Lock」をクリックし、Lock名に「only1job」と入力して「Apply Lock」をクリックします。

図19

 次に、多重実行するそれぞれのジョブを定義します。今回はサンプルですので、実行後しばらく待機(sleep)するだけのジョブを作成します。

 JOEからNew Jobを作成します。

図20

 Job Nameは「Paralleljob1」「Paralleljob2」「Paralleljob3」とし、Languageは「shell」、ScriptのExecutableには

echo parallelJob1

sleep 60


と入力します。echoさせるのはそれぞれのジョブ名です。sleepは、待ち合わせが機能するかどうかを確認するために、Paralleljob1は「60秒」、Paralleljob2と3は「20秒」に設定します。

 左側メニューの「Locks」を選択し、「New Lock Use」をクリック、Lockのプルダウンメニューから、先ほど作成した「only1job」を選択します。「Paralleljob1」「2」については、同時実行させるためにExclusiveのチェックを外します。逆に、Paralleljob3だけは単独実行させるために、Exclusiveのチェックを入れます。

図21

 保存されたParalleljob3のXMLファイルを開くと、下記の内容になっています。

<?xml version="1.0" encoding="ISO-8859-1"?>
<job  order="yes" stop_on_error="no" name="ParallelJob3">
    <lock.use  lock="only1job" exclusive="yes"/>
    <script  language="shell">
        <![CDATA[
echo parallelJob3
sleep 20
        ]]>
    </script>
    <run_time />
</job>

 これで準備は完了しました。では早速実行しましょう。

作成したジョブチェーンの実行

 WebブラウザーからJOCを開き、ジョブチェーンタブを選択します。そして、先ほど作成した「ParallelSample」を右クリックし、「オーダー作成」を選択して実行します。

図22

 全てのジョブが実行されているように見えますが、ロックタブを選択すると、「Paralleljob1」「Paralleljob2」がロックを保持し、Paralleljob3が待機していることが分かります。

図23

 最新履歴タブを選択し、「タスクのみ表示」をクリックすると、Paralleljob1の処理完了後、Paralleljob3が起動されたことを確認できます。

図24

 以上、ちょっと複雑なジョブ定義でも、多重実行や排他制御、待ち合わせ制御をうまく利用して組み上げられることがお分かりいただけたと思います。皆さんの環境や運用方法に応じて、いろいろ工夫を凝らしてみてください。

 次回は、JobSchedulerに付属する、JOE以外のお役立ちツールを紹介します。

【関連リンク】

SOS社の並列実行解説記事(英語)

http://www.sos-berlin.com/mediawiki/index.php/Parallel_Execution

Blue21さんの並列実行解説記事(日本語)

http://blue21.ddo.jp/server_koutiku/server-centos6/cos6_sosjob808.html


著者プロフィール

船井覚

OSSラボ株式会社 代表取締役

日本JobSchedulerユーザーグループ 代表

日本openQRMユーザーグループ 代表

1981年関西学院大学卒業。グループワンソフトウェア、ネットマークス、日本IBM、シークエントコンピューターズジャパン、バロースにおいて、PC、UNIX、SMPハイエンドサーバー、ERP、BI、無線技術、セキュリティ、ネットワークサービス、ソフトウェアと、扱うものは変わってきましたが、最先端の技術を追いかけてきました。現在は、HadoopやAsakusaなどの分散処理フレームワークから、分散仮想ストレージ、openQRMやOpenstackなどのクラウド管理システム、JobSchedulerやPuppet、fabric、ansibleなどの運用自動化基盤を企業向けに提供しています。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。