[ジョブの実行ノード切り替えの概要]
最初に、ジョブの並列実行の一実施態様として、それぞれがジョブの並列実行を行う複数のコンピュータで、1つのジョブに含まれる処理群であるジョブステップ群を連携して行うことについて、図1に示す具体例を参照して説明する。さらに、このようなシステムにおいて、いずれかのコンピュータで並列実行していたジョブステップ群を、他のコンピュータに切り替えて実行することについて、図2に示す具体例を参照して説明する。なお、本明細書においてジョブステップ群とは、1又は複数の連続するジョブステップを示す。
図1は、システムが通常稼働している状態(エラーが発生していない状態)で、現用系ノード(現用系のコンピュータ)においてパイプライン方式でジョブを並列処理しているシステムの一例の説明図である。当該システムでは、ノードA(1−1)、ノードB(1−2)及びノードC(1−3)の3つの現用系ノードが連携し、入力ファイルFin(2)から順次入力された入力データのレコードを、ジョブステップS1〜S900により処理し、出力ファイルFout(3)に出力する。
ここで、ノードA(1−1)、ノードB(1−2)及びノードC(1−3)は、それぞれ300プロセスを多重処理する処理性能を有している。そして、ノードA(1−1)ではジョブステップS1〜S300、ノードB(1−2)ではジョブステップS301〜S600、ノードC(1−3)ではジョブステップS601〜S900を夫々実行している。一方、当該システムでは、ノードX(1−4)及びノードY(1−5)の2つの待機系ノード(待機系のコンピュータ)が存在している。ノードX(1−4)及びノードY(1−5)は、それぞれ200プロセスを多重処理する処理性能を有している。
なお、本実施形態では説明の簡略化のため、1つのジョブステップが1プロセスであるものとして説明を行うが、かかる態様に限定されるものではない。また、以下の本実施形態の説明では、ノードA、ノードB、ノードC、ノードX及びノードY並びに入力ファイルFin及び出力ファイルFoutの符号記載を適宜省略する。
ノードAのジョブステップS1は、入力ファイルFinから処理対象レコードを取得する。そして、ジョブステップS1は当該レコードの処理を実行した後、パイプライン方式における同期型のノード内通信(図では「同期」と表記する)により、ノードAのデータ転送バッファ(パイプ)を介して、処理済みレコードを次のジョブステップS2に渡す。ジョブステップS2は、ジョブステップS1からレコードを受け取ると、当該レコードの処理を実行する。なお、かかるジョブステップS2の処理と同時に、ジョブステップS1では、さらに次の処理対象レコードを取得して並列実行する。一方、ジョブステップS2はレコードの処理を実行した後、同様に同期型のノード内通信により、処理済みレコードを次のジョブステップ3に渡す。以降、ジョブステップS3〜S299において同様の処理が実行される。
ここで、ジョブステップS300は、レコードの処理を実行した後、処理済みレコードを、ノードAが備える蓄積ファイル(再送データ)に格納する。そして、ジョブステップS300は、蓄積型のノード間通信(データ転送バッファを用いた同期型の通信とは異なり、メモリに格納したデータをネットワークを介して転送する通信方法であり、図では「蓄積」と表記する)により、処理済みレコードを、次のノードBが実行するジョブステップS301に渡す。ノードBのジョブステップS301は、ジョブステップS300からレコードを受け取ると、当該レコードの処理を実行した後、同期型のノード内通信により、ノードBのデータ転送バッファを介して、処理済みレコードを次のジョブステップS302に渡す。以降、ジョブステップS303〜S599において同様の処理が実行される。
さらに、ジョブステップS600は、ジョブステップS300と同様に、レコードの処理を実行した後、処理済みレコードを、ノード間通信により、次のノードCが実行するジョブステップS601に渡す。以降、ノードCのジョブステップS601〜S899において、ノードBのジョブステップS301〜S599と同様の処理が実行される。
ジョブステップS900は、レコードの処理を実行した後、処理済みレコードを、出力ファイルFoutに出力する。
次に、上記現用系ノードのうちの1つのノードで実行していたジョブステップを、待機系ノードに切り替えることにつき、図2を参照して説明する。図2の例では、ノードBが故障してエラーが発生した状態(ノードダウンした状態)を示している。この場合、ノードBで実行していたジョブステップS301〜S600の並列処理を、待機系ノードに切り替える。このとき、待機系ノードであるノードX及びノードYのいずれも、多重処理できるプロセス数が200であるため、それぞれ単独では、300プロセスのジョブステップを多重処理していたノードBの代替として動作できない。このため、ノードBで実行していたジョブステップS301〜S600を分割し、ノードX及びノードYの両方に割り当てる。
ここで、例えば、ジョブステップS301〜S400をノードXに割り当て、ジョブステップS401〜S600をノードYに割り当てる場合を想定する。この場合、ジョブステップS400とジョブステップS401とが異なるノードで実行されることとなるため、ジョブステップS400とジョブステップS401との間は、ノード間通信を行うこととなる。
しかし、元々ジョブステップS400とジョブステップS401との間は、ノードBにおいて同期型のノード内通信を行っていたため、ジョブステップS400は、ジョブステップS401に対してノード間通信を行うことができない。そして、ジョブステップS400によって処理したデータの蓄積ファイルを保持していない。このため、例えば、別ノードで動作することとなったジョブステップS401からデータの配信要求を受信しても、ジョブステップS400では配信できるデータを保持しておらず、要求に応じることができない。このように、ジョブステップS301〜S600を単純に分割し、ノードX及びノードYに割り当てようとしても、ジョブステップS400とジョブステップS401との間においてノード間通信を行うことができず、正常に動作させることが困難である。
このため、本実施形態では、同期型のノード内通信からノード間通信となるジョブステップ間の通信の切り替えを自動的に実現するようにする。これにより、エラー発生ノードにおいて並列実行していたジョブステップ群を、複数の代替ノードに自動的に切り替えることが可能となり、処理の再開までに要する時間を短縮することができる。また、このような切り替えは、エラーが発生した場合に限らず、例えばシステムのメンテナンスの際や、サーバ増設等のシステム構成の変更の際などにも適用することができる。
以下、上記の処理を実現するための具体的構成や、処理の詳細について説明する。
[システムの全体構成]
図3は、本実施形態におけるシステムの全体構成の一例を示す。本システムは、管理サーバ10、現用系ノードであるノードA、ノードB及びノードC、待機系ノードであるノードX及びノードYを備える。管理サーバ10、ノードA、ノードB及びノードC並びにノードX及びノードYは、ネットワークを介して相互に通信可能に接続されている。ネットワークは、例えばLAN(Local Area Network)やWAN(Wide Area Network)等であり、有線接続又は無線接続のいずれであってもよい。
管理サーバ10は、各ノードで実行するジョブの管理を行うコンピュータであり、各ノードへのジョブステップ等の割り当てや、ジョブの実行ノードの切り替え等を行う。
現用系ノードであるノードA、ノードB及びノードCは、前述したように、いずれもジョブを並列実行するコンピュータであり、正常稼働時において、1つのジョブに含まれる複数のジョブステップを連携して実行している。
待機系ノードであるノードX及びノードYは、正常稼働時には待機状態となっており、ノードA、ノードB及びノードCのいずれかにエラーが発生したときに、管理サーバ10によって割り当てられたジョブステップを実行する。
なお、ノードA、ノードB及びノードCが処理するジョブステップの入力ファイルFin及び出力ファイルFoutがノードA、ノードB及びノードCとは別のノードに存在する場合には、入力ファイルFinや出力ファイルFoutを備えるノードがさらに存在する。当該ノードについては、図示を省略する。
[管理サーバの機能構成及びデータ構成]
図4は、管理サーバ10の機能構成及びデータ構成を示す。管理サーバ10は、ジョブ管理プログラムがロードされて実行されることによって機能が実現されるジョブ管理部11を備える。ジョブ管理部11は、処理中断部12、代替ノード選択部13、ジョブステップ割当部14、通信制御配置部15、処理再開部16を備える。
ジョブ管理部11は、ノードのエラー発生時に、代替ノードへの切り替え処理全体を行う。
処理中断部12は、エラー発生ノードに対するデータの配信処理、及び当該ノードからのデータの受信処理を一時中断する。
代替ノード選択部13は、エラー発生ノードが実行していたジョブステップ等の実行に要する資源量を算出し、当該ジョブステップを実行することが可能な代替ノードを、待機系ノードから選択する。なお、本明細書において「資源量」とは、例えば、処理可能なプロセス数などの処理性能の基準となるCPU資源量や、使用可能メモリ量、使用可能ディスク容量等の記憶手段の資源量等の少なくとも1つを含むものである。
ジョブステップ割当部14は、選択された代替ノードに対し、エラー発生ノードが実行していたジョブステップを割り当てる。
通信制御配置部15は、選択された代替ノードに対し、ジョブステップ間においてノード間通信を行うためのノード間通信制御部(詳細は後述する)を配置する。
処理再開部16は、代替ノードを用いて、処理中断部12により中断していた処理を再開する。
さらに、管理サーバ10は、記憶手段において、ノード管理テーブル21、ジョブステップ管理テーブル22及びリソース管理テーブル23、並びに配信管理テーブル24、受信管理テーブル25及び蓄積管理テーブル26を備える。
ノード管理テーブル21は、各ノードの資源量等を示す情報が格納されるテーブルである。なお、ノード管理テーブル21は、図5に示すように、ノードの識別子である[ノード名]、ノードが正常に稼働しているか否かを示す[状態]、現在ノードに割り当てられているジョブステップ等のプロセス数を示す[プロセス数]、ノードにおいて実行することが可能な最大プロセス数を示す[最大プロセス数]、ノードにおける現在のメモリ使用量及び最大のメモリ容量をそれぞれ示す[メモリ使用量]及び[最大メモリ容量]、ノードにおける現在のディスク使用量及び最大のディスク容量をそれぞれ示す[ディスク使用量]及び[最大ディスク容量]の項目を含む。
ジョブステップ管理テーブル22は、各ジョブステップが割り当てられているノードや入出力に関する情報が格納されるテーブルである。なお、ジョブステップ管理テーブル22は、システム管理者等が予め設定した、図6に示すようなジョブステップ定義が展開されて生成される。ジョブステップ管理テーブル22は、図6及び図7に示すように、ジョブステップの識別子である[ステップ名]、ジョブステップが割り当てられているノードを示す[配置ノード]、ジョブステップが処理するレコードの配信元のリソース(ジョブステップ又は入力ファイル)を示す[入力]、ジョブステップが処理するレコードの配信先のリソース(ジョブステップ又は出力ファイル)を示す[出力]の項目を含む。
リソース管理テーブル23は、各リソース(入出力ファイルやジョブステップ、キュー(詳細は後述する)を含む)の資源量や詳細情報等が格納されるテーブルである。なお、リソース管理テーブル23は、システム管理者等が予め設定した、図8に示すようなノード定義が展開されて生成される。リソース管理テーブル23は、図9及び図10に示すように、リソースの識別子である[リソース名]、リソースの種別を示す[種別]、リソースがジョブステップの割り当て状況に応じて動的に有する資源量を示す[動的資源]、リソースに関する詳細情報を示す[リソース詳細]の項目を含む。
以下に説明する配信管理テーブル24、受信管理テーブル25及び蓄積管理テーブル26は、全てのノードが参照可能なテーブルである。これらのテーブルは、例えば、各ノードがアクセス可能な分散共有メモリ等に格納されていてもよい。
配信管理テーブル24は、ジョブステップ間の通信や入力ファイルFinとジョブステップとの間の通信におけるレコードの配信処理を行う配信部31(詳細は後述する)に関連する情報が格納されるテーブルである。配信管理テーブル24は、図11に示すように、配信部31の識別子である[配信部]、当該配信部31により配信するデータに関する情報を示す[データソース]、当該配信部31が配置されている[配置ノード]の項目を含む。
受信管理テーブル25は、ジョブステップ間の通信や入力ファイルFinとジョブステップとの間の通信におけるレコードの受信処理を行う受信部32(詳細は後述する)に関連する情報が格納されるテーブルである。受信管理テーブル25は、図12に示すように、受信部32の識別子である[受信部]、当該受信部32が受信するデータを配信する配信部31を示す[対応配信部]、当該受信部32において現在受信済みのレコードの番号を示す[受信済みレコード]、当該受信部32が配置されている[配置ノード]の項目を含む。
蓄積管理テーブル26は、ジョブステップによる処理済みレコードを蓄積ファイル34に格納する蓄積部33(詳細は後述する)に関連する情報が格納されるテーブルである。蓄積管理テーブル26は、図13に示すように、蓄積部33の識別子である[蓄積部]、蓄積ファイル34に格納されている処理済みレコードの番号を示す[処理済みレコード]、当該蓄積部が配置されている[配置ノード]の項目を含む。
[ノードの機能構成]
次に、ジョブステップを実行する各ノードが備える機能構成について説明する。
ここで、本実施形態の説明では、入力ファイルから1レコードずつ入力されて各ジョブステップで順次処理され出力ファイルに出力されるデータをレコードごとに管理したものを、「キュー」として取り扱う。そして、当該キューを、ノード間通信におけるレコードの配信及び受信並びにジョブステップによる処理済みレコードの蓄積を行う単位ごとに分割したものを、「サブキュー」として取り扱う。
図14は、サブキューとノードにおける機能構成とを関連付けて説明した図である。
図14の例では、キューを処理するジョブステップS1〜S900のうち、ジョブステップS1〜S300をノードAで実行し、ジョブステップS301〜S600をノードBで実行し、ジョブステップS601〜S900をノードCで実行する。
そして、図14に示すように、本実施形態のシステムでは、ノード間通信を制御するノード間通信制御部30を備える。そして、ノード間通信制御部30は、配信部31、受信部32及び蓄積部33を備える。そして、これらの配信部31、受信部32及び蓄積部33のセットを1つのサブキューとしてキューを分割して取り扱う。換言すれば、それぞれのサブキューごとに配信部31、受信部32及び蓄積部33のセットが対応付けられる。図14の例では、キューが、サブキュー1〜3の3つに分割される。そして、ノードAが実行するジョブステップS1〜S300がサブキュー1を処理し、ノードBが実行するジョブステップS301〜S600がサブキュー2を処理し、ノードCが実行するジョブステップS601〜S900がサブキュー3を処理する。また、サブキュー1には配信部Fin、受信部S1及び蓄積部S300が対応付けられ、サブキュー2には配信部S300、受信部S301及び蓄積部S600が対応付けられ、サブキュー3には配信部S600、受信部S601及び蓄積部S900が対応付けられる。
以下、ノード間通信制御部30における、配信部31、受信部32及び蓄積部33の機能について説明する。ここではまず、レコードの配信元が蓄積ファイル34であって処理済みレコードを蓄積ファイル34に格納するサブキュー(すなわち最初及び最後以外のサブキューであり、図14の例ではサブキュー2に相当)に対応する配信部31、受信部32及び蓄積部33について説明する。その後、最初及び最後のサブキューにおける例外的な内容について説明する。
配信部31は、サブキューへのレコードの配信元のジョブステップ(すなわち、当該サブキューを処理する最初のジョブステップの1つ前のジョブステップ)に対応付けられ、配信元のジョブステップによる処理済みレコード(最新でない場合には、当該サブキューに配信されるレコードが蓄積される蓄積ファイル34に蓄積された処理済みレコード)を、蓄積部33から取得する。そして、取得した処理済みレコードを、次のジョブステップ(すなわち、当該サブキューを処理する最初のジョブステップ)に対応する受信部32に配信する。具体的には、配信部31は、同じジョブステップに対応する蓄積部33に関する情報を、配信管理テーブル24の[データソース]を参照して特定する。そして、当該蓄積部33からレコードを取得して、受信部に配信する。
受信部32は、サブキューのレコードを処理する最初のジョブステップに対応付けられ、対応する配信部31からデータを受信する。具体的には、受信部32は、受信管理テーブル25の[受信済みレコード]の番号を取得する。さらに、受信管理テーブルの[対応配信部]を参照して、受信するデータの配信元となる配信部31を特定し、特定した配信部31に対して、受信済みレコードの次の番号のレコードを要求する。そして、配信部31からレコードを受信する。受信部32により受信されたレコードは、当該サブキューを処理するジョブステップにより、順次処理される。また、受信部32は、レコードを受信するごとに、受信管理テーブル25の[受信済みレコード]を順次更新する。
蓄積部33は、サブキューのレコードを処理するジョブステップにより順次処理された処理済みレコードを取得し、蓄積ファイル34に蓄積するとともに、同じジョブステップに対応する配信部31に渡す。このとき、蓄積部33は、蓄積管理テーブル26の[処理済みレコード]を順次更新する。なお、配信部31に渡すべきレコードが最新の処理による処理済みレコードでない場合(受信部32からの再送要求に応じる場合等)には、蓄積ファイル34に蓄積された処理済みレコードを配信部31に渡す。
ここで、これらの配信部31、受信部32及び蓄積部33と各ノードとの配置関係について説明する。図14のサブキュー2の具体例で説明すると、サブキュー2に対応する配信部S300(31−1−2)は、サブキュー2のレコードを処理する最初のジョブステップS301の1つ前のジョブステップS300を実行するノードAに配置される。そして、サブキュー2に対応する受信部S301(32−2)及び蓄積部S600(33−2)は、当該サブキューを処理するジョブステップを実行するノードBに配置される。
ここで、最初のサブキュー、すなわち、図14のサブキュー1の具体例のように、サブキューのレコードの配信元が入力ファイルFinの場合は、例外的に、配信部Fin(31−1−1)が受信部S1(32−1)及び蓄積部S300(33−1)と同じノードAに配置される。また、この場合、上記説明のうち、「配信元のジョブステップによる処理済みレコード」や「配信元の蓄積ファイル34」は、入力ファイルFinと読み替える。
また、最後のサブキュー、すなわち、図14のサブキュー3の具体例のように、サブキューのレコードの配信先が出力ファイルFoutの場合は、蓄積ファイル34を配置せず、蓄積部S900(33−3)は、出力ファイルFoutに処理済みレコードを直接出力すればよい。
このように、各ノードにおいて、サブキューごとにこれらの配信部31、受信部32及び蓄積部33を備えることにより、ジョブステップに対してノード間通信が隠ぺいされる。
各ノードは、さらに、ジョブステップの実行を制御するジョブ制御部40及びジョブステップ群50を備える。ジョブ制御部40は、ジョブステップ群50に含まれる各ジョブステップの実行、及び同期型のノード内通信を制御する。ジョブ制御部40は、プロセス管理部41及びデータ転送用バッファ42を備える。
プロセス管理部41は、ジョブステップをパイプライン方式で実行するプロセスを管理する。
データ転送用バッファ42は、ジョブステップ間における同期型のノード内通信において、レコードを受け渡しするバッファ(パイプ)である。
なお、入力ファイルFinはノードAが備えていても、他のコンピュータが備えていてもよい。出力ファイルFoutも同様であり、ノードCが備えていても、他のコンピュータが備えていてもよい。
<エラー発生時における代替ノードへのジョブステップ割り当て及びノード間通信制御部の配置、並びに処理再開レコードの特定方法の概要>
次に、図14に示す状態においてノードにエラーが発生した場合における代替ノードへのジョブステップ割り当て及びノード間通信制御部の配置、並びに処理再開レコードの特定方法の概要について、図15を参照して説明する。また、本説明では、図5〜図13に示した各テーブルのデータ内容を適宜参照する。なお、以下の本実施形態の説明において、対応するジョブステップが明記されている配信部31、受信部32、蓄積部33及び蓄積ファイル34については、符号記載を適宜省略する。
図15では、ジョブステップS301〜S600を実行していたノードBにエラーが発生し、ノードBで実行していたジョブステップの処理をノードX及びノードYに割り当てる例を示している。具体的には、ジョブステップS301〜S400をノードXに割り当て、ジョブステップS401〜S600をノードYに割り当てるものとする。なお、図15では、ジョブ制御部40の表示を省略している。
(1)管理サーバ10の処理中断部12は、ノード管理テーブル21のうち、エラーが発生したノードBの[状態]を「Faulted(休止中)」にする(図5の<エラー発生時>参照)。そして、処理中断部12は、サーバAの配信部S300による配信処理及びサーバCの受信部S601による受信処理を、一時中断する。
(2)処理中断部12は、配信管理テーブル24から、配信部S600に対応するデータを削除する(図11の<エラー発生時>参照)。また、ジョブ管理部11は、受信管理テーブル25から、受信部S301に対応するデータを削除する(図12の<エラー発生時>参照)。
(3)管理サーバ10の通信制御配置部15は、まず、ノードYに、配信部S600を配置する。このとき、通信制御配置部15は、配信管理テーブル24に、配信部S600に対応するデータを追加する(図11の<処理切り替え後>参照)。
(4)通信制御配置部15は、ノードYに、蓄積部S600を配置する。このとき、通信制御配置部15は、蓄積管理テーブル26のうち、蓄積部S600に対応するデータの[配置ノード]を、ノードBからノードYに更新する(図13の<処理切り替え後>参照)。
(5)ジョブステップ割当部14は、ノードYに、ジョブステップS401〜S600を割り当てる。このとき、ジョブステップ割当部14は、ジョブステップ管理テーブル22のうち、ジョブステップS401〜S600の[配置ノード]を、ノードBからノードYに更新する(図7の<処理切り替え後>参照)。
(6)通信制御配置部15は、ノードYに、受信部S401を配置する。このとき、通信制御配置部15は、受信管理テーブル25に、受信部S401に対応するデータを追加する(図12の<処理切り替え後>参照)。この追加データの[受信済みレコード]には、蓄積管理テーブル26のうち、同じノードYに割り当てられるジョブステップの末尾であるジョブステップS600に対応する蓄積部S600に対応するデータの[処理済みレコード]である「801」を格納する。
(7)通信制御配置部15は、次に、ノードXに、配信部S400を配置する。このとき、通信制御配置部15は、配信管理テーブル24に、配信部S400に対応するデータを追加する(図11の<処理切り替え後>参照)。
(8)通信制御配置部15は、ノードXに、蓄積部S400を配置する。このとき、通信制御配置部15は、蓄積管理テーブル26に、蓄積部S400に対応するデータを追加する(図13の<処理切り替え後>参照)。この追加データの[処理済みレコード]には、蓄積管理テーブル26のうち、蓄積部S400に対応するデータの1つ後のデータである蓄積部S600に対応するデータの[処理済みレコード]である「801」を格納する。
(9)ジョブステップ割当部14は、ノードXに、ジョブステップS301〜S400を割り当てる。このとき、ジョブステップ割当部14は、ジョブステップ管理テーブル22のジョブステップS301〜S400の[配置ノード]を、ノードBからノードYに更新する(図7の<処理切り替え後>参照)。
(10)通信制御配置部15は、ノードXに、受信部S301を配置する。このとき、通信制御配置部15は、受信管理テーブル25に、受信部S301に対応するデータを追加する(図12の<処理切り替え後>参照)。この追加データの[受信済みレコード]には、蓄積管理テーブル26のうち、同じノードXに割り当てられるジョブステップの末尾であるジョブステップS400に対応する蓄積部S400に対応するデータの[処理済みレコード]である「801」を格納する。これにより、受信部S301は、かりにノードAにおける蓄積部S300の処理済みレコードが図13に示すように「1001」だとしても、エラー発生ノードであるノードBによって処理が完了していたレコードである「802」から処理を再開することができる。このため、全体として処理の抜けを防ぐことが可能となる。
なお、上記処理により、エラーが発生したノードBが実行していたジョブステップS301〜S600に対応するサブキュー2は、ジョブステップS301〜S400に対応するサブキュー2−1及びジョブステップS401〜S600に対応するサブキュー2−2に分割される。そして、サブキュー2−1には配信部S300、受信部S301及び蓄積部S400が対応付けられ、サブキュー2−2には配信部S400、受信部S401及び蓄積部S600が対応付けられる。
(11)管理サーバ10の処理再開部16は、サーバAの配信部S300による配信処理及びサーバCの受信部S601による受信処理を再開させる。このとき、サーバXの受信部S301は、受信管理テーブル25において受信部S301に対応するデータの[処理済みレコード]が「801」となっているため、サーバAの配信部S300に対し、レコード「802」からデータの配信要求を行う。その結果、代替ノードであるノードX及びノードYにおいてレコード「802」から処理が再開され、蓄積部S400及び蓄積部S600は、新たにレコード「802」以降のデータを、それぞれ蓄積ファイルS400及び蓄積ファイルS600に保持することとなる。
ここで、ノードBのエラー発生前にはジョブステップS400〜S401において同期型のノード内通信が行われていたが、これらの(1)〜(11)により、ノードX及びノードYでは次のような処理が実現される。すなわち、ノードXの蓄積部S400が、ノードXに割り当てられたジョブステップS400の処理済みレコードを取得し、蓄積ファイルS400に蓄積する一方、配信部S400に渡す。そして、配信部S400が当該処理済みレコードをノードYの受信部S401に配信する。そして、当該レコードが、ノードYの受信部S401により受信され、ノードYに割り当てられたジョブステップS401以降のジョブステップにより処理される。このように、ジョブステップS400〜S401における同期型のノード内通信は、少なくともノードXに蓄積部S400及び配信部S400が配置され、ノードYにおいて受信部S401が配置されることにより、ノード間通信に自動的に切り替えられる。
<エラー発生時における処理の詳細フロー>
次に、管理サーバ10のジョブ管理部11(処理中断部12、代替ノード選択部13、ジョブステップ割当部14、通信制御配置部15、処理再開部16)において実行される処理の詳細につき、図16〜図24に示すフローチャートを参照しながら説明する。なお、以下の説明において、エラーが発生したノードは、ジョブステップSbeginからジョブステップSendを実行していたものとして記載する。
図16は、ジョブステップを実行しているノードにおいてエラーが発生したときに、管理サーバ10のジョブ管理部11において実行される全体処理の一例(処理1)を示す。
ステップS1で、処理中断部12は、ノード管理テーブル21のデータのうち、[ノード名]がエラー発生ノードであるデータの[状態]を「Faulted(休止中)」に更新する。
ステップS2で、処理中断部12は、ジョブステップ管理テーブル22の[ステップ名]及び[配置ノード]を参照し、エラー発生ノードが実行していたジョブステップを特定する。そして、処理中断部12は、エラー発生ノードが実行していた先頭のジョブステップSbeginの直前のジョブステップSbegin-1を実行していたノードが処理済みレコードを配信する処理、すなわち、配信部Sbegin-1による配信処理を一時中断させる。一方で、処理切り替え部は、エラー発生ノードが実行していた末尾のジョブステップSendの直後のジョブステップSend+1を実行していたノードが処理済みレコードを受信する処理、すなわち、受信部Send+1による受信処理を一時中断させる。
ステップS3で、ジョブ管理部11は、配信管理テーブル24のデータのうち、[配信部]が、エラー発生ノードが実行していた末尾のジョブステップSendに対応する配信部Sendであるデータを削除する。一方、処理切り替え部は、受信管理テーブル25のデータのうち、[受信部]が、エラー発生ノードが実行していた先頭のジョブステップSbeginに対応する受信部Sbeginであるデータを削除する。なお、蓄積ファイル34の格納場所がエラー発生ノードと一致する場合や、蓄積ファイル34がミラーリングされていた分散共有メモリのミラー先のノードが失われた状態等の場合(アクセス不可の場合)には、蓄積管理テーブル26のデータのうち、[蓄積部]が、エラー発生ノードが実行していた末尾のジョブステップSendに対応する蓄積部Sendであるデータ(ジョブステップSbegin〜Sendに関連付けられたデータ)をさらに削除する。
ステップS4で、ジョブ管理部11は、[p]に、エラー発生ノードが実行していた先頭のジョブステップSbeginのジョブステップ番号を代入する。
ステップS5で、ジョブ管理部11は、[q]に、エラー発生ノードが実行していた末尾のジョブステップSendのジョブステップ番号を代入する。
ステップS6で、ジョブ管理部11は、待機系ノードに対し、エラー発生ノードで実行していたジョブステップSbegin〜Sendの割り当て及びノード間通信制御部30の配置処理(処理2、図17)を行う。当該処理では、全てのジョブステップ及びノード間通信制御部30の配置が完了した場合には「true」の戻り値を返し、完了していない場合には「false」の戻り値を返す。当該処理の内容については後述する。
ステップS7で、ジョブ管理部11は、ステップS6の処理の結果、全てのジョブステップ及びノード間通信制御部30の配置が完了したか否かを判定する。完了していれば(Yes)、ステップS8に進み、完了していない場合には(No)、ステップS9に進む。
ステップS8で、処理再開部16は、ステップS2で一時中断していた、配信部Sbegin-1による配信処理及び受信部Send+1による受信処理を再開させる。
ステップS9で、処理再開部16は、エラー処理を行う。具体的には、エラー発生ノードが実行していたジョブステップSbeginからジョブステップSendのうち、他のノードに処理を割り当てられなかったジョブステップがあったり、ノード間通信制御部30を全て配置できていない場合、処理再開部16は、ジョブを異常終了させる。なお、この場合、処理再開部16は、当該ジョブステップの割り当てやノード間通信制御部30の配置を行なうことが可能なノードが得られるまで待機状態としてもよい。
図17は、待機系ノードに対してジョブステップの割り当て及びノード間通信制御部30の配置を行なう全体処理の一例(処理2)を示す。当該処理は、前述した処理1のステップS6の処理に対応する。なお、当該処理では、エラー発生ノードで実行していたジョブステップSbeginからジョブステップSendを、後ろのジョブステップから順に、代替ノードに割り当てていく。
ステップS11で、代替ノード選択部13は、エラー発生ノードで実行していたジョブステップ及びノード間通信制御部30を配置することが可能な代替ノードを選択する処理(処理3、図18)を行う。当該処理では、代替ノードを選択できた場合には、選択した代替ノードを示す戻り値を返し、代替ノードを選択できなかった場合には、「null」の戻り値を返す。当該処理の内容については後述する。
ステップS12で、代替ノード選択部13は、ステップS11の処理の結果、代替ノードを選択できたか否かを判定する。代替ノードを選択できた場合には(Yes)、ステップS13に進み、代替ノードを選択できなかった場合には、戻り値「false」を返して当該処理を終了する。
ステップS13で、ジョブ管理部11は、ステップ11で選択した代替ノードに、ジョブステップ及びノード間通信制御部30を配置する処理(処理5、図20)を行う。当該処理では、全てのジョブステップの割り当て及びノード間通信制御部30の配置が完了した場合には「true」の戻り値を返し、完了していない場合には「false」の戻り値を返す。当該処理の内容については後述する。
ステップS14で、ジョブ管理部11は、ステップS13の処理の結果、全てのジョブステップの割り当て及びノード間通信制御部30の配置が完了したか否かを判定する。割り当て等が完了した場合には(Yes)、戻り値「true」を返して当該処理を終了する。割り当て等が未完了の場合には(No)、ステップS15に進む。
ステップS15で、ジョブ管理部11は、変数qに、[p−1]を代入する(pは、ステップS13で割当てを行った先頭のジョブステップ番号)。そして、ステップS11に戻り、次の代替ノードにジョブステップを割り当てる処理を実行する。
図18は、エラー発生ノードで実行していたジョブステップを割り当てることが可能な代替ノードを選択する処理(処理3)を示す。当該処理は、前述したステップS11の処理に対応する。
ステップS21で、代替ノード選択部13は、ジョブステップの割り当て及びノード間通信制御部30の配置に要する資源量を算出する処理(処理4、図19)を行う。当該処理では、算出した資源量を示す戻り値を返す。資源量とは、例えば、ジョブステップ及びノード間通信制御部30が使用するプロセス数の最大値及び最小値、メモリ使用量の最大値及び最小値、ディスク使用量の最大値及び最小値等である。当該処理の内容については後述する。
ステップS22で、代替ノード選択部13は、ノード管理テーブル21を参照し、[状態]が「Active」以外のノードを、代替ノードの選択候補から除外する。
ステップS23で、代替ノード選択部13は、リソース管理テーブル23のうち、[リソース名]が現在処理をしているキューであるデータの[リソース詳細]を参照し、当該キューのデータがミラーリングされているか否かを特定する。なお、ミラーリングは、例えばノード間の分散共有メモリ等を用いて行う。ミラーリングされている場合には、ミラーリングされたデータにアクセス可能なノードのみを選択候補とし、アクセスできないノードを選択候補から除外する。なお、ミラーリングされていない場合には、本ステップにおいて特に選択候補の除外は行わない。
ステップS24で、代替ノード選択部13は、ノード管理テーブル21を参照し、ステップ21の処理で算出した資源量の最小値(例えば、プロセス数の最小値、メモリ使用量の最小値、ディスク使用量の最小値)を満たさないノードを、選択候補から除外する。
ステップS25で、代替ノード選択部13は、選択候補のノードが存在するか否かを判定し、存在すれば(Yes)、ステップS26に進む一方、存在しなければ(No)、戻り値「null」を返して当該処理を終了する。
ステップS26で、代替ノード選択部13は、ノード管理テーブル21を参照し、各ノードの資源量と、ステップ21の処理で算出した資源量の最大値とに基づき、ジョブステップの割り当て及びノード間通信制御部30の配置が可能な代替ノードを選択する。そして、選択した代替ノードを戻り値として返して当該処理を終了する。
なお、当該代替ノードの選択において判断基準とする各ノードの資源量は、ノード管理テーブル21のデータに基づき、次のように算出することができる。例えば、ノードで実行可能なプロセス数は、ノード管理テーブル21の[最大プロセス数]から[プロセス数]を差し引いて算出することができる。同様に、ノードで使用可能なメモリ容量は、ノード管理テーブル21の[最大メモリ容量]から[メモリ使用量]を差し引いて算出することができ、ノードで使用可能なディスク容量は、ノード管理テーブル21の[最大ディスク容量]から[ディスク使用量]を差し引いて算出することができる。
ここで、代替ノード選択部13は、次のような優先順位に基づいて代替ノードを選択することが望ましい。まず、できる限り少ない(最小の)ノード数でジョブステップの割り当て等を行うことが可能なノードの組合せを選択する。ノード内通信と比較して時間のかかるノード間通信を少なくするためである。その上で、算出した資源量の最大値にできる限り近い(超え幅が少ない)ノードの組合せ、換言すれば、代替コンピュータの資源量の合計が、算出した資源量に最も近いノードの組合せを選択する。さらなるエラー発生時におけるジョブステップの切り替えや他のジョブの実行に備えて、資源量の多いノードを有効に残しておくためである。
なお、かかる代替ノードの選択では、例えばネットワークにおける距離の近さ等をさらに考慮してもよい。また、ノード管理テーブル21のデータを資源量の多い順にソートしておくことで、上記選択をする際におけるノード管理テーブル21のデータの読み込み数を少なくし、効率的な選択処理を実現することが可能となる。
図19は、ジョブステップの割り当て及びノード間通信制御部30の配置に要する資源量を算出する処理(処理4)を示す。当該処理は、前述したステップS21の処理に対応する。
当該処理では、資源量の一例として、ジョブステップ及びノード間通信制御部30が使用するプロセス数の最大値及び最小値、メモリ使用量の最大値及び最小値、ディスク使用量の最大値及び最小値を算出する。
ステップS31で、代替ノード選択部13は、プロセス数の最大値及び最小値、メモリ使用量の最大値及び最小値、ディスク使用量の最大値及び最小値をリセットする(初期値0にする)。
ステップS32で、代替ノード選択部13は、ジョブステップSqに対応する配信部が必要か否か、すなわち、後続のサブキューが存在するか否かを判定する。当該判定は、ジョブステップSqがジョブステップSendであるか否かを判定することと同義である。後続するサブキューがあり、ジョブステップSqに対応する配信部が必要(Sq!=Send)の場合は(Yes)、ステップ33に進み、後続のサブキューがなく、ジョブステップSqに対応する配信部が不要(Sq=Send)の場合は(No)、ステップ34に進む。
ステップS33で、代替ノード選択部13は、リソース管理テーブル23のうち、[リソース名]が現在処理をしているキューであるデータの[リソース詳細]を参照し、これまでに算出した資源量に、配信部Sqの処理に要する資源量を加算する。具体的には次の値をそれぞれ加算する。
プロセス数の最大値及び最小値:配信部Sqのプロセス数
メモリ使用量の最大値及び最小値:配信部Sqのメモリサイズ
ディスク使用量の最大値及び最小値:配信部Sqのディスクサイズ
ステップS34で、代替ノード選択部13は、配信部Fin(入力ファイルFinからのレコードの配信部)のみの配置か否かを判定する。配信部Finのみの配置の場合は(Yes)、ステップ37に進み、計算した資源量を戻り値として返して処理を終了する。なお、配信部Finのみの配置の場合とは、ジョブステップSbeginがジョブステップS1であって、かつ、配信部Finと受信部Spが別ノードに割り当てられるという数少ないケースにおいて、受信部Sp以降の配置又は割り当てがすでに行なわれている場合である(後述のステップ41も同様)。一方、配信部Fin以外の配置や割り当てがある場合には(No)、ステップ35に進む。
ステップS35で、代替ノード選択部13は、リソース管理テーブル23の各データを参照し、これまでに算出した資源量に、蓄積部Sq、ジョブステップSbegin〜Sq、受信部Sbeginの処理に要する資源量をさらに加算する。具体的には次の値をそれぞれ加算する。
プロセス数の最小値:蓄積部Sqのプロセス数+1+受信部Sbeginのプロセス数
プロセス数の最大値:蓄積部Sqのプロセス数+ジョブステップSbeginからジョブステップSqのプロセス数合計+受信部Sbeginのプロセス数
メモリ使用量の最小値:蓄積部Sqのメモリ使用量+ジョブステップSqのメモリ使用量+受信部Sbeginのメモリ使用量
メモリ使用量の最大値:蓄積部Sqのメモリ使用量+ジョブステップSbeginからジョブステップSqのメモリ使用量の合計+受信部Sbeginのメモリ使用量
ディスク使用量の最小値:蓄積部Sqのディスク使用量+ジョブステップSqのディスク使用量+受信部Sbeginのディスク使用量
ディスク使用量の最大値:蓄積部Sqのディスク使用量+ジョブステップSbeginからジョブステップSqのディスク使用量の合計+受信部Sbeginのディスク使用量
なお、メモリ使用量の最大値は、メモリ使用量がジョブステップごとに均一な値であれば、「(ジョブステップSbeginからジョブステップSqのメモリ使用量の平均値)×(プロセス数)」といった指定でも良い(ディスク使用量も同様である)。
ステップS36で、代替ノード選択部13は、受信部Sbeginが受信部S1であるか否かを判定し、受信部S1である場合に(Yes)、ステップS37に進む一方、そうでない場合(No)には、計算した資源量を戻り値として返して処理を終了する。
ステップS37で、代替ノード選択部13は、リソース管理テーブル23のうち、[リソース名]が現在処理をしているキューであるデータの[リソース詳細]を参照し、これまでに算出した資源量に、配信部Finに要する資源量をさらに加算する。具体的には次の値をそれぞれ加算する。
プロセス数の最小値:配信部Finに要する資源量のプロセス数(配信部Finのみ配置する場合に加算)
プロセス数の最大値:配信部Finに要する資源量のプロセス数
メモリ使用量の最小値:配信部Finに要する資源量のメモリサイズ(配信部Finのみ配置する場合に加算)
メモリ使用量の最大値:配信部Finに要する資源量のメモリサイズ
ディスク使用量の最小値:配信部Finに要する資源量のディスクサイズ(配信部Finのみ配置する場合に加算)
ディスク使用量の最大値:配信部Finに要する資源量のディスクサイズ
ステップS37の処理後、計算した資源量を戻り値として返して処理を終了する。
図20は、ジョブステップの割り当て及びノード間通信制御部30の配置処理(処理5)を示す。当該処理は、前述したステップS13の処理に対応する。
ステップS41で、ジョブ管理部11は、未割り当て等の要素が配信部Finのみか否かを判定し、配信部Fin以外にも存在すれば(No)、ステップ43に進む一方、配信部Finのみであれば(Yes)、ステップ42に進む。
ステップS42で、通信制御配置部15は、配信部Finの配置を行う。
ステップS43で、ジョブ管理部11は、ジョブステップの割り当て及びノード間通信制御部30の配置を行なう処理(処理6、図21)を実行する。全てのジョブステップの割り当て及びノード間通信制御部30の配置が完了した場合には「true」の戻り値を返し、完了していない場合には「false」の戻り値を返す。当該処理の内容については後述する。
ステップS44で、ジョブ管理部11は、全てのジョブステップの割り当て及びノード間通信制御部30の配置が完了したか否かを判定し、完了した場合は(Yes)、ステップ45に進む一方、完了していない場合は、戻り値「false」を返して当該処理を終了する。
ステップS45で、ジョブ管理部11は、リソース管理テーブル23のうち、現在処理をしているキューに対応するデータの[リソース詳細]を参照し、当該キューのデータがノード間の分散共有メモリを用いてミラーリングされる設定か否かを特定する。ミラーリングされる設定の場合は、データを共有してミラーリングする対象ノードを決定し、分散共有メモリ等を用いてデータをミラーリングする。なお、一般的には、ネットワーク上で隣接するノードに対してミラーリングを行う。
ステップS46で、ジョブ管理部11は、ノード管理テーブル21のうち、[ノード名]が、ジョブステップの割り当てやノード間通信制御部30の配置を行なった代替ノードであるデータの資源量を更新する。具体的には、当該データの[プロセス数]、[メモリ使用量]及び[ディスク使用量]に、割り当てたジョブステップ及び配置したノード間通信制御部30の処理に要する資源量を加算する。その後、戻り値「true」を返して当該処理を終了する。
図21は、ジョブステップの割り当て及びノード間通信制御部30の配置を行なう処理(処理6)を示す。当該処理は、前述したステップS43の処理に対応する。
ステップS51で、ジョブ管理部11は、ジョブステップSqに対応する配信部が必要か否か、すなわち、後続のサブキューが存在するか否かを判定する。当該判定は、Sq=Sendか否かを判定することと同義である。後続するサブキューがあり、ジョブステップSqに対応する配信部が必要(Sq!=Send)の場合は(Yes)、ステップ52に進み、後続のサブキューがなく、ジョブステップSqに対応する配信部が不要(Sq=Send)の場合は(No)、ステップ53に進む。
ステップS52で、通信制御配置部15は、ステップ26で選択した代替ノードに、配信部Sqを配置する。
ステップS53で、通信制御配置部15は、配信管理テーブル24に、ジョブステップSqに対応するデータを追加する。当該追加データでは、[配信部]に配信部Sq、[データソース]に、ジョブステップSqに対応する蓄積管理テーブル26のデータを特定する情報(又は入力ファイルFin)、[配置ノード]に当該代替ノードをそれぞれ格納する。
ステップS54で、通信制御配置部15は、代替ノードに蓄積部Sqを配置する処理(処理7、図22)を実行する。当該処理の内容については後述する。
ステップS55で、ジョブ管理部11は、ジョブステップSpからジョブステップSqの割り当て及び受信部Spの配置を行なう処理(処理8、図23)を実行する。当該処理の内容については後述する。
ステップS56で、ジョブ管理部11は、ジョブステップSpがジョブステップS1であるときにのみ、当該代替ノードに割り当て可能であれば、配信部Finを配置する。
ステップS57で、ジョブ管理部11は、全てのジョブステップの割り当て及びノード間通信制御部30の配置が完了したか否かを判定する。割り当て等が全て完了した場合には(Yes)、その後、「true」の戻り値を返して当該処理を終了し、完了していない場合には(No)、「false」の戻り値を返して当該処理を終了する。
図22は、代替ノードに蓄積部Sqを配置する処理(処理7)を示す。当該処理は、前述したステップS54の処理に対応する。
ステップS61で、通信制御配置部15は、代替ノードに蓄積部Sq及び蓄積ファイルSqを配置する。
ステップS62で、通信制御配置部15は、蓄積管理テーブル26に、蓄積部Sqのデータがあるか、すなわち、蓄積部Sqが元々エラー発生ノードに存在していたか(ジョブステップSqがノード間通信を行っていたか)否かを判定する。データがある場合には(Yes)、ステップ63に進み、データがない場合には(No)、ステップ64に進む。
ステップS63で、通信制御配置部15は、蓄積管理テーブル26のうち、[蓄積部]が蓄積部Sqのデータの[配置ノード]を、代替ノードに更新する。
ステップS64で、通信制御配置部15は、蓄積管理テーブル26を参照し、[蓄積部]が、ジョブステップSqよりも後に実行されるジョブステップに対応する蓄積部であるデータのうち、最も早いジョブステップに対応する蓄積部のデータ(蓄積部Sqに対応するサブキューの次のサブキューに対応する蓄積部のデータ)の[処理済みレコード]を取得する。前述したように、特別な仕組みを備えていない一般的なパイプを用いた場合は、ジョブステップの一部が異常終了した場合、途中の計算結果(受信管理テーブル25の受信済みレコードから「処理済みレコード−1」まで)が失われてしまうため、抜けが発生しないように、蓄積ファイル34に格納済みのレコードを選択する必要がある。仮に、ジョブ制御部が、同期型のノード内通信において、ジョブステップの再開(restart)が可能である場合は、蓄積部Sqの[処理済みレコード]に受信部Sq+1の「受信済みレコード+1」を設定できる。これにより、Sq+1以降のジョブステップで、切替え後にレコードを待つ時間を最小化できる。
ステップS65で、通信制御配置部15は、蓄積管理テーブル26に、蓄積部Sqのデータを追加する。当該追加データでは、[蓄積部]に蓄積部Sq、[処理済みレコード]にステップS64で取得した処理済みレコード、[配置ノード]に蓄積部Sqを割り当てた代替ノードをそれぞれ格納する。また、このときリソース管理テーブル23の該当するリソース名(ジョブステップ番号)のリソース詳細に、特定のレコード番号の範囲の処理済みレコードの有無、および、配置場所を記録する。配置場所が、ローカルディスクのみの場合、ノードダウン時に蓄積ファイルを参照できなくなるため、より古いレコードから処理を再開する必要があり、異常時に後続の受信部が受信待ちの時間が長くなる。そのため、共有ディスクに配置するか、ミラーリングを行うことが望ましい。あらゆるノードから参照・更新する形態では、ジョブやノードを増やした場合に性能のボトルネックとなりやすいため、隣接ノードにミラーリングを行う形態がより望ましい。この場合、性能ボトルネックとなる単一障害点がなくなるため、ジョブやノード数によらず安定した性能が得られる。
図23は、代替ノードにジョブステップSp〜Sqの割り当て及び受信部Spの配置を行なう処理を示す。当該処理は、前述したステップS55の処理に対応する。
ステップS71で、ジョブステップ割当部14は、代替ノードで実行可能なプロセス数(資源量)の範囲内で割り当てることが可能なジョブステップ数を算出する。
具体的には、ジョブステップ割当部14は、ノード管理テーブル21を参照し、[最大プロセス数]から[プロセス数]を差し引いて、現在使用可能なプロセス数を算出する。一方、ジョブステップ割当部14は、リソース管理テーブル23の[リソース詳細]を参照し、受信部32、蓄積部33及び配信部31が必要とするプロセス数を特定する。そして、現在使用可能なプロセス数から、受信部32、蓄積部33及び配信部31が必要とするプロセス数を差し引いて、代替ノードに割り当て可能なジョブステップ数を算出する。なお、当該代替ノードに割り当てるジョブステップの先頭がジョブステップS1である場合のみ、配信部Finのプロセス数も考慮してジョブステップ数を算出する。一方、当該代替ノードに割り当てるジョブステップの末尾が最後のジョブステップである場合には、配信部31のプロセス数の加算は不要である。また、当該計算においては、割り当てられるジョブステップが使用するメモリ容量やディスク容量が、当該代替ノードで使用可能なメモリ容量やディスク容量の範囲内になるようにする。
ステップS72で、ジョブステップ割当部14は、変数pに、[q−(ステップ71で算出した、代替ノードに割り当て可能なジョブステップ数)]を代入する。
ステップ73で、ジョブステップ割当部14は、代替ノードにジョブステップSp〜Sqを割り当てる。
ステップS74で、ジョブステップ割当部14は、ジョブステップ管理テーブル22のうち、[ステップ名]がジョブステップSp〜Sqのデータの配置ノードを、代替ノードに更新する。
ステップS75で、通信制御配置部15は、代替ノードに、受信部Spを配置する。
ステップS76で、通信制御配置部15は、蓄積管理テーブル26を参照し、[蓄積部]が蓄積部Sqであるデータの[処理済みレコード]を取得する。
ステップS77で、通信制御配置部15は、受信管理テーブル25に、受信部Spのデータを追加する。当該追加データでは、[受信部]に受信部Sp、[対応配信部]に配信部Sp-1(又は入力ファイルFin)、[受信済みレコード]にステップ76で取得した[処理済みレコード]の値、[配置ノード]に当該代替ノードをそれぞれ格納する。
[本実施形態による効果等]
本実施形態によれば、各ノードにおいてノード間通信制御部30を設けることにより、ノード間通信が、ジョブステップによる処理から独立して行われる(すなわち、ノード間通信がジョブステップから隠ぺいされる)。そして、エラー発生ノードにおいて並列処理で実行していたジョブステップを分割して複数の代替ノードに割り当てるときに、それぞれの代替ノードに対し、ノード間通信制御部30を配置する。具体例として、代替ノードのそれぞれにつき、代替ノードに割り当てられたジョブステップ群より前のジョブステップが存在するときに、当該代替ノードの直前のジョブステップを実行するノードから、当該ノードのジョブステップによる処理済みレコードを受信する受信部32を配置する。一方、代替ノードに割り当てられたジョブステップ群より後のジョブステップが存在するときに、当該代替ノードに割り当てられたジョブステップ群による処理済みレコードを取得する蓄積部33、及び当該処理済みレコードを、当該代替ノードの直後のジョブステップを実行するノードに配信する配信部31を配置する。これにより、同期型のノード内通信を行っていたジョブステップ間の通信が、ノード間通信に切り替えられる。したがって、エラー発生ノードにおいて並列実行していたジョブステップ群を、複数の代替ノードによる処理に自動的に切り替えることが可能となり、処理の再開までに要する時間を短縮することができる。また、前述したように、このような切り替えは、エラーが発生した場合に限らず、例えばシステムのメンテナンスの際や、サーバ増設等のシステム構成の変更の際などにも適用することができる。
また、蓄積部33において、代替ノードの処理済みレコードを蓄積ファイル34に格納し、蓄積部33が、代替ノードに割り当てられたジョブステップ群の直後のジョブステップを実行するノードからの要求に応じて、当該蓄積ファイル34に蓄積した処理済みレコードを当該ノードに送信する。これにより、ノード間通信におけるレコードの再送要求に対応することが可能となる。
また、本実施形態によれば、エラー発生ノードで実行していた最後のジョブステップによる処理済みレコードを蓄積管理テーブル26から特定する。そして、当該処理済みレコードを、受信管理テーブル25における、エラー発生ノードで実行していた最初のジョブステップに対応する受信部32に対応するデータに格納し、当該受信部32が参照できるようにする。これにより、受信部32が処理再開時に配信部31に配信要求するレコードが、エラー発生ノードで実行していた最後のジョブステップによる処理済みレコードとなる。したがって、代替ノードに切り替えたことによる処理の抜け(処理されないレコードの発生)を防ぐことができる。一般的には同期型のノード内通信においてデータの生成側の異常発生時にジョブの再開が出来ないが、仮にジョブ制御部が、同期型のノード内通信において、異常となったレコードからジョブステップの再開が可能である場合は、蓄積部Sqの[処理済みレコード]に受信部Sq+1の「受信済みレコード+1」を設定することで、切替え後にSq+1以降のジョブステップで、次に処理をするレコードを待つ時間を最小化できる。なお、本実施形態ではこのように、後ろのジョブステップによる処理済みレコードの情報を、前のジョブステップに対応するノード間通信制御部30の配置において用いるために、ジョブステップの割り当て及びノード間通信制御部30の配置を、後ろのジョブステップに対応するものから順に行なっている。しかしながら、割り当て等の方法自体は、このような方法に限定されるものではない。
また、前述したように、ノードが故障した場合でも、蓄積ファイル34を引き継いで実行する方法の一例として、共有ディスクを使用する方法や、隣接のノードにミラーリングする方法が考えられる。従来は、ジョブの実行中に処理済みレコードの受信元、配信先を動的に変更する仕組みがないため、あらゆる代替ノードからアクセス可能なように、蓄積ファイル34を共有ディスクに配置しておく必要があった。このようなディスク装置は、ジョブステップの実行ノードよりディスクアクセスが集中する傾向がある。一方で、本実施形態によれば、前後のノード間通信制御部30の蓄積部33や受信部32の処理済みレコードより、動的に蓄積ファイル34を構成できる。そして、蓄積ファイル34に必要な資源量がリソース管理テーブル23によって示され、当該資源量を、ノード管理テーブル24より割り当てることができる。したがって、あらかじめ決められた場所ではなく、その時点で利用可能なノードに蓄積ファイル34を割り当てることができる。こうすることで、ノード数やジョブステップの数によらず、安定した性能でジョブが実行できる。
また、本実施形態によれば、代替ノードを選択する際に、できる限り少ないノード数でジョブステップを割り当てることが可能なノードを選択するようにする。これにより、ノード内通信と比較して時間のかかるノード間通信を少なくすることができる。その上で、計算した資源量の最大値にできる限り近いノードを選択する。これにより、さらなるエラー発生時におけるジョブステップの切り替えや他のジョブの実行に備えて、資源量の多いノードを有効に残しておくことができる。
また、本実施形態によれば、代替ノードを選択する際に、少なくともノード間通信制御部30の配置に要する資源量を満たさないノードを予め選択候補から除外する。これにより、確実にノード間通信への切り替えが可能であるノードのみを代替ノードとすることができる。
<ハードウェア構成等>
ここで、上記管理サーバ10や各ノードとして機能するコンピュータのハードウェア構成の一例を図24に示す。本コンピュータは、プロセッサ101、メモリ102、ストレージ103、可搬記憶媒体駆動装置104、入出力装置105及び通信インタフェース106を備える。
プロセッサ101は、制御ユニット、演算ユニット及び命令デコーダ等を含み、実行ユニットが、命令デコーダで解読されたプログラムの命令に従い、制御ユニットより出力される制御信号に応じ、演算ユニットを用いて算術・論理演算を実行する。かかるプロセッサ101は、制御に用いる各種情報が格納される制御レジスタ、既にアクセスしたメモリ102等の内容を一時的に格納可能なキャッシュ、及び、仮想記憶のページテーブルのキャッシュとしての機能を果たすTLBを備える。なお、プロセッサ101は、CPU(Central Processing Unit)コアが複数設けられている構成でもよい。
メモリ102は、例えばRAM(Random Access Memory)等の記憶装置であり、プロセッサ101で実行されるプログラムがロードされるとともに、プロセッサ101の処理に用いるデータが格納されるメインメモリである。また、ストレージ103は、例えばHDD(Hard Disk Drive)やフラッシュメモリ等の記憶装置であり、プログラムや各種データが格納される。可搬記憶媒体駆動装置104は、可搬記憶媒体107に記憶されたデータやプログラムを読み出す装置である。可搬記憶媒体107は、例えば磁気ディスク、光ディスク、光磁気ディスク又はフラッシュメモリ等である。プロセッサ101は、メモリ102やストレージ103と協働しつつ、ストレージ103や可搬記憶媒体107に格納されたプログラムを実行する。なお、プロセッサ101が実行するプログラムや、アクセス対象となるデータは、当該コンピュータと通信可能な他の装置に格納されていてもよい。なお、本実施形態で記載した管理サーバ10の記憶手段とは、メモリ102、ストレージ103及び可搬記憶媒体107若しくは当該コンピュータと通信可能な他の装置の少なくともいずれかを示す。
入出力装置105は例えばキーボードやタッチパネル、ディスプレイ等であり、ユーザ操作等による動作命令を受け付ける一方、コンピュータによる処理結果を出力する。
通信インタフェース106は、例えば、LAN(Local Area Network)カード等の他、無線周波受信機および送信機、ならびに光受信機および送信機を含むことができる。前述の受信機および送信機は、例えばWi−Fiネットワーク、ブルートゥース・ネットワーク、ロング・ターム・エボリューションなどの1つまたは複数の通信ネットワークにより動作することができる。
これらのコンピュータの各構成要素は、バス108で接続されている。
<その他>
なお、本明細書で説明したコンピュータの機能的構成及び物理的構成は、上述の態様に限るものではなく、例えば、各機能や物理資源を統合して実装したり、逆に、さらに分散して実装したりすることも可能である。
また、本明細書において、閾値等との比較において「〜以上」や「〜以下」とした記載箇所は、当該記載に限定されるものではなく、「〜より大きい(〜を上回る)」や「〜より小さい(〜を下回る)」に適宜置き換えることが可能である。
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
第1のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータそれぞれに割り当て、
前記複数の代替コンピュータのそれぞれについて、当該代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡し、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する通信制御部を配置する、
処理をコンピュータに実行させるジョブ管理プログラム。
(付記2)
前記通信制御部は、前記代替コンピュータに割り当てられた処理群による処理済みのデータを蓄積ファイルに蓄積し、当該処理群の直後の処理を実行するコンピュータからの要求に応じて、当該蓄積ファイルに蓄積したデータを当該コンピュータに送信する、付記1記載のジョブ管理プログラム。
(付記3)
前記配置する処理は、前記第1のコンピュータにより並列実行されていたジョブの処理群のうち最後の処理による処理済みのデータのレコード番号を特定して、当該レコード番号を記憶手段に格納し、
前記通信制御部は、記憶手段に格納された前記レコード番号を参照し、当該レコード番号の次のレコード番号以降のデータを、前記代替コンピュータに割り当てられた処理群の直前の処理を実行するコンピュータに対して要求して受信する、付記1又は2記載のジョブ管理プログラム。
(付記4)
前記第1のコンピュータにより並列実行されていたジョブの処理群の割り当て及び前記通信制御部の配置に要する資源量を算出し、算出した当該資源量及び複数のコンピュータのそれぞれの資源量に基づき、当該複数のコンピュータから、前記複数の代替コンピュータを選択する処理をさらに含む、付記1〜3のいずれか1項に記載のジョブ管理プログラム。
(付記5)
前記選択する処理は、前記複数のコンピュータから、前記複数の代替コンピュータの数が最小となる組合せを特定し、当該組合せのうち、前記複数の代替コンピュータの資源量の合計が、算出した前記資源量に最も近い組合せのコンピュータを、前記複数の代替コンピュータとして選択する、付記4記載のジョブ管理プログラム。
(付記6)
前記選択する処理は、前記複数のコンピュータのうち、少なくとも前記通信制御部の配置に要する資源量を満たさないコンピュータを予め選択候補から除外して、前記複数の代替コンピュータを選択する、付記4又は5に記載のジョブ管理プログラム。
(付記7)
第1のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータのそれぞれに割り当て、
前記複数の代替コンピュータのそれぞれについて、当該代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡し、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する通信制御部を配置する、
処理をコンピュータが実行するジョブ管理方法。
(付記8)
現用系のコンピュータにより並列実行されていたジョブの処理群を分割し、複数の代替コンピュータのそれぞれに割り当てるジョブステップ割当部と、
前記複数の代替コンピュータのそれぞれについて、当該代替コンピュータに割り当てられた処理群より前の処理が存在するとき、当該処理群の直前の処理を実行するコンピュータから処理済みのデータを受信して、当該代替コンピュータに割り当てられた処理群に渡し、当該代替コンピュータに割り当てられた処理群より後の処理が存在するとき、当該処理群の直後の処理を実行するコンピュータに、当該代替コンピュータに割り当てられた処理群による処理済みのデータを配信する通信制御部を配置する通信制御配置部と、
を備えるジョブ管理装置。