(57)【要約】【課題】コンピュータによるジョブの並列実行を、他の複数のコンピュータへ自動的に切り替える。【解決手段】第１のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータのそれぞれに割り当てる。そして、複数の代替コンピュータのそれぞれにつき、通信制御部を配置する。通信制御部は、代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡す。また、通信制御部は、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する。【選択図】  図１５
2015095075.tif 000002
【特許請求の範囲】
【請求項１】
第１のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータのそれぞれに割り当て、
前記複数の代替コンピュータのそれぞれについて、当該代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡し、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する通信制御部を配置する、
処理をコンピュータに実行させるジョブ管理プログラム。
【請求項２】
前記通信制御部は、前記代替コンピュータに割り当てられた処理群による処理済みのデータを蓄積ファイルに蓄積し、当該処理群の直後の処理を実行するコンピュータからの要求に応じて、当該蓄積ファイルに蓄積したデータを当該コンピュータに送信する、請求項１記載のジョブ管理プログラム。
【請求項３】
前記配置する処理は、前記第１のコンピュータにより並列実行されていたジョブの処理群のうち最後の処理による処理済みのデータのレコード番号を特定して、当該レコード番号を記憶手段に格納し、
前記通信制御部は、記憶手段に格納された前記レコード番号を参照し、当該レコード番号の次のレコード番号以降のデータを、前記代替コンピュータに割り当てられた処理群の直前の処理を実行するコンピュータに対して要求して受信する、請求項１又は２記載のジョブ管理プログラム。
【請求項４】
前記第１のコンピュータにより並列実行されていたジョブの処理群の割り当て及び前記通信制御部の配置に要する資源量を算出し、算出した当該資源量及び複数のコンピュータのそれぞれの資源量に基づき、当該複数のコンピュータから、前記複数の代替コンピュータを選択する処理をさらに含む、請求項１〜３のいずれか１項に記載のジョブ管理プログラム。
【請求項５】
前記選択する処理は、前記複数のコンピュータから、前記複数の代替コンピュータの数が最小となる組合せを特定し、当該組合せのうち、前記複数の代替コンピュータの資源量の合計が、算出した前記資源量に最も近い組合せのコンピュータを、前記複数の代替コンピュータとして選択する、請求項４記載のジョブ管理プログラム。
【請求項６】
前記選択する処理は、前記複数のコンピュータのうち、少なくとも前記通信制御部の配置に要する資源量を満たさないコンピュータを予め選択候補から除外して、前記複数の代替コンピュータを選択する、請求項４又は５に記載のジョブ管理プログラム。
【請求項７】
第１のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータのそれぞれに割り当て、
前記複数の代替コンピュータのそれぞれについて、当該代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡し、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する通信制御部を配置する、
処理をコンピュータが実行するジョブ管理方法。
【請求項８】
第１のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータのそれぞれに割り当てるジョブステップ割当部と、
前記複数の代替コンピュータのそれぞれについて、当該代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡し、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する通信制御部を配置する通信制御配置部と、
を備えるジョブ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータにおけるジョブの並列実行を、他のコンピュータに切り替える技術に関する。
【背景技術】
【０００２】
コンピュータにおいてジョブを並列実行することにより、大量のデータを高速処理することが可能である。かかる並列実行の際に、コンピュータの処理性能の範囲内で高速且つ安定した処理を実現させるべく、例えば次のような技術が提案されている。すなわち、パイプライン方式による処理の対象となる連続したジョブステップが、コンピュータで同時に実行させることが可能な上限プロセス数を超えるときには、上限プロセス数を上限とした数を１区分としてジョブステップを分割する。そして、分割により同じ区分とされたジョブステップ間のデータの受け渡しにパイプを用いる一方、異なる区分とされたジョブステップ間のデータの受け渡しには一時ファイルを用いてジョブステップを実行する。
【０００３】
また、ジョブの並列実行の際には、様々な態様でエラーが発生することがある。その一態様として、データ受け渡し処理を実行中のジョブが異常終了するエラーが発生した場合に、回復時間を短縮するための技術が提案されている。当該技術では、後続ジョブが異常終了した場合に、当該後続ジョブがデータを受け取る側のジョブであるときには、異常終了していない先行ジョブによる処理を続行し、異常終了した後続ジョブに渡すデータを外部記憶装置に書き込んでおく。その後、外部記憶装置に書き込んでおいたデータを利用して、異常終了した後続ジョブを再実行する。
【０００４】
ここで、例えば、ジョブを並列実行しているコンピュータ自体に故障等のエラーが発生することがある。このような場合、代替のコンピュータに速やかに処理を切り替えることが望ましい。このため、現用系コンピュータのそれぞれと少なくとも同程度の処理性能を有する待機系コンピュータを用意し、現用系コンピュータにおいてエラーが発生したときに、当該コンピュータで行っていたジョブの並列実行を、対応する待機系コンピュータに切り替えることが行われている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平９−１４６７８２号公報
【特許文献２】特開２００８−２３４０２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、現用系コンピュータと同程度の処理性能を有する待機系コンピュータを常に用意することは、コスト面等において負担となる。このため、例えば現用系コンピュータと比較して処理性能等の低い複数のコンピュータを柔軟に組み合わせ、１台の現用系コンピュータにおけるジョブの並列実行を、複数の待機系コンピュータに切り替えられることが望ましい。なお、このような切り替え作業は、エラーが発生した場合に限らず、例えばシステムのメンテナンスの際や、サーバ増設等のシステム構成の変更の際などにも行われる可能性がある。
【０００７】
また、例えば、現用系コンピュータが故障した場合に、当該コンピュータによる処理済みのデータを引き継いで実行する方法の例として、共有ディスクを使用する方法や、隣接のノードにミラーリングする方法等が考えられる。従来は、ジョブの実行中に処理済みのデータの受信元、配信先を動的に切り替える仕組みがないため、あらゆる代替ノードからアクセス可能なように、処理済みのデータを共有ディスク等に配置しておく必要があった。このようなディスク装置は、ジョブを実行するコンピュータからのディスクアクセスが集中する傾向がある。このため、それに耐えられるように高速な伝送経路と高性能なストレージなどのハードウェアを用意し、各コンピュータの処理能力増強に合わせ増強しなければ、そこが単一障害点となってジョブの実行が遅延する等の問題も発生し得る。
【０００８】
そこで、本発明の１つの側面では、コンピュータによるジョブの並列実行を、他の複数のコンピュータへ自動的に切り替えられるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の１つの側面では、第１のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータのそれぞれに割り当てる。そして、複数の代替コンピュータのそれぞれについて、通信制御部を配置する。通信制御部は、代替コンピュータに割り当てられた処理群より前の処理が存在するときに、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡す。また、通信制御部は、当該代替コンピュータに割り当てられた処理群より後の処理が存在するときに、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する。
【発明の効果】
【００１０】
本発明の１つの側面によれば、コンピュータによるジョブの並列実行を、他の複数のコンピュータへ自動的に切り替えることが可能となる。
【図面の簡単な説明】
【００１１】
【図１】ジョブの実行ノード切り替えの一例を示す説明図である。
【図２】ジョブの実行ノード切り替えの一例を示す説明図である。
【図３】システムの全体構成の一例を示す図である。
【図４】管理サーバの機能構成及びデータ構成の一例を示す図である。
【図５】ノード管理テーブルの一例を示す図である。
【図６】ジョブステップ管理テーブルの一例を示す図である。
【図７】ジョブステップ管理テーブルの一例を示す図である。
【図８】リソース定義の一例を示す図である。
【図９】リソース管理テーブルの一例を示す図である。
【図１０】リソース管理テーブルの一例を示す図である。
【図１１】配信管理テーブルの一例を示す図である。
【図１２】受信管理テーブルの一例を示す図である。
【図１３】蓄積管理テーブルの一例を示す図である。
【図１４】各ノードの機能構成の一例を示す説明図である。
【図１５】エラー発生時における処理切り替え後の各ノードの機能構成の一例を示す説明図である。
【図１６】ジョブ管理部による全体処理（処理１）の一例を示すフローチャートである。
【図１７】ジョブステップ及びノード間通信制御部を割り当てる全体処理（処理２）の一例を示すフローチャートである。
【図１８】代替ノードを選択する処理（処理３）の一例を示すフローチャートである。
【図１９】エラー発生ノードが実行していたジョブステップの実行に要する資源量を算出する処理（処理４）の一例を示すフローチャートである。
【図２０】ジョブステップ及びノード間通信制御部を割り当てる処理（処理５）の一例を示すフローチャートである。
【図２１】ジョブステップ及びノード間通信制御部を割り当てる処理（処理６）の一例を示すフローチャートである。
【図２２】蓄積部を割り当てる処理（処理７）の一例を示すフローチャートである。
【図２３】ジョブステップ及び受信部を割り当てる処理（処理８）の一例を示すフローチャートである。
【図２４】管理サーバ及びノードのハードウェア構成の一例である。
【発明を実施するための形態】
【００１２】
［ジョブの実行ノード切り替えの概要］
最初に、ジョブの並列実行の一実施態様として、それぞれがジョブの並列実行を行う複数のコンピュータで、１つのジョブに含まれる処理群であるジョブステップ群を連携して行うことについて、図１に示す具体例を参照して説明する。さらに、このようなシステムにおいて、いずれかのコンピュータで並列実行していたジョブステップ群を、他のコンピュータに切り替えて実行することについて、図２に示す具体例を参照して説明する。なお、本明細書においてジョブステップ群とは、１又は複数の連続するジョブステップを示す。
【００１３】
図１は、システムが通常稼働している状態（エラーが発生していない状態）で、現用系ノード（現用系のコンピュータ）においてパイプライン方式でジョブを並列処理しているシステムの一例の説明図である。当該システムでは、ノードＡ（１−１）、ノードＢ（１−２）及びノードＣ（１−３）の３つの現用系ノードが連携し、入力ファイルＦin（２）から順次入力された入力データのレコードを、ジョブステップＳ１〜Ｓ９００により処理し、出力ファイルＦout（３）に出力する。
【００１４】
ここで、ノードＡ（１−１）、ノードＢ（１−２）及びノードＣ（１−３）は、それぞれ３００プロセスを多重処理する処理性能を有している。そして、ノードＡ（１−１）ではジョブステップＳ１〜Ｓ３００、ノードＢ（１−２）ではジョブステップＳ３０１〜Ｓ６００、ノードＣ（１−３）ではジョブステップＳ６０１〜Ｓ９００を夫々実行している。一方、当該システムでは、ノードＸ（１−４）及びノードＹ（１−５）の２つの待機系ノード（待機系のコンピュータ）が存在している。ノードＸ（１−４）及びノードＹ（１−５）は、それぞれ２００プロセスを多重処理する処理性能を有している。
【００１５】
なお、本実施形態では説明の簡略化のため、１つのジョブステップが１プロセスであるものとして説明を行うが、かかる態様に限定されるものではない。また、以下の本実施形態の説明では、ノードＡ、ノードＢ、ノードＣ、ノードＸ及びノードＹ並びに入力ファイルＦin及び出力ファイルＦoutの符号記載を適宜省略する。
【００１６】
ノードＡのジョブステップＳ１は、入力ファイルＦinから処理対象レコードを取得する。そして、ジョブステップＳ１は当該レコードの処理を実行した後、パイプライン方式における同期型のノード内通信（図では「同期」と表記する）により、ノードＡのデータ転送バッファ（パイプ）を介して、処理済みレコードを次のジョブステップＳ２に渡す。ジョブステップＳ２は、ジョブステップＳ１からレコードを受け取ると、当該レコードの処理を実行する。なお、かかるジョブステップＳ２の処理と同時に、ジョブステップＳ１では、さらに次の処理対象レコードを取得して並列実行する。一方、ジョブステップＳ２はレコードの処理を実行した後、同様に同期型のノード内通信により、処理済みレコードを次のジョブステップ３に渡す。以降、ジョブステップＳ３〜Ｓ２９９において同様の処理が実行される。
【００１７】
ここで、ジョブステップＳ３００は、レコードの処理を実行した後、処理済みレコードを、ノードＡが備える蓄積ファイル（再送データ）に格納する。そして、ジョブステップＳ３００は、蓄積型のノード間通信（データ転送バッファを用いた同期型の通信とは異なり、メモリに格納したデータをネットワークを介して転送する通信方法であり、図では「蓄積」と表記する）により、処理済みレコードを、次のノードＢが実行するジョブステップＳ３０１に渡す。ノードＢのジョブステップＳ３０１は、ジョブステップＳ３００からレコードを受け取ると、当該レコードの処理を実行した後、同期型のノード内通信により、ノードＢのデータ転送バッファを介して、処理済みレコードを次のジョブステップＳ３０２に渡す。以降、ジョブステップＳ３０３〜Ｓ５９９において同様の処理が実行される。
【００１８】
さらに、ジョブステップＳ６００は、ジョブステップＳ３００と同様に、レコードの処理を実行した後、処理済みレコードを、ノード間通信により、次のノードＣが実行するジョブステップＳ６０１に渡す。以降、ノードＣのジョブステップＳ６０１〜Ｓ８９９において、ノードＢのジョブステップＳ３０１〜Ｓ５９９と同様の処理が実行される。
【００１９】
ジョブステップＳ９００は、レコードの処理を実行した後、処理済みレコードを、出力ファイルＦoutに出力する。
【００２０】
次に、上記現用系ノードのうちの１つのノードで実行していたジョブステップを、待機系ノードに切り替えることにつき、図２を参照して説明する。図２の例では、ノードＢが故障してエラーが発生した状態（ノードダウンした状態）を示している。この場合、ノードＢで実行していたジョブステップＳ３０１〜Ｓ６００の並列処理を、待機系ノードに切り替える。このとき、待機系ノードであるノードＸ及びノードＹのいずれも、多重処理できるプロセス数が２００であるため、それぞれ単独では、３００プロセスのジョブステップを多重処理していたノードＢの代替として動作できない。このため、ノードＢで実行していたジョブステップＳ３０１〜Ｓ６００を分割し、ノードＸ及びノードＹの両方に割り当てる。
【００２１】
ここで、例えば、ジョブステップＳ３０１〜Ｓ４００をノードＸに割り当て、ジョブステップＳ４０１〜Ｓ６００をノードＹに割り当てる場合を想定する。この場合、ジョブステップＳ４００とジョブステップＳ４０１とが異なるノードで実行されることとなるため、ジョブステップＳ４００とジョブステップＳ４０１との間は、ノード間通信を行うこととなる。
【００２２】
しかし、元々ジョブステップＳ４００とジョブステップＳ４０１との間は、ノードＢにおいて同期型のノード内通信を行っていたため、ジョブステップＳ４００は、ジョブステップＳ４０１に対してノード間通信を行うことができない。そして、ジョブステップＳ４００によって処理したデータの蓄積ファイルを保持していない。このため、例えば、別ノードで動作することとなったジョブステップＳ４０１からデータの配信要求を受信しても、ジョブステップＳ４００では配信できるデータを保持しておらず、要求に応じることができない。このように、ジョブステップＳ３０１〜Ｓ６００を単純に分割し、ノードＸ及びノードＹに割り当てようとしても、ジョブステップＳ４００とジョブステップＳ４０１との間においてノード間通信を行うことができず、正常に動作させることが困難である。
【００２３】
このため、本実施形態では、同期型のノード内通信からノード間通信となるジョブステップ間の通信の切り替えを自動的に実現するようにする。これにより、エラー発生ノードにおいて並列実行していたジョブステップ群を、複数の代替ノードに自動的に切り替えることが可能となり、処理の再開までに要する時間を短縮することができる。また、このような切り替えは、エラーが発生した場合に限らず、例えばシステムのメンテナンスの際や、サーバ増設等のシステム構成の変更の際などにも適用することができる。
以下、上記の処理を実現するための具体的構成や、処理の詳細について説明する。
【００２４】
［システムの全体構成］
図３は、本実施形態におけるシステムの全体構成の一例を示す。本システムは、管理サーバ１０、現用系ノードであるノードＡ、ノードＢ及びノードＣ、待機系ノードであるノードＸ及びノードＹを備える。管理サーバ１０、ノードＡ、ノードＢ及びノードＣ並びにノードＸ及びノードＹは、ネットワークを介して相互に通信可能に接続されている。ネットワークは、例えばＬＡＮ（Local Area Network）やＷＡＮ（Wide Area Network）等であり、有線接続又は無線接続のいずれであってもよい。
【００２５】
管理サーバ１０は、各ノードで実行するジョブの管理を行うコンピュータであり、各ノードへのジョブステップ等の割り当てや、ジョブの実行ノードの切り替え等を行う。
【００２６】
現用系ノードであるノードＡ、ノードＢ及びノードＣは、前述したように、いずれもジョブを並列実行するコンピュータであり、正常稼働時において、１つのジョブに含まれる複数のジョブステップを連携して実行している。
【００２７】
待機系ノードであるノードＸ及びノードＹは、正常稼働時には待機状態となっており、ノードＡ、ノードＢ及びノードＣのいずれかにエラーが発生したときに、管理サーバ１０によって割り当てられたジョブステップを実行する。
【００２８】
なお、ノードＡ、ノードＢ及びノードＣが処理するジョブステップの入力ファイルＦin及び出力ファイルＦoutがノードＡ、ノードＢ及びノードＣとは別のノードに存在する場合には、入力ファイルＦinや出力ファイルＦoutを備えるノードがさらに存在する。当該ノードについては、図示を省略する。
【００２９】
［管理サーバの機能構成及びデータ構成］
図４は、管理サーバ１０の機能構成及びデータ構成を示す。管理サーバ１０は、ジョブ管理プログラムがロードされて実行されることによって機能が実現されるジョブ管理部１１を備える。ジョブ管理部１１は、処理中断部１２、代替ノード選択部１３、ジョブステップ割当部１４、通信制御配置部１５、処理再開部１６を備える。
【００３０】
ジョブ管理部１１は、ノードのエラー発生時に、代替ノードへの切り替え処理全体を行う。
処理中断部１２は、エラー発生ノードに対するデータの配信処理、及び当該ノードからのデータの受信処理を一時中断する。
【００３１】
代替ノード選択部１３は、エラー発生ノードが実行していたジョブステップ等の実行に要する資源量を算出し、当該ジョブステップを実行することが可能な代替ノードを、待機系ノードから選択する。なお、本明細書において「資源量」とは、例えば、処理可能なプロセス数などの処理性能の基準となるＣＰＵ資源量や、使用可能メモリ量、使用可能ディスク容量等の記憶手段の資源量等の少なくとも１つを含むものである。
【００３２】
ジョブステップ割当部１４は、選択された代替ノードに対し、エラー発生ノードが実行していたジョブステップを割り当てる。
【００３３】
通信制御配置部１５は、選択された代替ノードに対し、ジョブステップ間においてノード間通信を行うためのノード間通信制御部（詳細は後述する）を配置する。
【００３４】
処理再開部１６は、代替ノードを用いて、処理中断部１２により中断していた処理を再開する。
【００３５】
さらに、管理サーバ１０は、記憶手段において、ノード管理テーブル２１、ジョブステップ管理テーブル２２及びリソース管理テーブル２３、並びに配信管理テーブル２４、受信管理テーブル２５及び蓄積管理テーブル２６を備える。
【００３６】
ノード管理テーブル２１は、各ノードの資源量等を示す情報が格納されるテーブルである。なお、ノード管理テーブル２１は、図５に示すように、ノードの識別子である［ノード名］、ノードが正常に稼働しているか否かを示す［状態］、現在ノードに割り当てられているジョブステップ等のプロセス数を示す［プロセス数］、ノードにおいて実行することが可能な最大プロセス数を示す［最大プロセス数］、ノードにおける現在のメモリ使用量及び最大のメモリ容量をそれぞれ示す［メモリ使用量］及び［最大メモリ容量］、ノードにおける現在のディスク使用量及び最大のディスク容量をそれぞれ示す［ディスク使用量］及び［最大ディスク容量］の項目を含む。
【００３７】
ジョブステップ管理テーブル２２は、各ジョブステップが割り当てられているノードや入出力に関する情報が格納されるテーブルである。なお、ジョブステップ管理テーブル２２は、システム管理者等が予め設定した、図６に示すようなジョブステップ定義が展開されて生成される。ジョブステップ管理テーブル２２は、図６及び図７に示すように、ジョブステップの識別子である［ステップ名］、ジョブステップが割り当てられているノードを示す［配置ノード］、ジョブステップが処理するレコードの配信元のリソース（ジョブステップ又は入力ファイル）を示す［入力］、ジョブステップが処理するレコードの配信先のリソース（ジョブステップ又は出力ファイル）を示す［出力］の項目を含む。
【００３８】
リソース管理テーブル２３は、各リソース（入出力ファイルやジョブステップ、キュー（詳細は後述する）を含む）の資源量や詳細情報等が格納されるテーブルである。なお、リソース管理テーブル２３は、システム管理者等が予め設定した、図８に示すようなノード定義が展開されて生成される。リソース管理テーブル２３は、図９及び図１０に示すように、リソースの識別子である［リソース名］、リソースの種別を示す［種別］、リソースがジョブステップの割り当て状況に応じて動的に有する資源量を示す［動的資源］、リソースに関する詳細情報を示す［リソース詳細］の項目を含む。
【００３９】
以下に説明する配信管理テーブル２４、受信管理テーブル２５及び蓄積管理テーブル２６は、全てのノードが参照可能なテーブルである。これらのテーブルは、例えば、各ノードがアクセス可能な分散共有メモリ等に格納されていてもよい。
【００４０】
配信管理テーブル２４は、ジョブステップ間の通信や入力ファイルＦinとジョブステップとの間の通信におけるレコードの配信処理を行う配信部３１（詳細は後述する）に関連する情報が格納されるテーブルである。配信管理テーブル２４は、図１１に示すように、配信部３１の識別子である［配信部］、当該配信部３１により配信するデータに関する情報を示す［データソース］、当該配信部３１が配置されている［配置ノード］の項目を含む。
【００４１】
受信管理テーブル２５は、ジョブステップ間の通信や入力ファイルＦinとジョブステップとの間の通信におけるレコードの受信処理を行う受信部３２（詳細は後述する）に関連する情報が格納されるテーブルである。受信管理テーブル２５は、図１２に示すように、受信部３２の識別子である［受信部］、当該受信部３２が受信するデータを配信する配信部３１を示す［対応配信部］、当該受信部３２において現在受信済みのレコードの番号を示す［受信済みレコード］、当該受信部３２が配置されている［配置ノード］の項目を含む。
【００４２】
蓄積管理テーブル２６は、ジョブステップによる処理済みレコードを蓄積ファイル３４に格納する蓄積部３３（詳細は後述する）に関連する情報が格納されるテーブルである。蓄積管理テーブル２６は、図１３に示すように、蓄積部３３の識別子である［蓄積部］、蓄積ファイル３４に格納されている処理済みレコードの番号を示す［処理済みレコード］、当該蓄積部が配置されている［配置ノード］の項目を含む。
【００４３】
［ノードの機能構成］
次に、ジョブステップを実行する各ノードが備える機能構成について説明する。
ここで、本実施形態の説明では、入力ファイルから１レコードずつ入力されて各ジョブステップで順次処理され出力ファイルに出力されるデータをレコードごとに管理したものを、「キュー」として取り扱う。そして、当該キューを、ノード間通信におけるレコードの配信及び受信並びにジョブステップによる処理済みレコードの蓄積を行う単位ごとに分割したものを、「サブキュー」として取り扱う。
【００４４】
図１４は、サブキューとノードにおける機能構成とを関連付けて説明した図である。
図１４の例では、キューを処理するジョブステップＳ１〜Ｓ９００のうち、ジョブステップＳ１〜Ｓ３００をノードＡで実行し、ジョブステップＳ３０１〜Ｓ６００をノードＢで実行し、ジョブステップＳ６０１〜Ｓ９００をノードＣで実行する。
【００４５】
そして、図１４に示すように、本実施形態のシステムでは、ノード間通信を制御するノード間通信制御部３０を備える。そして、ノード間通信制御部３０は、配信部３１、受信部３２及び蓄積部３３を備える。そして、これらの配信部３１、受信部３２及び蓄積部３３のセットを１つのサブキューとしてキューを分割して取り扱う。換言すれば、それぞれのサブキューごとに配信部３１、受信部３２及び蓄積部３３のセットが対応付けられる。図１４の例では、キューが、サブキュー１〜３の３つに分割される。そして、ノードＡが実行するジョブステップＳ１〜Ｓ３００がサブキュー１を処理し、ノードＢが実行するジョブステップＳ３０１〜Ｓ６００がサブキュー２を処理し、ノードＣが実行するジョブステップＳ６０１〜Ｓ９００がサブキュー３を処理する。また、サブキュー１には配信部Ｆin、受信部Ｓ１及び蓄積部Ｓ３００が対応付けられ、サブキュー２には配信部Ｓ３００、受信部Ｓ３０１及び蓄積部Ｓ６００が対応付けられ、サブキュー３には配信部Ｓ６００、受信部Ｓ６０１及び蓄積部Ｓ９００が対応付けられる。
【００４６】
以下、ノード間通信制御部３０における、配信部３１、受信部３２及び蓄積部３３の機能について説明する。ここではまず、レコードの配信元が蓄積ファイル３４であって処理済みレコードを蓄積ファイル３４に格納するサブキュー（すなわち最初及び最後以外のサブキューであり、図１４の例ではサブキュー２に相当）に対応する配信部３１、受信部３２及び蓄積部３３について説明する。その後、最初及び最後のサブキューにおける例外的な内容について説明する。
【００４７】
配信部３１は、サブキューへのレコードの配信元のジョブステップ（すなわち、当該サブキューを処理する最初のジョブステップの１つ前のジョブステップ）に対応付けられ、配信元のジョブステップによる処理済みレコード（最新でない場合には、当該サブキューに配信されるレコードが蓄積される蓄積ファイル３４に蓄積された処理済みレコード）を、蓄積部３３から取得する。そして、取得した処理済みレコードを、次のジョブステップ（すなわち、当該サブキューを処理する最初のジョブステップ）に対応する受信部３２に配信する。具体的には、配信部３１は、同じジョブステップに対応する蓄積部３３に関する情報を、配信管理テーブル２４の［データソース］を参照して特定する。そして、当該蓄積部３３からレコードを取得して、受信部に配信する。
【００４８】
受信部３２は、サブキューのレコードを処理する最初のジョブステップに対応付けられ、対応する配信部３１からデータを受信する。具体的には、受信部３２は、受信管理テーブル２５の［受信済みレコード］の番号を取得する。さらに、受信管理テーブルの［対応配信部］を参照して、受信するデータの配信元となる配信部３１を特定し、特定した配信部３１に対して、受信済みレコードの次の番号のレコードを要求する。そして、配信部３１からレコードを受信する。受信部３２により受信されたレコードは、当該サブキューを処理するジョブステップにより、順次処理される。また、受信部３２は、レコードを受信するごとに、受信管理テーブル２５の［受信済みレコード］を順次更新する。
【００４９】
蓄積部３３は、サブキューのレコードを処理するジョブステップにより順次処理された処理済みレコードを取得し、蓄積ファイル３４に蓄積するとともに、同じジョブステップに対応する配信部３１に渡す。このとき、蓄積部３３は、蓄積管理テーブル２６の［処理済みレコード］を順次更新する。なお、配信部３１に渡すべきレコードが最新の処理による処理済みレコードでない場合（受信部３２からの再送要求に応じる場合等）には、蓄積ファイル３４に蓄積された処理済みレコードを配信部３１に渡す。
【００５０】
ここで、これらの配信部３１、受信部３２及び蓄積部３３と各ノードとの配置関係について説明する。図１４のサブキュー２の具体例で説明すると、サブキュー２に対応する配信部Ｓ３００（３１−１−２）は、サブキュー２のレコードを処理する最初のジョブステップＳ３０１の１つ前のジョブステップＳ３００を実行するノードＡに配置される。そして、サブキュー２に対応する受信部Ｓ３０１（３２−２）及び蓄積部Ｓ６００（３３−２）は、当該サブキューを処理するジョブステップを実行するノードＢに配置される。
【００５１】
ここで、最初のサブキュー、すなわち、図１４のサブキュー１の具体例のように、サブキューのレコードの配信元が入力ファイルＦinの場合は、例外的に、配信部Ｆin（３１−１−１）が受信部Ｓ１（３２−１）及び蓄積部Ｓ３００（３３−１）と同じノードＡに配置される。また、この場合、上記説明のうち、「配信元のジョブステップによる処理済みレコード」や「配信元の蓄積ファイル３４」は、入力ファイルＦinと読み替える。
【００５２】
また、最後のサブキュー、すなわち、図１４のサブキュー３の具体例のように、サブキューのレコードの配信先が出力ファイルＦoutの場合は、蓄積ファイル３４を配置せず、蓄積部Ｓ９００（３３−３）は、出力ファイルＦoutに処理済みレコードを直接出力すればよい。
【００５３】
このように、各ノードにおいて、サブキューごとにこれらの配信部３１、受信部３２及び蓄積部３３を備えることにより、ジョブステップに対してノード間通信が隠ぺいされる。
【００５４】
各ノードは、さらに、ジョブステップの実行を制御するジョブ制御部４０及びジョブステップ群５０を備える。ジョブ制御部４０は、ジョブステップ群５０に含まれる各ジョブステップの実行、及び同期型のノード内通信を制御する。ジョブ制御部４０は、プロセス管理部４１及びデータ転送用バッファ４２を備える。
【００５５】
プロセス管理部４１は、ジョブステップをパイプライン方式で実行するプロセスを管理する。
データ転送用バッファ４２は、ジョブステップ間における同期型のノード内通信において、レコードを受け渡しするバッファ（パイプ）である。
【００５６】
なお、入力ファイルＦinはノードＡが備えていても、他のコンピュータが備えていてもよい。出力ファイルＦoutも同様であり、ノードＣが備えていても、他のコンピュータが備えていてもよい。
【００５７】
＜エラー発生時における代替ノードへのジョブステップ割り当て及びノード間通信制御部の配置、並びに処理再開レコードの特定方法の概要＞
次に、図１４に示す状態においてノードにエラーが発生した場合における代替ノードへのジョブステップ割り当て及びノード間通信制御部の配置、並びに処理再開レコードの特定方法の概要について、図１５を参照して説明する。また、本説明では、図５〜図１３に示した各テーブルのデータ内容を適宜参照する。なお、以下の本実施形態の説明において、対応するジョブステップが明記されている配信部３１、受信部３２、蓄積部３３及び蓄積ファイル３４については、符号記載を適宜省略する。
【００５８】
図１５では、ジョブステップＳ３０１〜Ｓ６００を実行していたノードＢにエラーが発生し、ノードＢで実行していたジョブステップの処理をノードＸ及びノードＹに割り当てる例を示している。具体的には、ジョブステップＳ３０１〜Ｓ４００をノードＸに割り当て、ジョブステップＳ４０１〜Ｓ６００をノードＹに割り当てるものとする。なお、図１５では、ジョブ制御部４０の表示を省略している。
【００５９】
（１）管理サーバ１０の処理中断部１２は、ノード管理テーブル２１のうち、エラーが発生したノードＢの［状態］を「Faulted（休止中）」にする（図５の＜エラー発生時＞参照）。そして、処理中断部１２は、サーバＡの配信部Ｓ３００による配信処理及びサーバＣの受信部Ｓ６０１による受信処理を、一時中断する。
【００６０】
（２）処理中断部１２は、配信管理テーブル２４から、配信部Ｓ６００に対応するデータを削除する（図１１の＜エラー発生時＞参照）。また、ジョブ管理部１１は、受信管理テーブル２５から、受信部Ｓ３０１に対応するデータを削除する（図１２の＜エラー発生時＞参照）。
【００６１】
（３）管理サーバ１０の通信制御配置部１５は、まず、ノードＹに、配信部Ｓ６００を配置する。このとき、通信制御配置部１５は、配信管理テーブル２４に、配信部Ｓ６００に対応するデータを追加する（図１１の＜処理切り替え後＞参照）。
【００６２】
（４）通信制御配置部１５は、ノードＹに、蓄積部Ｓ６００を配置する。このとき、通信制御配置部１５は、蓄積管理テーブル２６のうち、蓄積部Ｓ６００に対応するデータの［配置ノード］を、ノードＢからノードＹに更新する（図１３の＜処理切り替え後＞参照）。
【００６３】
（５）ジョブステップ割当部１４は、ノードＹに、ジョブステップＳ４０１〜Ｓ６００を割り当てる。このとき、ジョブステップ割当部１４は、ジョブステップ管理テーブル２２のうち、ジョブステップＳ４０１〜Ｓ６００の［配置ノード］を、ノードＢからノードＹに更新する（図７の＜処理切り替え後＞参照）。
【００６４】
（６）通信制御配置部１５は、ノードＹに、受信部Ｓ４０１を配置する。このとき、通信制御配置部１５は、受信管理テーブル２５に、受信部Ｓ４０１に対応するデータを追加する（図１２の＜処理切り替え後＞参照）。この追加データの［受信済みレコード］には、蓄積管理テーブル２６のうち、同じノードＹに割り当てられるジョブステップの末尾であるジョブステップＳ６００に対応する蓄積部Ｓ６００に対応するデータの［処理済みレコード］である「８０１」を格納する。
【００６５】
（７）通信制御配置部１５は、次に、ノードＸに、配信部Ｓ４００を配置する。このとき、通信制御配置部１５は、配信管理テーブル２４に、配信部Ｓ４００に対応するデータを追加する（図１１の＜処理切り替え後＞参照）。
【００６６】
（８）通信制御配置部１５は、ノードＸに、蓄積部Ｓ４００を配置する。このとき、通信制御配置部１５は、蓄積管理テーブル２６に、蓄積部Ｓ４００に対応するデータを追加する（図１３の＜処理切り替え後＞参照）。この追加データの［処理済みレコード］には、蓄積管理テーブル２６のうち、蓄積部Ｓ４００に対応するデータの１つ後のデータである蓄積部Ｓ６００に対応するデータの［処理済みレコード］である「８０１」を格納する。
【００６７】
（９）ジョブステップ割当部１４は、ノードＸに、ジョブステップＳ３０１〜Ｓ４００を割り当てる。このとき、ジョブステップ割当部１４は、ジョブステップ管理テーブル２２のジョブステップＳ３０１〜Ｓ４００の［配置ノード］を、ノードＢからノードＹに更新する（図７の＜処理切り替え後＞参照）。
【００６８】
（１０）通信制御配置部１５は、ノードＸに、受信部Ｓ３０１を配置する。このとき、通信制御配置部１５は、受信管理テーブル２５に、受信部Ｓ３０１に対応するデータを追加する（図１２の＜処理切り替え後＞参照）。この追加データの［受信済みレコード］には、蓄積管理テーブル２６のうち、同じノードＸに割り当てられるジョブステップの末尾であるジョブステップＳ４００に対応する蓄積部Ｓ４００に対応するデータの［処理済みレコード］である「８０１」を格納する。これにより、受信部Ｓ３０１は、かりにノードＡにおける蓄積部Ｓ３００の処理済みレコードが図１３に示すように「１００１」だとしても、エラー発生ノードであるノードＢによって処理が完了していたレコードである「８０２」から処理を再開することができる。このため、全体として処理の抜けを防ぐことが可能となる。
【００６９】
なお、上記処理により、エラーが発生したノードＢが実行していたジョブステップＳ３０１〜Ｓ６００に対応するサブキュー２は、ジョブステップＳ３０１〜Ｓ４００に対応するサブキュー２−１及びジョブステップＳ４０１〜Ｓ６００に対応するサブキュー２−２に分割される。そして、サブキュー２−１には配信部Ｓ３００、受信部Ｓ３０１及び蓄積部Ｓ４００が対応付けられ、サブキュー２−２には配信部Ｓ４００、受信部Ｓ４０１及び蓄積部Ｓ６００が対応付けられる。
【００７０】
（１１）管理サーバ１０の処理再開部１６は、サーバＡの配信部Ｓ３００による配信処理及びサーバＣの受信部Ｓ６０１による受信処理を再開させる。このとき、サーバＸの受信部Ｓ３０１は、受信管理テーブル２５において受信部Ｓ３０１に対応するデータの［処理済みレコード］が「８０１」となっているため、サーバＡの配信部Ｓ３００に対し、レコード「８０２」からデータの配信要求を行う。その結果、代替ノードであるノードＸ及びノードＹにおいてレコード「８０２」から処理が再開され、蓄積部Ｓ４００及び蓄積部Ｓ６００は、新たにレコード「８０２」以降のデータを、それぞれ蓄積ファイルＳ４００及び蓄積ファイルＳ６００に保持することとなる。
【００７１】
ここで、ノードＢのエラー発生前にはジョブステップＳ４００〜Ｓ４０１において同期型のノード内通信が行われていたが、これらの（１）〜（１１）により、ノードＸ及びノードＹでは次のような処理が実現される。すなわち、ノードＸの蓄積部Ｓ４００が、ノードＸに割り当てられたジョブステップＳ４００の処理済みレコードを取得し、蓄積ファイルＳ４００に蓄積する一方、配信部Ｓ４００に渡す。そして、配信部Ｓ４００が当該処理済みレコードをノードＹの受信部Ｓ４０１に配信する。そして、当該レコードが、ノードＹの受信部Ｓ４０１により受信され、ノードＹに割り当てられたジョブステップＳ４０１以降のジョブステップにより処理される。このように、ジョブステップＳ４００〜Ｓ４０１における同期型のノード内通信は、少なくともノードＸに蓄積部Ｓ４００及び配信部Ｓ４００が配置され、ノードＹにおいて受信部Ｓ４０１が配置されることにより、ノード間通信に自動的に切り替えられる。
【００７２】
＜エラー発生時における処理の詳細フロー＞
次に、管理サーバ１０のジョブ管理部１１（処理中断部１２、代替ノード選択部１３、ジョブステップ割当部１４、通信制御配置部１５、処理再開部１６）において実行される処理の詳細につき、図１６〜図２４に示すフローチャートを参照しながら説明する。なお、以下の説明において、エラーが発生したノードは、ジョブステップＳbeginからジョブステップＳendを実行していたものとして記載する。
【００７３】
図１６は、ジョブステップを実行しているノードにおいてエラーが発生したときに、管理サーバ１０のジョブ管理部１１において実行される全体処理の一例（処理１）を示す。
【００７４】
ステップＳ１で、処理中断部１２は、ノード管理テーブル２１のデータのうち、［ノード名］がエラー発生ノードであるデータの［状態］を「Faulted（休止中）」に更新する。
【００７５】
ステップＳ２で、処理中断部１２は、ジョブステップ管理テーブル２２の［ステップ名］及び［配置ノード］を参照し、エラー発生ノードが実行していたジョブステップを特定する。そして、処理中断部１２は、エラー発生ノードが実行していた先頭のジョブステップＳbeginの直前のジョブステップＳbegin-1を実行していたノードが処理済みレコードを配信する処理、すなわち、配信部Ｓbegin-1による配信処理を一時中断させる。一方で、処理切り替え部は、エラー発生ノードが実行していた末尾のジョブステップＳendの直後のジョブステップＳend+1を実行していたノードが処理済みレコードを受信する処理、すなわち、受信部Ｓend+1による受信処理を一時中断させる。
【００７６】
ステップＳ３で、ジョブ管理部１１は、配信管理テーブル２４のデータのうち、［配信部］が、エラー発生ノードが実行していた末尾のジョブステップＳendに対応する配信部Ｓendであるデータを削除する。一方、処理切り替え部は、受信管理テーブル２５のデータのうち、［受信部］が、エラー発生ノードが実行していた先頭のジョブステップＳbeginに対応する受信部Ｓbeginであるデータを削除する。なお、蓄積ファイル３４の格納場所がエラー発生ノードと一致する場合や、蓄積ファイル３４がミラーリングされていた分散共有メモリのミラー先のノードが失われた状態等の場合（アクセス不可の場合）には、蓄積管理テーブル２６のデータのうち、［蓄積部］が、エラー発生ノードが実行していた末尾のジョブステップＳendに対応する蓄積部Ｓendであるデータ（ジョブステップＳbegin〜Ｓendに関連付けられたデータ）をさらに削除する。
【００７７】
ステップＳ４で、ジョブ管理部１１は、［ｐ］に、エラー発生ノードが実行していた先頭のジョブステップＳbeginのジョブステップ番号を代入する。
【００７８】
ステップＳ５で、ジョブ管理部１１は、［ｑ］に、エラー発生ノードが実行していた末尾のジョブステップＳendのジョブステップ番号を代入する。
【００７９】
ステップＳ６で、ジョブ管理部１１は、待機系ノードに対し、エラー発生ノードで実行していたジョブステップＳbegin〜Ｓendの割り当て及びノード間通信制御部３０の配置処理（処理２、図１７）を行う。当該処理では、全てのジョブステップ及びノード間通信制御部３０の配置が完了した場合には「true」の戻り値を返し、完了していない場合には「false」の戻り値を返す。当該処理の内容については後述する。
【００８０】
ステップＳ７で、ジョブ管理部１１は、ステップＳ６の処理の結果、全てのジョブステップ及びノード間通信制御部３０の配置が完了したか否かを判定する。完了していれば（Ｙｅｓ）、ステップＳ８に進み、完了していない場合には（Ｎｏ）、ステップＳ９に進む。
【００８１】
ステップＳ８で、処理再開部１６は、ステップＳ２で一時中断していた、配信部Ｓbegin-1による配信処理及び受信部Ｓend+1による受信処理を再開させる。
【００８２】
ステップＳ９で、処理再開部１６は、エラー処理を行う。具体的には、エラー発生ノードが実行していたジョブステップＳbeginからジョブステップＳendのうち、他のノードに処理を割り当てられなかったジョブステップがあったり、ノード間通信制御部３０を全て配置できていない場合、処理再開部１６は、ジョブを異常終了させる。なお、この場合、処理再開部１６は、当該ジョブステップの割り当てやノード間通信制御部３０の配置を行なうことが可能なノードが得られるまで待機状態としてもよい。
【００８３】
図１７は、待機系ノードに対してジョブステップの割り当て及びノード間通信制御部３０の配置を行なう全体処理の一例（処理２）を示す。当該処理は、前述した処理１のステップＳ６の処理に対応する。なお、当該処理では、エラー発生ノードで実行していたジョブステップＳbeginからジョブステップＳendを、後ろのジョブステップから順に、代替ノードに割り当てていく。
【００８４】
ステップＳ１１で、代替ノード選択部１３は、エラー発生ノードで実行していたジョブステップ及びノード間通信制御部３０を配置することが可能な代替ノードを選択する処理（処理３、図１８）を行う。当該処理では、代替ノードを選択できた場合には、選択した代替ノードを示す戻り値を返し、代替ノードを選択できなかった場合には、「null」の戻り値を返す。当該処理の内容については後述する。
【００８５】
ステップＳ１２で、代替ノード選択部１３は、ステップＳ１１の処理の結果、代替ノードを選択できたか否かを判定する。代替ノードを選択できた場合には（Ｙｅｓ）、ステップＳ１３に進み、代替ノードを選択できなかった場合には、戻り値「false」を返して当該処理を終了する。
【００８６】
ステップＳ１３で、ジョブ管理部１１は、ステップ１１で選択した代替ノードに、ジョブステップ及びノード間通信制御部３０を配置する処理（処理５、図２０）を行う。当該処理では、全てのジョブステップの割り当て及びノード間通信制御部３０の配置が完了した場合には「true」の戻り値を返し、完了していない場合には「false」の戻り値を返す。当該処理の内容については後述する。
【００８７】
ステップＳ１４で、ジョブ管理部１１は、ステップＳ１３の処理の結果、全てのジョブステップの割り当て及びノード間通信制御部３０の配置が完了したか否かを判定する。割り当て等が完了した場合には（Ｙｅｓ）、戻り値「true」を返して当該処理を終了する。割り当て等が未完了の場合には（Ｎｏ）、ステップＳ１５に進む。
【００８８】
ステップＳ１５で、ジョブ管理部１１は、変数ｑに、［ｐ−１］を代入する(ｐは、ステップＳ１３で割当てを行った先頭のジョブステップ番号)。そして、ステップＳ１１に戻り、次の代替ノードにジョブステップを割り当てる処理を実行する。
【００８９】
図１８は、エラー発生ノードで実行していたジョブステップを割り当てることが可能な代替ノードを選択する処理（処理３）を示す。当該処理は、前述したステップＳ１１の処理に対応する。
【００９０】
ステップＳ２１で、代替ノード選択部１３は、ジョブステップの割り当て及びノード間通信制御部３０の配置に要する資源量を算出する処理（処理４、図１９）を行う。当該処理では、算出した資源量を示す戻り値を返す。資源量とは、例えば、ジョブステップ及びノード間通信制御部３０が使用するプロセス数の最大値及び最小値、メモリ使用量の最大値及び最小値、ディスク使用量の最大値及び最小値等である。当該処理の内容については後述する。
【００９１】
ステップＳ２２で、代替ノード選択部１３は、ノード管理テーブル２１を参照し、［状態］が「Active」以外のノードを、代替ノードの選択候補から除外する。
【００９２】
ステップＳ２３で、代替ノード選択部１３は、リソース管理テーブル２３のうち、［リソース名］が現在処理をしているキューであるデータの［リソース詳細］を参照し、当該キューのデータがミラーリングされているか否かを特定する。なお、ミラーリングは、例えばノード間の分散共有メモリ等を用いて行う。ミラーリングされている場合には、ミラーリングされたデータにアクセス可能なノードのみを選択候補とし、アクセスできないノードを選択候補から除外する。なお、ミラーリングされていない場合には、本ステップにおいて特に選択候補の除外は行わない。
【００９３】
ステップＳ２４で、代替ノード選択部１３は、ノード管理テーブル２１を参照し、ステップ２１の処理で算出した資源量の最小値（例えば、プロセス数の最小値、メモリ使用量の最小値、ディスク使用量の最小値）を満たさないノードを、選択候補から除外する。
【００９４】
ステップＳ２５で、代替ノード選択部１３は、選択候補のノードが存在するか否かを判定し、存在すれば（Ｙｅｓ）、ステップＳ２６に進む一方、存在しなければ（Ｎｏ）、戻り値「null」を返して当該処理を終了する。
【００９５】
ステップＳ２６で、代替ノード選択部１３は、ノード管理テーブル２１を参照し、各ノードの資源量と、ステップ２１の処理で算出した資源量の最大値とに基づき、ジョブステップの割り当て及びノード間通信制御部３０の配置が可能な代替ノードを選択する。そして、選択した代替ノードを戻り値として返して当該処理を終了する。
【００９６】
なお、当該代替ノードの選択において判断基準とする各ノードの資源量は、ノード管理テーブル２１のデータに基づき、次のように算出することができる。例えば、ノードで実行可能なプロセス数は、ノード管理テーブル２１の［最大プロセス数］から［プロセス数］を差し引いて算出することができる。同様に、ノードで使用可能なメモリ容量は、ノード管理テーブル２１の［最大メモリ容量］から［メモリ使用量］を差し引いて算出することができ、ノードで使用可能なディスク容量は、ノード管理テーブル２１の［最大ディスク容量］から［ディスク使用量］を差し引いて算出することができる。
【００９７】
ここで、代替ノード選択部１３は、次のような優先順位に基づいて代替ノードを選択することが望ましい。まず、できる限り少ない（最小の）ノード数でジョブステップの割り当て等を行うことが可能なノードの組合せを選択する。ノード内通信と比較して時間のかかるノード間通信を少なくするためである。その上で、算出した資源量の最大値にできる限り近い（超え幅が少ない）ノードの組合せ、換言すれば、代替コンピュータの資源量の合計が、算出した資源量に最も近いノードの組合せを選択する。さらなるエラー発生時におけるジョブステップの切り替えや他のジョブの実行に備えて、資源量の多いノードを有効に残しておくためである。
【００９８】
なお、かかる代替ノードの選択では、例えばネットワークにおける距離の近さ等をさらに考慮してもよい。また、ノード管理テーブル２１のデータを資源量の多い順にソートしておくことで、上記選択をする際におけるノード管理テーブル２１のデータの読み込み数を少なくし、効率的な選択処理を実現することが可能となる。
【００９９】
図１９は、ジョブステップの割り当て及びノード間通信制御部３０の配置に要する資源量を算出する処理（処理４）を示す。当該処理は、前述したステップＳ２１の処理に対応する。
【０１００】
当該処理では、資源量の一例として、ジョブステップ及びノード間通信制御部３０が使用するプロセス数の最大値及び最小値、メモリ使用量の最大値及び最小値、ディスク使用量の最大値及び最小値を算出する。
【０１０１】
ステップＳ３１で、代替ノード選択部１３は、プロセス数の最大値及び最小値、メモリ使用量の最大値及び最小値、ディスク使用量の最大値及び最小値をリセットする（初期値０にする）。
【０１０２】
ステップＳ３２で、代替ノード選択部１３は、ジョブステップＳqに対応する配信部が必要か否か、すなわち、後続のサブキューが存在するか否かを判定する。当該判定は、ジョブステップＳqがジョブステップＳendであるか否かを判定することと同義である。後続するサブキューがあり、ジョブステップＳqに対応する配信部が必要（Ｓq！＝Ｓend）の場合は（Ｙｅｓ）、ステップ３３に進み、後続のサブキューがなく、ジョブステップＳqに対応する配信部が不要（Ｓq＝Ｓend）の場合は（Ｎｏ）、ステップ３４に進む。
【０１０３】
ステップＳ３３で、代替ノード選択部１３は、リソース管理テーブル２３のうち、［リソース名］が現在処理をしているキューであるデータの［リソース詳細］を参照し、これまでに算出した資源量に、配信部Ｓqの処理に要する資源量を加算する。具体的には次の値をそれぞれ加算する。
【０１０４】
プロセス数の最大値及び最小値：配信部Ｓqのプロセス数
メモリ使用量の最大値及び最小値：配信部Ｓqのメモリサイズ
ディスク使用量の最大値及び最小値：配信部Ｓqのディスクサイズ
ステップＳ３４で、代替ノード選択部１３は、配信部Ｆin（入力ファイルＦinからのレコードの配信部）のみの配置か否かを判定する。配信部Ｆinのみの配置の場合は（Ｙｅｓ）、ステップ３７に進み、計算した資源量を戻り値として返して処理を終了する。なお、配信部Ｆinのみの配置の場合とは、ジョブステップＳbeginがジョブステップＳ１であって、かつ、配信部Ｆinと受信部Ｓpが別ノードに割り当てられるという数少ないケースにおいて、受信部Ｓp以降の配置又は割り当てがすでに行なわれている場合である（後述のステップ４１も同様）。一方、配信部Ｆin以外の配置や割り当てがある場合には（Ｎｏ）、ステップ３５に進む。
【０１０５】
ステップＳ３５で、代替ノード選択部１３は、リソース管理テーブル２３の各データを参照し、これまでに算出した資源量に、蓄積部Ｓq、ジョブステップＳbegin〜Ｓq、受信部Ｓbeginの処理に要する資源量をさらに加算する。具体的には次の値をそれぞれ加算する。
【０１０６】
プロセス数の最小値：蓄積部Ｓqのプロセス数＋１＋受信部Ｓbeginのプロセス数
プロセス数の最大値：蓄積部Ｓqのプロセス数＋ジョブステップＳbeginからジョブステップＳqのプロセス数合計＋受信部Ｓbeginのプロセス数
メモリ使用量の最小値：蓄積部Ｓqのメモリ使用量＋ジョブステップＳqのメモリ使用量＋受信部Ｓbeginのメモリ使用量
メモリ使用量の最大値：蓄積部Ｓqのメモリ使用量＋ジョブステップＳbeginからジョブステップＳqのメモリ使用量の合計＋受信部Ｓbeginのメモリ使用量
ディスク使用量の最小値：蓄積部Ｓqのディスク使用量＋ジョブステップＳqのディスク使用量＋受信部Ｓbeginのディスク使用量
ディスク使用量の最大値：蓄積部Ｓqのディスク使用量＋ジョブステップＳbeginからジョブステップＳqのディスク使用量の合計＋受信部Ｓbeginのディスク使用量
【０１０７】
なお、メモリ使用量の最大値は、メモリ使用量がジョブステップごとに均一な値であれば、「(ジョブステップＳbeginからジョブステップＳqのメモリ使用量の平均値)×(プロセス数)」といった指定でも良い（ディスク使用量も同様である）。
【０１０８】
ステップＳ３６で、代替ノード選択部１３は、受信部Ｓbeginが受信部Ｓ１であるか否かを判定し、受信部Ｓ１である場合に（Ｙｅｓ）、ステップＳ３７に進む一方、そうでない場合（Ｎｏ）には、計算した資源量を戻り値として返して処理を終了する。
【０１０９】
ステップＳ３７で、代替ノード選択部１３は、リソース管理テーブル２３のうち、［リソース名］が現在処理をしているキューであるデータの［リソース詳細］を参照し、これまでに算出した資源量に、配信部Ｆinに要する資源量をさらに加算する。具体的には次の値をそれぞれ加算する。
【０１１０】
プロセス数の最小値：配信部Ｆinに要する資源量のプロセス数(配信部Finのみ配置する場合に加算)
プロセス数の最大値：配信部Ｆinに要する資源量のプロセス数
メモリ使用量の最小値：配信部Ｆinに要する資源量のメモリサイズ(配信部Finのみ配置する場合に加算)
メモリ使用量の最大値：配信部Ｆinに要する資源量のメモリサイズ
ディスク使用量の最小値：配信部Ｆinに要する資源量のディスクサイズ(配信部Finのみ配置する場合に加算)
ディスク使用量の最大値：配信部Ｆinに要する資源量のディスクサイズ
ステップＳ３７の処理後、計算した資源量を戻り値として返して処理を終了する。
【０１１１】
図２０は、ジョブステップの割り当て及びノード間通信制御部３０の配置処理（処理５）を示す。当該処理は、前述したステップＳ１３の処理に対応する。
【０１１２】
ステップＳ４１で、ジョブ管理部１１は、未割り当て等の要素が配信部Ｆinのみか否かを判定し、配信部Ｆin以外にも存在すれば（Ｎｏ）、ステップ４３に進む一方、配信部Ｆinのみであれば（Ｙｅｓ）、ステップ４２に進む。
ステップＳ４２で、通信制御配置部１５は、配信部Ｆinの配置を行う。
【０１１３】
ステップＳ４３で、ジョブ管理部１１は、ジョブステップの割り当て及びノード間通信制御部３０の配置を行なう処理（処理６、図２１）を実行する。全てのジョブステップの割り当て及びノード間通信制御部３０の配置が完了した場合には「true」の戻り値を返し、完了していない場合には「false」の戻り値を返す。当該処理の内容については後述する。
【０１１４】
ステップＳ４４で、ジョブ管理部１１は、全てのジョブステップの割り当て及びノード間通信制御部３０の配置が完了したか否かを判定し、完了した場合は（Ｙｅｓ）、ステップ４５に進む一方、完了していない場合は、戻り値「false」を返して当該処理を終了する。
【０１１５】
ステップＳ４５で、ジョブ管理部１１は、リソース管理テーブル２３のうち、現在処理をしているキューに対応するデータの［リソース詳細］を参照し、当該キューのデータがノード間の分散共有メモリを用いてミラーリングされる設定か否かを特定する。ミラーリングされる設定の場合は、データを共有してミラーリングする対象ノードを決定し、分散共有メモリ等を用いてデータをミラーリングする。なお、一般的には、ネットワーク上で隣接するノードに対してミラーリングを行う。
【０１１６】
ステップＳ４６で、ジョブ管理部１１は、ノード管理テーブル２１のうち、［ノード名］が、ジョブステップの割り当てやノード間通信制御部３０の配置を行なった代替ノードであるデータの資源量を更新する。具体的には、当該データの［プロセス数］、［メモリ使用量］及び［ディスク使用量］に、割り当てたジョブステップ及び配置したノード間通信制御部３０の処理に要する資源量を加算する。その後、戻り値「true」を返して当該処理を終了する。      
【０１１７】
図２１は、ジョブステップの割り当て及びノード間通信制御部３０の配置を行なう処理（処理６）を示す。当該処理は、前述したステップＳ４３の処理に対応する。
【０１１８】
ステップＳ５１で、ジョブ管理部１１は、ジョブステップＳqに対応する配信部が必要か否か、すなわち、後続のサブキューが存在するか否かを判定する。当該判定は、Ｓq＝Ｓendか否かを判定することと同義である。後続するサブキューがあり、ジョブステップＳqに対応する配信部が必要（Ｓq！＝Ｓend）の場合は（Ｙｅｓ）、ステップ５２に進み、後続のサブキューがなく、ジョブステップＳqに対応する配信部が不要（Ｓｑ＝Ｓend）の場合は（Ｎｏ）、ステップ５３に進む。
【０１１９】
ステップＳ５２で、通信制御配置部１５は、ステップ２６で選択した代替ノードに、配信部Ｓqを配置する。
【０１２０】
ステップＳ５３で、通信制御配置部１５は、配信管理テーブル２４に、ジョブステップＳqに対応するデータを追加する。当該追加データでは、［配信部］に配信部Ｓq、［データソース］に、ジョブステップＳqに対応する蓄積管理テーブル２６のデータを特定する情報（又は入力ファイルＦin）、［配置ノード］に当該代替ノードをそれぞれ格納する。
【０１２１】
ステップＳ５４で、通信制御配置部１５は、代替ノードに蓄積部Ｓqを配置する処理（処理７、図２２）を実行する。当該処理の内容については後述する。
【０１２２】
ステップＳ５５で、ジョブ管理部１１は、ジョブステップＳpからジョブステップＳqの割り当て及び受信部Ｓpの配置を行なう処理（処理８、図２３）を実行する。当該処理の内容については後述する。
【０１２３】
ステップＳ５６で、ジョブ管理部１１は、ジョブステップＳpがジョブステップＳ１であるときにのみ、当該代替ノードに割り当て可能であれば、配信部Ｆinを配置する。
【０１２４】
ステップＳ５７で、ジョブ管理部１１は、全てのジョブステップの割り当て及びノード間通信制御部３０の配置が完了したか否かを判定する。割り当て等が全て完了した場合には（Ｙｅｓ）、その後、「true」の戻り値を返して当該処理を終了し、完了していない場合には（Ｎｏ）、「false」の戻り値を返して当該処理を終了する。
【０１２５】
図２２は、代替ノードに蓄積部Ｓqを配置する処理（処理７）を示す。当該処理は、前述したステップＳ５４の処理に対応する。
【０１２６】
ステップＳ６１で、通信制御配置部１５は、代替ノードに蓄積部Ｓq及び蓄積ファイルＳqを配置する。
【０１２７】
ステップＳ６２で、通信制御配置部１５は、蓄積管理テーブル２６に、蓄積部Ｓqのデータがあるか、すなわち、蓄積部Ｓqが元々エラー発生ノードに存在していたか（ジョブステップＳqがノード間通信を行っていたか）否かを判定する。データがある場合には（Ｙｅｓ）、ステップ６３に進み、データがない場合には（Ｎｏ）、ステップ６４に進む。
【０１２８】
ステップＳ６３で、通信制御配置部１５は、蓄積管理テーブル２６のうち、［蓄積部］が蓄積部Ｓqのデータの［配置ノード］を、代替ノードに更新する。
【０１２９】
ステップＳ６４で、通信制御配置部１５は、蓄積管理テーブル２６を参照し、［蓄積部］が、ジョブステップＳqよりも後に実行されるジョブステップに対応する蓄積部であるデータのうち、最も早いジョブステップに対応する蓄積部のデータ（蓄積部Ｓqに対応するサブキューの次のサブキューに対応する蓄積部のデータ）の［処理済みレコード］を取得する。前述したように、特別な仕組みを備えていない一般的なパイプを用いた場合は、ジョブステップの一部が異常終了した場合、途中の計算結果(受信管理テーブル２５の受信済みレコードから「処理済みレコード−１」まで)が失われてしまうため、抜けが発生しないように、蓄積ファイル３４に格納済みのレコードを選択する必要がある。仮に、ジョブ制御部が、同期型のノード内通信において、ジョブステップの再開(restart)が可能である場合は、蓄積部Ｓqの[処理済みレコード]に受信部Ｓq+1の「受信済みレコード＋１」を設定できる。これにより、Ｓq+1以降のジョブステップで、切替え後にレコードを待つ時間を最小化できる。
【０１３０】
ステップＳ６５で、通信制御配置部１５は、蓄積管理テーブル２６に、蓄積部Ｓqのデータを追加する。当該追加データでは、［蓄積部］に蓄積部Ｓq、［処理済みレコード］にステップＳ６４で取得した処理済みレコード、［配置ノード］に蓄積部Ｓqを割り当てた代替ノードをそれぞれ格納する。また、このときリソース管理テーブル２３の該当するリソース名（ジョブステップ番号）のリソース詳細に、特定のレコード番号の範囲の処理済みレコードの有無、および、配置場所を記録する。配置場所が、ローカルディスクのみの場合、ノードダウン時に蓄積ファイルを参照できなくなるため、より古いレコードから処理を再開する必要があり、異常時に後続の受信部が受信待ちの時間が長くなる。そのため、共有ディスクに配置するか、ミラーリングを行うことが望ましい。あらゆるノードから参照・更新する形態では、ジョブやノードを増やした場合に性能のボトルネックとなりやすいため、隣接ノードにミラーリングを行う形態がより望ましい。この場合、性能ボトルネックとなる単一障害点がなくなるため、ジョブやノード数によらず安定した性能が得られる。
【０１３１】
図２３は、代替ノードにジョブステップＳp〜Ｓqの割り当て及び受信部Ｓpの配置を行なう処理を示す。当該処理は、前述したステップＳ５５の処理に対応する。
【０１３２】
ステップＳ７１で、ジョブステップ割当部１４は、代替ノードで実行可能なプロセス数（資源量）の範囲内で割り当てることが可能なジョブステップ数を算出する。
【０１３３】
具体的には、ジョブステップ割当部１４は、ノード管理テーブル２１を参照し、［最大プロセス数］から［プロセス数］を差し引いて、現在使用可能なプロセス数を算出する。一方、ジョブステップ割当部１４は、リソース管理テーブル２３の［リソース詳細］を参照し、受信部３２、蓄積部３３及び配信部３１が必要とするプロセス数を特定する。そして、現在使用可能なプロセス数から、受信部３２、蓄積部３３及び配信部３１が必要とするプロセス数を差し引いて、代替ノードに割り当て可能なジョブステップ数を算出する。なお、当該代替ノードに割り当てるジョブステップの先頭がジョブステップＳ１である場合のみ、配信部Ｆinのプロセス数も考慮してジョブステップ数を算出する。一方、当該代替ノードに割り当てるジョブステップの末尾が最後のジョブステップである場合には、配信部３１のプロセス数の加算は不要である。また、当該計算においては、割り当てられるジョブステップが使用するメモリ容量やディスク容量が、当該代替ノードで使用可能なメモリ容量やディスク容量の範囲内になるようにする。
【０１３４】
ステップＳ７２で、ジョブステップ割当部１４は、変数ｐに、［ｑ−（ステップ７１で算出した、代替ノードに割り当て可能なジョブステップ数）］を代入する。
ステップ７３で、ジョブステップ割当部１４は、代替ノードにジョブステップＳp〜Ｓqを割り当てる。
【０１３５】
ステップＳ７４で、ジョブステップ割当部１４は、ジョブステップ管理テーブル２２のうち、［ステップ名］がジョブステップＳp〜Ｓqのデータの配置ノードを、代替ノードに更新する。
【０１３６】
ステップＳ７５で、通信制御配置部１５は、代替ノードに、受信部Ｓpを配置する。
ステップＳ７６で、通信制御配置部１５は、蓄積管理テーブル２６を参照し、［蓄積部］が蓄積部Ｓqであるデータの［処理済みレコード］を取得する。
【０１３７】
ステップＳ７７で、通信制御配置部１５は、受信管理テーブル２５に、受信部Ｓpのデータを追加する。当該追加データでは、［受信部］に受信部Ｓp、［対応配信部］に配信部Ｓp-1（又は入力ファイルＦin）、［受信済みレコード］にステップ７６で取得した［処理済みレコード］の値、［配置ノード］に当該代替ノードをそれぞれ格納する。
【０１３８】
［本実施形態による効果等］
本実施形態によれば、各ノードにおいてノード間通信制御部３０を設けることにより、ノード間通信が、ジョブステップによる処理から独立して行われる（すなわち、ノード間通信がジョブステップから隠ぺいされる）。そして、エラー発生ノードにおいて並列処理で実行していたジョブステップを分割して複数の代替ノードに割り当てるときに、それぞれの代替ノードに対し、ノード間通信制御部３０を配置する。具体例として、代替ノードのそれぞれにつき、代替ノードに割り当てられたジョブステップ群より前のジョブステップが存在するときに、当該代替ノードの直前のジョブステップを実行するノードから、当該ノードのジョブステップによる処理済みレコードを受信する受信部３２を配置する。一方、代替ノードに割り当てられたジョブステップ群より後のジョブステップが存在するときに、当該代替ノードに割り当てられたジョブステップ群による処理済みレコードを取得する蓄積部３３、及び当該処理済みレコードを、当該代替ノードの直後のジョブステップを実行するノードに配信する配信部３１を配置する。これにより、同期型のノード内通信を行っていたジョブステップ間の通信が、ノード間通信に切り替えられる。したがって、エラー発生ノードにおいて並列実行していたジョブステップ群を、複数の代替ノードによる処理に自動的に切り替えることが可能となり、処理の再開までに要する時間を短縮することができる。また、前述したように、このような切り替えは、エラーが発生した場合に限らず、例えばシステムのメンテナンスの際や、サーバ増設等のシステム構成の変更の際などにも適用することができる。
【０１３９】
また、蓄積部３３において、代替ノードの処理済みレコードを蓄積ファイル３４に格納し、蓄積部３３が、代替ノードに割り当てられたジョブステップ群の直後のジョブステップを実行するノードからの要求に応じて、当該蓄積ファイル３４に蓄積した処理済みレコードを当該ノードに送信する。これにより、ノード間通信におけるレコードの再送要求に対応することが可能となる。
【０１４０】
また、本実施形態によれば、エラー発生ノードで実行していた最後のジョブステップによる処理済みレコードを蓄積管理テーブル２６から特定する。そして、当該処理済みレコードを、受信管理テーブル２５における、エラー発生ノードで実行していた最初のジョブステップに対応する受信部３２に対応するデータに格納し、当該受信部３２が参照できるようにする。これにより、受信部３２が処理再開時に配信部３１に配信要求するレコードが、エラー発生ノードで実行していた最後のジョブステップによる処理済みレコードとなる。したがって、代替ノードに切り替えたことによる処理の抜け（処理されないレコードの発生）を防ぐことができる。一般的には同期型のノード内通信においてデータの生成側の異常発生時にジョブの再開が出来ないが、仮にジョブ制御部が、同期型のノード内通信において、異常となったレコードからジョブステップの再開が可能である場合は、蓄積部Ｓqの[処理済みレコード]に受信部Ｓq+1の「受信済みレコード＋１」を設定することで、切替え後にＳq+1以降のジョブステップで、次に処理をするレコードを待つ時間を最小化できる。なお、本実施形態ではこのように、後ろのジョブステップによる処理済みレコードの情報を、前のジョブステップに対応するノード間通信制御部３０の配置において用いるために、ジョブステップの割り当て及びノード間通信制御部３０の配置を、後ろのジョブステップに対応するものから順に行なっている。しかしながら、割り当て等の方法自体は、このような方法に限定されるものではない。
【０１４１】
また、前述したように、ノードが故障した場合でも、蓄積ファイル３４を引き継いで実行する方法の一例として、共有ディスクを使用する方法や、隣接のノードにミラーリングする方法が考えられる。従来は、ジョブの実行中に処理済みレコードの受信元、配信先を動的に変更する仕組みがないため、あらゆる代替ノードからアクセス可能なように、蓄積ファイル３４を共有ディスクに配置しておく必要があった。このようなディスク装置は、ジョブステップの実行ノードよりディスクアクセスが集中する傾向がある。一方で、本実施形態によれば、前後のノード間通信制御部３０の蓄積部３３や受信部３２の処理済みレコードより、動的に蓄積ファイル３４を構成できる。そして、蓄積ファイル３４に必要な資源量がリソース管理テーブル２３によって示され、当該資源量を、ノード管理テーブル２４より割り当てることができる。したがって、あらかじめ決められた場所ではなく、その時点で利用可能なノードに蓄積ファイル３４を割り当てることができる。こうすることで、ノード数やジョブステップの数によらず、安定した性能でジョブが実行できる。
【０１４２】
また、本実施形態によれば、代替ノードを選択する際に、できる限り少ないノード数でジョブステップを割り当てることが可能なノードを選択するようにする。これにより、ノード内通信と比較して時間のかかるノード間通信を少なくすることができる。その上で、計算した資源量の最大値にできる限り近いノードを選択する。これにより、さらなるエラー発生時におけるジョブステップの切り替えや他のジョブの実行に備えて、資源量の多いノードを有効に残しておくことができる。
【０１４３】
また、本実施形態によれば、代替ノードを選択する際に、少なくともノード間通信制御部３０の配置に要する資源量を満たさないノードを予め選択候補から除外する。これにより、確実にノード間通信への切り替えが可能であるノードのみを代替ノードとすることができる。
【０１４４】
＜ハードウェア構成等＞
ここで、上記管理サーバ１０や各ノードとして機能するコンピュータのハードウェア構成の一例を図２４に示す。本コンピュータは、プロセッサ１０１、メモリ１０２、ストレージ１０３、可搬記憶媒体駆動装置１０４、入出力装置１０５及び通信インタフェース１０６を備える。
【０１４５】
プロセッサ１０１は、制御ユニット、演算ユニット及び命令デコーダ等を含み、実行ユニットが、命令デコーダで解読されたプログラムの命令に従い、制御ユニットより出力される制御信号に応じ、演算ユニットを用いて算術・論理演算を実行する。かかるプロセッサ１０１は、制御に用いる各種情報が格納される制御レジスタ、既にアクセスしたメモリ１０２等の内容を一時的に格納可能なキャッシュ、及び、仮想記憶のページテーブルのキャッシュとしての機能を果たすＴＬＢを備える。なお、プロセッサ１０１は、ＣＰＵ（Central Processing Unit）コアが複数設けられている構成でもよい。
【０１４６】
メモリ１０２は、例えばＲＡＭ（Random Access Memory）等の記憶装置であり、プロセッサ１０１で実行されるプログラムがロードされるとともに、プロセッサ１０１の処理に用いるデータが格納されるメインメモリである。また、ストレージ１０３は、例えばＨＤＤ（Hard Disk Drive）やフラッシュメモリ等の記憶装置であり、プログラムや各種データが格納される。可搬記憶媒体駆動装置１０４は、可搬記憶媒体１０７に記憶されたデータやプログラムを読み出す装置である。可搬記憶媒体１０７は、例えば磁気ディスク、光ディスク、光磁気ディスク又はフラッシュメモリ等である。プロセッサ１０１は、メモリ１０２やストレージ１０３と協働しつつ、ストレージ１０３や可搬記憶媒体１０７に格納されたプログラムを実行する。なお、プロセッサ１０１が実行するプログラムや、アクセス対象となるデータは、当該コンピュータと通信可能な他の装置に格納されていてもよい。なお、本実施形態で記載した管理サーバ１０の記憶手段とは、メモリ１０２、ストレージ１０３及び可搬記憶媒体１０７若しくは当該コンピュータと通信可能な他の装置の少なくともいずれかを示す。
【０１４７】
入出力装置１０５は例えばキーボードやタッチパネル、ディスプレイ等であり、ユーザ操作等による動作命令を受け付ける一方、コンピュータによる処理結果を出力する。
【０１４８】
通信インタフェース１０６は、例えば、ＬＡＮ（Local Area Network）カード等の他、無線周波受信機および送信機、ならびに光受信機および送信機を含むことができる。前述の受信機および送信機は、例えばＷｉ−Ｆｉネットワーク、ブルートゥース・ネットワーク、ロング・ターム・エボリューションなどの１つまたは複数の通信ネットワークにより動作することができる。
これらのコンピュータの各構成要素は、バス１０８で接続されている。
【０１４９】
＜その他＞
なお、本明細書で説明したコンピュータの機能的構成及び物理的構成は、上述の態様に限るものではなく、例えば、各機能や物理資源を統合して実装したり、逆に、さらに分散して実装したりすることも可能である。
【０１５０】
また、本明細書において、閾値等との比較において「〜以上」や「〜以下」とした記載箇所は、当該記載に限定されるものではなく、「〜より大きい（〜を上回る）」や「〜より小さい（〜を下回る）」に適宜置き換えることが可能である。
以上の実施形態に関し、更に以下の付記を開示する。
【０１５１】
（付記１）
第１のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータそれぞれに割り当て、
前記複数の代替コンピュータのそれぞれについて、当該代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡し、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する通信制御部を配置する、
処理をコンピュータに実行させるジョブ管理プログラム。
【０１５２】
（付記２）
前記通信制御部は、前記代替コンピュータに割り当てられた処理群による処理済みのデータを蓄積ファイルに蓄積し、当該処理群の直後の処理を実行するコンピュータからの要求に応じて、当該蓄積ファイルに蓄積したデータを当該コンピュータに送信する、付記１記載のジョブ管理プログラム。
【０１５３】
（付記３）
前記配置する処理は、前記第１のコンピュータにより並列実行されていたジョブの処理群のうち最後の処理による処理済みのデータのレコード番号を特定して、当該レコード番号を記憶手段に格納し、
前記通信制御部は、記憶手段に格納された前記レコード番号を参照し、当該レコード番号の次のレコード番号以降のデータを、前記代替コンピュータに割り当てられた処理群の直前の処理を実行するコンピュータに対して要求して受信する、付記１又は２記載のジョブ管理プログラム。
【０１５４】
（付記４）
前記第１のコンピュータにより並列実行されていたジョブの処理群の割り当て及び前記通信制御部の配置に要する資源量を算出し、算出した当該資源量及び複数のコンピュータのそれぞれの資源量に基づき、当該複数のコンピュータから、前記複数の代替コンピュータを選択する処理をさらに含む、付記１〜３のいずれか１項に記載のジョブ管理プログラム。
【０１５５】
（付記５）
前記選択する処理は、前記複数のコンピュータから、前記複数の代替コンピュータの数が最小となる組合せを特定し、当該組合せのうち、前記複数の代替コンピュータの資源量の合計が、算出した前記資源量に最も近い組合せのコンピュータを、前記複数の代替コンピュータとして選択する、付記４記載のジョブ管理プログラム。
【０１５６】
（付記６）
前記選択する処理は、前記複数のコンピュータのうち、少なくとも前記通信制御部の配置に要する資源量を満たさないコンピュータを予め選択候補から除外して、前記複数の代替コンピュータを選択する、付記４又は５に記載のジョブ管理プログラム。
【０１５７】
（付記７）
第１のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータのそれぞれに割り当て、
前記複数の代替コンピュータのそれぞれについて、当該代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡し、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する通信制御部を配置する、
処理をコンピュータが実行するジョブ管理方法。
【０１５８】
（付記８）
現用系のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータのそれぞれに割り当てるジョブステップ割当部と、
前記複数の代替コンピュータのそれぞれについて、当該代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡し、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する通信制御部を配置する通信制御配置部と、
を備えるジョブ管理装置。
【符号の説明】
【０１５９】
１…ノード、２…入力ファイル、３…出力ファイル、１０…管理サーバ、１１…ジョブ管理部、１２…処理中断部、１３…代替ノード選択部、１４…ジョブステップ割当部、１５…通信制御配置部、１６…処理再開部、２１…ノード管理テーブル、２２…ジョブステップ管理テーブル、２３…リソース管理テーブル、２４…配信管理テーブル、２５…受信管理テーブル、２６…蓄積管理テーブル、３０…ノード間通信制御部、３１…配信部、３２…受信部、３３…蓄積部、３４…蓄積ファイル、４０…ジョブ制御部、４１…プロセス管理部、４２…データ転送バッファ、５０…ジョブステップ群
【図１】
2015095075.tif 000003
【図２】
2015095075.tif 000004
【図３】
2015095075.tif 000005
【図４】
2015095075.tif 000006
【図５】
2015095075.tif 000007
【図６】
2015095075.tif 000008
【図７】
2015095075.tif 000009
【図８】
2015095075.tif 000010
【図９】
2015095075.tif 000011
【図１０】
2015095075.tif 000012
【図１１】
2015095075.tif 000013
【図１２】
2015095075.tif 000014
【図１３】
2015095075.tif 000015
【図１４】
2015095075.tif 000016
【図１５】
2015095075.tif 000017
【図１６】
2015095075.tif 000018
【図１７】
2015095075.tif 000019
【図１８】
2015095075.tif 000020
【図１９】
2015095075.tif 000021
【図２０】
2015095075.tif 000022
【図２１】
2015095075.tif 000023
【図２２】
2015095075.tif 000024
【図２３】
2015095075.tif 000025
【図２４】
2015095075.tif 000026