SlideShare uma empresa Scribd logo
1 de 16
ジョブの多重実行・排他制
御
第4回JobSchedulerユーザー会
2013/12/3
作りたいジョブ
ジョブ1

ジョブ2-1

ジョブ3

ジョブ2-2

ジョブ2-3





ジョブ1がジョブ2−1〜3を同時起動
ジョブ2−3だけは単独実行させたい
ジョブ2−1〜3全てが完了してから、ジョブ3
を起動する
JobSchedulerで並列ジョブの作り
方
1. Stand Alone Job
 ジョブ定義のシェルで実行プログラムを複数実行する
→エラー制御や排他制御まで書く必要がある
→JobScheduler使う意味ないじゃん?

2. Job Chain
 Job ChainのOrder Jobを同時に実行する
→Order Jobは、順番にしか実行できない
→じゃあ、できないじゃん?

3. Orderを並列に発行する
Orderとは?








OrderがJobを起動す
る
複数のOrderが同時に
実行できる
OrderはStateと
Parameterを保持する
OrderのStateと
Parameterによって、
実行するJobに処理条
件を与える事ができ
る

①

Orde State=1
r1
Order
Que

Node=Order Job 1
State=1
Next_state=2
実行中

End Node
State=error

Job Chain

Order
Que

Node=Order Job 2
State=2
Next_state=end
待機中

End Node
State=end

End Node
State=error

task

②

Orde State=1
r2
Order
Que

Node=Order Job 1
State=1
Next_state=2
実行中

task

End Node
State=error

Orde State=2
r1
Order
Que

Node=Order Job 2
State=2
Next_state=end
実行中

task

End Node
State=error

Job Chain
End Node
State=end
Orderを並列実行する方法
Job Chain: ParallelSample
Job 1

execute

execute

execute

sync

Job 3

Job Chain:
ParallelExecution
Job 2-1

sync
Job 2-2

Job 2-3





2つのJob Chain
ParallelSample:Orderを生成/発行するだけ
ParallelExecution:ジョブを並列実行する
ジョブ並列実行の仕組み
Job Chain: ParallelSample

①Order1
Job 1
State=100

State=p1

Execute
State=p1

Job Chain:
ParallelExecution

Orderp State=p1
1:1

②Order1

State=p2

Execute
State=p2
Orderp State=p2
2:1

③Order1

State=p3

Execute
State=p3

Sync
State=sync

Job 3
State=300

Orderp State=p3
3:1

Job 2-1
State=p1

Sync
State=sync
Job 2-2
State=p2
Job 2-3
State=p3





Orderは、実行Jobの処理完了を待たずに次のNodeに遷移す
る
Orderを生成実行するJob (execute)は、一つのJobを異なる
StateとParameterで3回繰り返し実行する
ParallelSample.job_chain.xml
<job_chain orders_recoverable="yes" visible="yes">
<job_chain_node state="100" job="anyJobBefore" next_state="p1" error_state="error"/>
<job_chain_node state="p1" job="execute" next_state="p2" error_state="error"/>
<job_chain_node state="p2" job="execute" next_state="p3" error_state="error"/>
<job_chain_node state="p3" job="execute" next_state="sync" error_state="error"/>
<job_chain_node state="sync" job="Sync" next_state="200" error_state="error"/>
<job_chain_node state="200" job="anyJobAfter" next_state="success"
error_state="error"/>
<job_chain_node state="success"/>
<job_chain_node state="error"/>
</job_chain>

execute jobを異なるStateと
Parameterで3回繰返して実行す
る
execute.job.xml
<job

order="yes" stop_on_error="no" tasks="3">
<params >
<param name="job_chain" value="/SampleParallel/ParallelExecution"/>
</params>

返り値がtrueの場合Next_stateのNodeに
Orderを進めます。

<script language="java:javascript">
<![CDATA[
function spooler_process(){
処理中のOrderを返します。
var actOrder = spooler_task.order;
Orderを作成します。
var order = spooler.create_order();
var job_chain = spooler.job_chain(spooler_task.params.value("job_chain"));
order.state = actOrder.state;
Job Chain名を返します。
order.params.merge(actOrder.params);
order.id = order.state + ":" + actOrder.id;
job_chain.add_or_replace_order(order);
return true;
Job ChainにOrderを追加し、もし
}
同じOrder IDがあれば上書きしま
]]>
す。
</script>

<monitor name="configuration_monitor">
<script java_class="sos.scheduler.managed.configuration.ConfigurationOrderMonitor"
language="java" java_class_path=""/>
</monitor>
<run_time />
</job>

Job Chain内のJobにParameterを
受渡する内部APIを定義
注意!




JobScheduler1.5から64bit Javaに対応した64bit版
が提供されましたが、JavaScriptエンジンも32bit
版のSpider Monkeyから64bit版のRhinoに変更にな
りました。
64bit版JobSchedulerを使用する場合は
java:javascriptを選択し、32bit版を使用する場合は
javascriptを選択して下さい。
ParallelExecution.job_chain.xml
p1->sync, p2->sync, p3->syncという3
通りの実行フローを作成します
<job_chain orders_recoverable="yes" visible="yes">
<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
</job_chain>

state="error"/>

