Your SlideShare is downloading. ×
JobSchedulerでのジョブの多重実行・排他制御
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

959
views

Published on

12/3第4回勉強会の資料です

12/3第4回勉強会の資料です

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
959
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
13
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ジョブの多重実行・排他制 御 第4回JobSchedulerユーザー会 2013/12/3
  • 2. 作りたいジョブ ジョブ1 ジョブ2-1 ジョブ3 ジョブ2-2 ジョブ2-3    ジョブ1がジョブ2−1〜3を同時起動 ジョブ2−3だけは単独実行させたい ジョブ2−1〜3全てが完了してから、ジョブ3 を起動する
  • 3. JobSchedulerで並列ジョブの作り 方 1. Stand Alone Job  ジョブ定義のシェルで実行プログラムを複数実行する →エラー制御や排他制御まで書く必要がある →JobScheduler使う意味ないじゃん? 2. Job Chain  Job ChainのOrder Jobを同時に実行する →Order Jobは、順番にしか実行できない →じゃあ、できないじゃん? 3. Orderを並列に発行する
  • 4. 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
  • 5. 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:ジョブを並列実行する
  • 6. ジョブ並列実行の仕組み 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回繰り返し実行する
  • 7. 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回繰返して実行す る
  • 8. 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を定義
  • 9. 注意!   JobScheduler1.5から64bit Javaに対応した64bit版 が提供されましたが、JavaScriptエンジンも32bit 版のSpider Monkeyから64bit版のRhinoに変更にな りました。 64bit版JobSchedulerを使用する場合は java:javascriptを選択し、32bit版を使用する場合は javascriptを選択して下さい。
  • 10. 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"/> 待ち合わせジョブ
  • 11. 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を定義
  • 12. ジョブの排他制御   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"/>
  • 13. 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>
  • 14. Job Chainの実行
  • 15. ロックの状態
  • 16. ログ