待ち合わせジョブ
Sync.job.xml
同期対象とするOrderを指定するために、同期したい Order 数を Parameterと
して定義します。
<job order="yes" tasks="1"> ParallelExecutionで3回、ParallelSampleで1回のOrderを実行するので、
ParallelExecution_required_ordersを3、ParallelSample_required_ordersを1
とします。
<params >
<param name="ParallelExecution_required_orders" value="3"/>
<param name="ParallelSample_required_orders" value="1"/>
</params>
<script language="java" java_class="sos.scheduler.job.JobSchedulerSynchronizeJobChains"
java_class_path=""/>
<run_time />
</job>

待ち合わせを行う内部APIを定義
ジョブの排他制御



JobSchedulerでは、ロックファイルを使用してジョブの排他制御が可能
排他ロック:指定したジョブ以外の同時実行を禁止


ロック名.lock.xmlという名前のXMLファイルを以下の内容で作成

<?xml version="1.0" encoding="ISO-8859-1"?>
<lock />


排他制御したいジョブの定義ファイルに以下の内容を追記

<job order="yes" stop_on_error="no">
<lock.use lock=”ロック名" exclusive="yes"/>


共有ロック:指定した数のジョブの同時実行を許可する


ロック名.lock.xmlという名前のXMLファイルを以下の内容で作成

<?xml version="1.0" encoding="ISO-8859-1"?>
<lock max_non_exclusive="3"/>


同時実行できるジョブの数を定
義

排他制御したいジョブの定義ファイルに以下の内容を追記

<job order="yes" stop_on_error="no">
<lock.use lock=”ロック名" exclusive=”no"/>
ParallelJob3.job.xml
このジョブは他のジョブと同時
に実行できない排他ロックを設
定
<job order="yes" stop_on_error="no">
<lock.use lock="test" exclusive="yes"/>
<script language="shell">
<![CDATA[
echo parallelJob3
sleep 20
]]>
</script>
<run_time />
</job>
Job Chainの実行
ロックの状態
ログ

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
基本に戻ってInnoDBの話をします
基本に戻ってInnoDBの話をします基本に戻ってInnoDBの話をします
基本に戻ってInnoDBの話をします
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
わしわし的おすすめ .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
わしわし的おすすめ  .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会わしわし的おすすめ  .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
わしわし的おすすめ .gitconfig 設定 (と見せかけて実はみんなのおすすめ .gitconfig 設定を教えてもらう魂胆) #広島Git 勉強会
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜サーバ構築を自動化する 〜Ansible〜
サーバ構築を自動化する 〜Ansible〜
 
JS7 JobScheduler プレビュー
JS7 JobScheduler プレビューJS7 JobScheduler プレビュー
JS7 JobScheduler プレビュー
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
Azure DevOps ハンズオン Vo.2 ~Azure DevOps Wiki を用いたドキュメントの作成~
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 

Mais de OSSラボ株式会社

CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
OSSラボ株式会社
 

Mais de OSSラボ株式会社 (20)

220523JS7.pdf
220523JS7.pdf220523JS7.pdf
220523JS7.pdf
 
201023 jobscheduler os_cfall
201023 jobscheduler os_cfall201023 jobscheduler os_cfall
201023 jobscheduler os_cfall
 
ジョブストリーム紹介資料
ジョブストリーム紹介資料ジョブストリーム紹介資料
ジョブストリーム紹介資料
 
191010 opie2
191010 opie2191010 opie2
191010 opie2
 
CMDBuild V.3 update [Japanese]
CMDBuild V.3 update [Japanese]CMDBuild V.3 update [Japanese]
CMDBuild V.3 update [Japanese]
 
180729 jtf open-audit
180729 jtf open-audit180729 jtf open-audit
180729 jtf open-audit
 
170827 jtf garafana
170827 jtf garafana170827 jtf garafana
170827 jtf garafana
 
NMIS overview
NMIS overviewNMIS overview
NMIS overview
 
JobSchedulerアップデート2016
JobSchedulerアップデート2016JobSchedulerアップデート2016
JobSchedulerアップデート2016
 
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
Site Reliability Engineering (SRE)を可能にするOpenPIEのご紹介
 
160901 osce2016sre
160901 osce2016sre160901 osce2016sre
160901 osce2016sre
 
160724 jtf2016sre
160724 jtf2016sre160724 jtf2016sre
160724 jtf2016sre
 
オープンソースNW監視ツールのご紹介
オープンソースNW監視ツールのご紹介オープンソースNW監視ツールのご紹介
オープンソースNW監視ツールのご紹介
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
CMDBuildを中心とした運用管理自動化基盤OpenPIEの事例紹介
 
「今、ヨーロッパのオープンソースがアツい!」 クラウドの構成管理を自動化する基盤CMDBuild
「今、ヨーロッパのオープンソースがアツい!」クラウドの構成管理を自動化する基盤CMDBuild「今、ヨーロッパのオープンソースがアツい!」クラウドの構成管理を自動化する基盤CMDBuild
「今、ヨーロッパのオープンソースがアツい!」 クラウドの構成管理を自動化する基盤CMDBuild
 
150726cmdbuild jtf2015
150726cmdbuild jtf2015150726cmdbuild jtf2015
150726cmdbuild jtf2015
 
CMDBuild Ready2Use紹介資料
CMDBuild Ready2Use紹介資料CMDBuild Ready2Use紹介資料
CMDBuild Ready2Use紹介資料
 
Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例Zabbix監視運用業務の自動化事例
Zabbix監視運用業務の自動化事例
 
Excelからのクラウドオーケストレーション
ExcelからのクラウドオーケストレーションExcelからのクラウドオーケストレーション
Excelからのクラウドオーケストレーション
 

Último

Último (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

JobSchedulerでのジョブの多重実行・排他制御