(57)【特許請求の範囲】
【請求項１】
複数のノードの数に応じて分割した一つのファイルの実体レコードを、複数のノードに分散して格納する分散処理システムであって、
複数のノードにおいて形成される分散共有ストレージ上の処理対象ファイルを参照しながら、複数のノードでそれぞれ同一のアプリケーションを実行するアプリケーション実行部と、
前記アプリケーション実行部により実行されている前記アプリケーションの処理ステップを監視する処理ステップ監視部と、
前記処理ステップ監視部により監視されている前記処理ステップが、エラーレコードのリカバリを処理するステップであるか否かを判定する判定部と、
前記判定部により前記処理ステップが前記エラーレコードのリカバリを処理するステップであると判定された場合に、当該エラーレコードのリカバリを処理するステップを実行するノードに、隔離ファイルを生成し、当該隔離ファイルに前記処理対象ファイルの内容を複製してから、当該ノードの前記アプリケーションに提供し、一方、前記判定部により前記処理ステップが前記エラーレコードのリカバリを処理するステップではないと判定された場合には、当該処理ステップを実行するノードの前記アプリケーションに、前記分散共有ストレージ上の処理対象ファイルを提供するリソース提供部と、
を備えることを特徴とする分散処理システム。
【請求項２】
前記リソース提供部は、前記判定部により前記処理ステップが前記エラーレコードのリカバリを処理するステップではないと判定された場合に、当該処理ステップの実行結果を格納した出力ファイルを生成して前記分散共有ストレージ上に出力し、前記判定部により前記処理ステップが前記エラーレコードのリカバリを処理するステップであると判定された場合には、当該処理ステップの実行結果を格納した前記隔離ファイルを生成して前記分散共有ストレージ上に出力する、
ことを特徴とする請求項１記載の分散処理システム。
【請求項３】
複数のノードの数に応じて分割した一つのファイルの実体レコードを、複数のノードに分散して格納する分散処理システムにおける分散処理方法であって、
複数のノードにおいて形成される分散共有ストレージ上の処理対象ファイルを参照しながら、複数のノードでそれぞれ同一のアプリケーションを実行するアプリケーション実行ステップと、
前記アプリケーション実行ステップにおいて実行されている前記アプリケーションの処理ステップを監視する処理ステップ監視ステップと、
前記処理ステップ監視ステップにおいて監視されている前記処理ステップが、エラーレコードのリカバリを処理するステップであるか否かを判定する判定ステップと、
前記判定ステップにおいて前記処理ステップが前記エラーレコードのリカバリを処理するステップであると判定された場合に、当該エラーレコードのリカバリを処理するステップを実行するノードに、隔離ファイルを生成し、当該隔離ファイルに前記処理対象ファイルの内容を複製してから、当該ノードの前記アプリケーションに提供し、一方、前記判定ステップにおいて前記処理ステップが前記エラーレコードのリカバリを処理するステップではないと判定された場合には、当該処理ステップを実行するノードの前記アプリケーションに、前記分散共有ストレージ上の処理対象ファイルを提供するリソース提供ステップと、
を含むことを特徴とする分散処理方法。
【請求項４】
請求項３に記載の各ステップをコンピュータに実行させるための分散処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理システム、分散処理方法および分散処理プログラムに関する。
【背景技術】
【０００２】
バッチ処理を実行する際に、分散する資源を用いる分散実行環境を利用することで、より大量のデータを処理することが可能となる。下記特許文献１には、分散実行環境を利用して、複数のジョブ間でデータを受け渡しながらバッチ処理を実行するシステムが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−１０２４４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
バッチ処理は非対話型の処理であるため、エラーや障害が発生した時にその情報がユーザに到達するまでにタイムラグを要するという特性がある。このタイムラグは、分散実行環境を利用することで、増大してしまう。それゆえ、バッチ処理でエラーや障害が発生した時に、その解析作業や対応作業を容易化する技術の開発が重要となる。
【０００５】
特許文献１に記載のシステムでは、エラーや障害が発生した時の処理についてまでは言及していない。したがって、エラーや障害が発生した場合には、その解析作業や対応作業に時間を要してしまう。
【０００６】
本発明は、上述した課題を解決するためになされたものであり、エラーや障害が発生した場合に、その解析作業や対応作業を容易化することができる分散処理システム、分散処理方法および分散処理プログラムを提供することを目的の一つとする。
【課題を解決するための手段】
【０００７】
本発明の一態様である分散処理システムは、分散共有ストレージ上の処理対象ファイルを参照しながら一つのアプリケーションを分散して実行する複数のアプリケーション実行部と、前記アプリケーション実行部により実行されている前記アプリケーションの処理ステップを監視する処理ステップ監視部と、前記処理ステップ監視部により監視されている前記処理ステップが、リソースの隔離が必要なリソース隔離ステップであるか否かを判定するリソース隔離判定部と、前記リソース隔離判定部により前記処理ステップが前記リソース隔離ステップであると判定された場合に、隔離ファイルを生成するリソース提供部と、を備える。
【０００８】
本発明の一態様である分散処理方法は、分散共有ストレージ上の処理対象ファイルを参照しながら一つのアプリケーションを分散して実行する複数のアプリケーション実行ステップと、前記アプリケーション実行ステップにおいて実行されている前記アプリケーションの処理ステップを監視する処理ステップ監視ステップと、前記処理ステップ監視ステップにおいて監視されている前記処理ステップが、リソースの隔離が必要なリソース隔離ステップであるか否かを判定するリソース隔離判定ステップと、前記リソース隔離判定ステップにおいて前記処理ステップが前記リソース隔離ステップであると判定された場合に、隔離ファイルを生成するリソース提供ステップと、を含む。
【０００９】
本発明の一態様である分散処理プログラムは、上記分散処理方法に含まれる各ステップをコンピュータに実行させる。
【発明の効果】
【００１０】
本発明によれば、エラーや障害が発生した場合に、その解析作業や対応作業を容易化することができる。
【図面の簡単な説明】
【００１１】
【図１】第１実施形態における分散処理システムの構成を例示する図である。
【図２】第１実施形態における分散共有ストレージのファイルのデータ構成を例示する図である。
【図３】第１実施形態におけるアプリケーションの処理ステップを説明するためのフローチャートである。
【図４】図３に示す同月レコード加算処理の手順を説明するためのフローチャートである。
【図５】図３に示すレコード書換処理の手順を説明するためのフローチャートである。
【図６】図３に示す同年レコード加算処理の手順を説明するためのフローチャートである。
【図７】第２実施形態における分散処理システムの要部の構成を例示する図である。
【図８】第２実施形態におけるアプリケーションの処理ステップを説明するためのフローチャートである。
【図９】図８に示すファイル分割処理の手順を説明するためのフローチャートである。
【図１０】図８に示すデータ取得処理の手順を説明するためのフローチャートである。
【図１１】第２実施形態における分散共有ストレージのファイルのデータ構成を例示する図である。
【図１２】第２実施形態における分散共有ストレージのファイルのデータ構成を例示する図である。
【図１３】第２実施形態における分散共有ストレージに格納される各種ファイルを例示する図である。
【図１４】第２実施形態における分散共有ストレージに格納される各種ファイルを例示する図である。
【図１５】第２実施形態における分散共有ストレージに格納される各種ファイルを例示する図である。
【図１６】第２実施形態における分散共有ストレージに格納される各種ファイルを例示する図である。
【図１７】第２実施形態における分散共有ストレージに格納される各種ファイルを例示する図である。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照して、本発明に係る分散処理システム、分散処理方法および分散処理プログラムの好適な実施形態について説明する。
【００１３】
[第１実施形態]
まず、図１を参照して、第１実施形態における分散処理システムの構成について説明する。図１は、二つのホストノードＨａ、Ｈｂで分散共有ストレージＤＳを形成し、各ホストノードＨａ、Ｈｂが同一のアプリケーションＡａ、Ａｂをそれぞれ実行する場合における分散処理システム１０の構成例である。処理ステップ監視部３およびリソース隔離判定部４は、ホストノードＨａ、Ｈｂとは異なるノードに備えられている。異なるノードは、一つのノードであってもよいし、二つのノードであってもよい。
【００１４】
ホストノードＨａ、Ｈｂは、それぞれコンテナＣａ、Ｃｂ、およびローカルストレージＬＳａ、ＬＳｂを有する。コンテナＣａ、Ｃｂは、それぞれアプリケーション実行部１ａ、１ｂおよびリソース提供部２ａ、２ｂを含む。ローカルストレージＬＳａ、ＬＳｂはネットワークコネクションＮＣを介して接続されており、これらローカルストレージＬＳａ、ＬＳｂによって分散共有ストレージＤＳが構成される。
【００１５】
なお、ホストノードＨａ、Ｈｂ、コンテナＣａ、Ｃｂ、アプリケーションＡａ、Ａｂ、アプリケーション実行部１ａ、１ｂ、リソース提供部２ａ、２ｂ、およびローカルストレージＬＳａ、ＬＳｂは、以下において特に区別する必要がない場合には、それぞれホストノードＨ、コンテナＣ、アプリケーションＡ、アプリケーション実行部１、リソース提供部２およびローカルストレージＬＳと記載する。
【００１６】
一般に、分散共有ストレージを用いる分散処理システムでは、一つのファイルのデータを分割し、分割したそれぞれのデータのセグメントの一貫性と永続性とを保証するノードを選定する。そして、各ノード間で、参照用キャッシュデータの保持や参照／更新操作の伝播と一貫性を保持するための通信とを行う。ノードの選定や参照／更新のプロトコルは、実装する分散共有ストレージごとに公知の各種の手法を用いることができる。
【００１７】
第１実施形態では、分散共有ストレージＤＳ上のファイルＦとして、図２に示すファイルを用いた場合の実施例について説明する。第１実施形態では、図２に示すファイルをレコード単位に二分割し、前半の５レコードをホストノードＨａのローカルストレージＬＳａに実態レコードＳａとして格納し、後半の５レコードをホストノードＨｂのローカルストレージＬＳｂに実態レコードＳｂとして格納する。
【００１８】
第１実施形態におけるアプリケーション実行部１は、アプリケーションＡの処理を開始する時にパラメータを受け取る。アプリケーション実行部１は、パラメータが“１”である場合には分散共有ストレージＤＳ上のファイルＦの奇数番目のレコードをアプリケーションＡの処理対象とし、パラメータが“２”である場合には分散共有ストレージＤＳ上のファイルＦの偶数番目のレコードをアプリケーションＡの処理対象とする。
【００１９】
アプリケーションＡａがファイルＦの後半５レコードに対する参照要求を行うと、ローカルストレージＬＳａからローカルストレージＬＳｂにネットワークコネクションＮＣ経由で参照依頼が送られ、後半５レコードの参照用レプリカレコードＲａがローカルストレージＬＳａ上にキャッシュされる。アプリケーションＡａは、参照用レプリカレコードＲａのデータを参照する。
【００２０】
アプリケーションＡａがファイルＦの後半５レコードに対する更新要求を行うと、ローカルストレージＬＳａからローカルストレージＬＳｂにネットワークコネクションＮＣ経由で更新依頼が送られ、ローカルストレージＬＳａ上の参照用レプリカレコードＲａが更新される。この更新の際に、ローカルストレージＬＳｂは、実体レコードＳｂの一貫性と永続性とを保証する。
【００２１】
アプリケーションＡｂがファイルＦの前半５レコードに対する参照要求を行うと、ローカルストレージＬＳｂからローカルストレージＬＳａにネットワークコネクションＮＣ経由で参照依頼が送られ、前半５レコードの参照用レプリカレコードＲｂがローカルストレージＬＳｂ上にキャッシュされる。アプリケーションＡｂは、参照用レプリカレコードＲｂのデータを参照する。
【００２２】
アプリケーションＡｂがファイルＦの前半５レコードに対する更新要求を行うと、ローカルストレージＬＳｂからローカルストレージＬＳａにネットワークコネクションＮＣ経由で更新依頼が行われ、ローカルストレージＬＳｂ上の参照用レプリカレコードＲｂが更新される。この更新の際に、ローカルストレージＬＳａは、実体レコードＳａの一貫性と永続性とを保証する。
【００２３】
次に、図１を参照して、第１実施形態における分散処理システムの機能について説明する。
【００２４】
アプリケーション実行部１は、分散共有ストレージＤＳ上の処理対象ファイルＦを参照してアプリケーションＡを実行する。
【００２５】
リソース提供部２は、アプリケーション実行部１からのリソースの参照要求や更新要求に応じてデータを参照や更新する参照／更新処理を実行する。
【００２６】
リソース提供部２は、アプリケーション実行部１が現在実行しているアプリケーションＡの処理ステップを、処理ステップ監視部３から取得する。
【００２７】
処理ステップ監視部３は、アプリケーション実行部１が現在実行しているアプリケーションＡの処理ステップを監視する。
【００２８】
リソース提供部２は、処理ステップ監視部３から取得した処理ステップが、リソース隔離対象ステップに該当するか否かをリソース隔離判定部４に問い合わせる。
【００２９】
リソース隔離判定部４は、リソース提供部２から問い合わせを受けた処理ステップが、リソースの隔離が必要なリソース隔離ステップであるか否かを判定する。
【００３０】
リソース提供部２は、リソース隔離判定部４により処理ステップがリソース隔離ステップであると判定された場合に、リソース隔離ステップを実行しているホストノードＨのローカルストレージＬＳ上に隔離ファイルＣＦを生成し、この隔離ファイルＣＦに処理対象ファイルＦの内容を複製する。
【００３１】
アプリケーション実行部１は、自ホストノードＨのローカルストレージＬＳ上に隔離ファイルＣＦが生成された後は、その隔離ファイルＣＦを参照してアプリケーションＡを実行する。
【００３２】
次に、図３を参照して、第１実施形態におけるアプリケーションＡの処理ステップについて説明する。アプリケーションＡは、主な処理ステップとして、同月レコード加算処理と、レコード書換処理と、同年レコード加算処理と、を有する。これらの処理ステップは、アプリケーション実行部１によって、以下の手順で実行される。
【００３３】
最初に、アプリケーション実行部１は、同月レコード加算処理を実行する（ステップＳ１０１）。
【００３４】
続いて、アプリケーション実行部１は、同月レコード加算処理でスキップしたレコードがあったか否かを判定する（ステップＳ１０２）。この判定がＮＯである場合（ステップＳ１０２；ＮＯ）には、後述するステップＳ１０４に処理を移行する。
【００３５】
一方、上記ステップＳ１０２の判定でスキップしたレコードがあったと判定した場合（ステップＳ１０２；ＹＥＳ）に、アプリケーション実行部１は、レコード書換処理を実行する（ステップＳ１０３）。
【００３６】
続いて、アプリケーション実行部１は、同年レコード加算処理を実行する（ステップＳ１０４）。
【００３７】
図４を参照して、同月レコード加算処理の手順について説明する。
【００３８】
最初に、アプリケーション実行部１は、変数Ｘを０で初期化する（ステップＳ２０１）。
【００３９】
続いて、アプリケーション実行部１は、ファイルＦに未読のレコードが存在するか否かを確認する（ステップＳ２０２）。この判定がＮＯである場合（ステップＳ２０２；ＮＯ）には、同月レコード加算処理を終了する。
【００４０】
一方、上記ステップＳ２０２の判定でファイルＦに未読のレコードが存在すると判定した場合（ステップＳ２０２；ＹＥＳ）に、アプリケーション実行部１は、ファイルＦから１件レコードを読み込む（ステップＳ２０３）。
【００４１】
続いて、アプリケーション実行部１は、上記ステップＳ２０３で読み込んだレコードの日付のフォーマットが正しく、かつ、日付が処理実行日と同一月であるか否かを判定する（ステップＳ２０４）。この判定がＮＯである場合（ステップＳ２０４；ＮＯ）には、読み込んだレコードをスキップする（ステップＳ２０５）。そして、処理を上記ステップＳ２０２に移行する。
【００４２】
一方、上記ステップＳ２０４の判定でレコードの日付のフォーマットが正しく、かつ、レコードの日付が処理実行日と同一月であると判定した場合（ステップＳ２０４；ＹＥＳ）に、アプリケーション実行部１は、上記ステップＳ２０３で読み込んだレコードの値を、変数Ｘに加算する（ステップＳ２０６）。そして、処理を上記ステップＳ２０２に移行する。
【００４３】
図５を参照して、レコード書換処理の手順について説明する。
【００４４】
最初に、アプリケーション実行部１は、ファイルＦに未読のレコードが存在するか否かを確認する（ステップＳ３０１）。この判定がＮＯである場合（ステップＳ３０１；ＮＯ）には、変数Ｘを出力してレコード書換処理を終了する。
【００４５】
一方、上記ステップＳ３０１の判定でファイルＦに未読のレコードが存在すると判定した場合（ステップＳ３０１；ＹＥＳ）に、アプリケーション実行部１は、ファイルＦから１件レコードを読み込む（ステップＳ３０２）。
【００４６】
続いて、アプリケーション実行部１は、上記ステップＳ３０２で読み込んだレコードの日付のフォーマットが不正であるか否かを判定する（ステップＳ３０３）。この判定がＮＯである場合（ステップＳ３０３；ＮＯ）には、処理を上記ステップＳ３０１に移行する。
【００４７】
一方、上記ステップＳ３０３の判定でレコードの日付のフォーマットが不正であると判定した場合（ステップＳ３０３；ＹＥＳ）に、アプリケーション実行部１は、上記ステップＳ３０２で読み込んだレコードの日付を、処理実行日で書き換え更新する（ステップＳ３０４）。そして、処理を上記ステップＳ３０１に移行する。
【００４８】
図６を参照して、同年レコード加算処理の手順について説明する。
【００４９】
最初に、アプリケーション実行部１は、変数Ｙを０で初期化する（ステップＳ４０１）。
【００５０】
続いて、アプリケーション実行部１は、ファイルＦに未読のレコードが存在するか否かを確認する（ステップＳ４０２）。この判定がＮＯである場合（ステップＳ４０２；ＮＯ）には、変数Ｙを出力して同年レコード加算処理を終了する。
【００５１】
一方、上記ステップＳ４０２の判定でファイルＦに未読のレコードが存在すると判定した場合（ステップＳ４０２；ＹＥＳ）に、アプリケーション実行部１は、ファイルＦから１件レコードを読み込む（ステップＳ４０３）。
【００５２】
続いて、アプリケーション実行部１は、上記ステップＳ４０３で読み込んだレコードの日付が処理実行日と同一年であるか否かを判定する（ステップＳ４０４）。この判定がＮＯである場合（ステップＳ４０４；ＮＯ）には、処理を上記ステップＳ４０２に移行する。
【００５３】
一方、上記ステップＳ４０４の判定でレコードの日付が処理実行日と同一年であると判定した場合（ステップＳ４０４；ＹＥＳ）に、アプリケーション実行部１は、上記ステップＳ４０３で読み込んだレコードの値を、変数Ｙに加算する（ステップＳ４０５）。そして、処理を上記ステップＳ４０２に移行する。
【００５４】
次に、アプリケーション実行部１ａがパラメータ“１”を指定してアプリケーションＡａを実行し、これと並行して、アプリケーション実行部１ｂがパラメータ“２”を指定してアプリケーションＡｂを実行する場合の動作について説明する。
【００５５】
この動作において、アプリケーション実行部１ａは、図２のレコードのうち、レコード番号“１”、“３”、“５”、“７”および“９”を処理対象レコードとする。一方、アプリケーション実行部１ｂは、図２のレコードのうち、レコード番号“２”、“４”、“６”、“８”および“１０”を処理対象レコードとする。また、アプリケーションＡの実行日を、“２０１１／６／１６”とする。さらに、リソース隔離判定部４は、リソース隔離対象ステップとしてレコード書換処理を設定している。
【００５６】
アプリケーションＡａは、以下の手順で実行される。
【００５７】
（ａ−１）アプリケーション実行部１ａは、レコード番号“１”、“３”、“５”、“７”および“９”に対して同月レコード加算処理を順次実行する。
【００５８】
（ａ−２）リソース提供部２ａは、アプリケーション実行部１ａによって現在実行されている処理ステップが同月レコード加算処理であることを処理ステップ監視部３から得る。
【００５９】
（ａ−３）リソース提供部２ａは、同月レコード加算処理がリソース隔離対象ステップに該当しないことをリソース隔離判定部４から得る。
【００６０】
（ａ−４）リソース提供部２ａは、アプリケーション実行部１ａに対して分散共有ストレージＤＳ上の処理対象ファイルＦを提供する。
【００６１】
（ａ−５）アプリケーション実行部１ａは、同月レコード加算処理の結果として、“１７１”を出力する。
【００６２】
（ａ−６）アプリケーション実行部１ａは、同月レコード加算処理でスキップしたレコードが存在しないため、レコード番号“１”、“３”、“５”、“７”および“９”に対して同年レコード加算処理を順次実行する。
【００６３】
（ａ−７）リソース提供部２ａは、アプリケーション実行部１ａによって現在実行されている処理ステップが同年レコード加算処理であることを処理ステップ監視部３から得る。
【００６４】
（ａ−８）リソース提供部２ａは、同年レコード加算処理がリソース隔離対象ステップに該当しないことをリソース隔離判定部４から得る。
【００６５】
（ａ−９）リソース提供部２ａは、アプリケーション実行部１ａに対して分散共有ストレージＤＳ上の処理対象ファイルＦを提供する。
【００６６】
（ａ−１０）アプリケーション実行部１ａは、同年レコード加算処理の結果として、“１７１”を出力する。
【００６７】
アプリケーションＡｂは、以下の手順で実行される。
【００６８】
（ｂ−１）アプリケーション実行部１ｂは、レコード番号“２”、“４”、“６”、“８”および“１０”に対して同月レコード加算処理を順次実行する。
【００６９】
（ｂ−２）リソース提供部２ｂは、アプリケーション実行部１ｂによって現在実行されている処理ステップが同月レコード加算処理であることを処理ステップ監視部３から得る。
【００７０】
（ｂ−３）リソース提供部２ｂは、同月レコード加算処理がリソース隔離対象ステップに該当しないことをリソース隔離判定部４から得る。
【００７１】
（ｂ−４）リソース提供部２ｂは、アプリケーション実行部１ｂに対して分散共有ストレージＤＳ上の処理対象ファイルＦを提供する。
【００７２】
（ｂ−５）アプリケーション実行部１ｂは、同月レコード加算処理において、レコード番号“４”の日付のフォーマットが不正であるためレコード番号“４”のレコードをスキップし、レコード番号“８”の日付と実行日との月が異なるためレコード番号“８”のレコードをスキップする。アプリケーション実行部１ｂは、同月レコード加算処理の結果として、“３２”を出力する。
【００７３】
（ｂ−６）アプリケーション実行部１ｂは、同月レコード加算処理でスキップしたレコードが存在するため、レコード番号“２”、“４”、“６”、“８”および“１０”に対してレコード書換処理を順次実行する。
【００７４】
（ｂ−７）リソース提供部２ｂは、アプリケーション実行部１ｂによって現在実行されている処理ステップがレコード書換処理であることを処理ステップ監視部３から得る。
【００７５】
（ｂ−８）リソース提供部２ｂは、レコード書換処理がリソース隔離対象ステップに該当することをリソース隔離判定部４から得る。
【００７６】
（ｂ−９）リソース提供部２ｂは、分散共有ストレージＤＳ上の処理対象ファイルＦの複製である隔離ファイルＣＦをローカルストレージＬＳｂ上に生成する。
【００７７】
（ｂ−１０）リソース提供部２ｂは、アプリケーション実行部１ｂに対してローカルストレージＬＳｂ上の隔離ファイルＣＦを提供する。リソース提供部２ｂは、これ以降、アプリケーション実行部１ｂからの処理対象ファイルＦへの参照要求に対してローカルストレージＬＳｂ上の隔離ファイルＣＦを提供するように変更する。
【００７８】
（ｂ−１１）アプリケーション実行部１ｂは、レコード書換処理において、レコード番号“４”の日付を、実行日“２０１１／６／１６”に書き換える。この書き換えは、隔離ファイルＣＦのレコードに対してのみ行われる。したがって、ネットワークコネクションＮＣおよびローカルストレージＬＳａのリソースは利用されない。
【００７９】
（ｂ−１２）アプリケーション実行部１ｂは、レコード番号“２”、“４”、“６”、“８”および“１０”に対して同年レコード加算処理を順次実行する。
【００８０】
（ｂ−１３）リソース提供部２ｂは、アプリケーション実行部１ｂに対してローカルストレージＬＳｂ上の隔離ファイルＣＦを提供する。
【００８１】
（ｂ−１４）アプリケーション実行部１ｂは、同年レコード加算処理の結果として、“５２”を出力する。
【００８２】
上述したように、第１実施形態における分散処理システム１０によれば、処理ステップがリソース隔離ステップである場合には、ローカルストレージＬＳ上に隔離ファイルＣＦを生成することができる。
【００８３】
これにより、リソース隔離ステップが実行されたことを、隔離ファイルの存在を確認することで、容易に認識することができる。それゆえに、エラーや障害が発生した場合に、その解析作業や対応作業を容易化することが可能となる。
【００８４】
また、ファイルＦをコピーした隔離ファイルＣＦを、分散共有ストレージＤＳ上ではなく、ローカルストレージＬＳ上に生成することで、その後、アプリケーションＡからファイルＦの参照要求を受けた場合には、隔離ファイルＣＦを提供することができる。
【００８５】
これにより、リソース隔離ステップ以降の処理を、ネットワークコネクションＮＣを利用せずに、ローカルストレージＬＳに閉じて実行することできるため、システム内のネットワークリソースの使用量を抑制することができる。また、他のホストノードＨとの間でリソースの競合が発生しないため、他のホストノードでのアプリケーションＡの実行を妨げることがない。
【００８６】
なお、第１実施形態では、エラーレコードのリカバリを処理したコンテナが１つであり、全体のホストノードが２つであるため、レプリカレコードの更新回数を１回削減したネットワーク使用量となる。エラーレコード数がｎ、全体のホストノード数がｍとすると、その効果は、レプリカレコード更新をｎ×（ｍ−１）回分削減できることになる。つまり、ホストノードを１００用いた分散実行環境において、１００レコードのエラーが均等に存在した場合には、最大で９９００回分のレプリカ更新処理用の通信を削減することができる。
【００８７】
[第２実施形態]
本発明の第２実施形態について説明する。
【００８８】
図７を参照して、第２実施形態の構成について説明する。第２実施形態は、アプリケーションＡを、親子関係を形成する複数のコンテナＣ上で実行する場合の実施例である。第２実施形態のコンテナＣ_<X>-<Y>は、２つの子供のコンテナＣ_<succ(X)>-<Y×2-1>、Ｃ_<succ(X)>-<Y×2>を形成する。ここでsucc(x)はアルファベットXに対してその後続のアルファベットを意味する。具体的には、succ(“a”)→”b”であり、succ(“b”)→”c”である。したがって、例えば、コンテナＣ_ａ-1は、２つの子供のコンテナＣ_b-1、Ｃ_b-2を形成し、コンテナＣ_b-1は、２つの子供のコンテナＣ_c-1、Ｃ_c-2を形成することになる。
【００８９】
コンテナＣは、アプリケーション実行部１と、リソース提供部２と、処理ステップ監視部３と、リソース隔離判定部４と、を有する。これらの各部は、上述した第１実施形態における各部と同様の機能を有し、さらに第２実施形態に特有の機能も有する。以下においては、主に第２実施形態に特有の機能について説明する。
【００９０】
リソース提供部２は、分散共有ストレージＤＳに加え、外部サービスＥＳにもアクセスする。
【００９１】
処理ステップ監視部３は、自コンテナＣにおけるアプリケーションＡの処理ステップを監視するとともに、子孫関係にあるコンテナにおけるアプリケーションＡの処理ステップを参照する機能を有する。
【００９２】
処理ステップ監視部３は、自コンテナＣにおける処理ステップの実行履歴と、子孫関係にあるコンテナにおける処理ステップの実行履歴とを管理する機能を有する。
【００９３】
リソース提供部２は、処理ステップ監視部３から得た処理ステップの実行履歴に基づいて、リソース隔離判定部４にリソースの隔離が必要であるか否かを問い合わせる。
【００９４】
リソース隔離判定部４は、処理ステップの実行履歴にリソース隔離対象ステップが含まれているか否かを判定する。リソース隔離判定部４は、処理ステップの実行履歴にリソース隔離対象ステップが含まれている場合に、リソースの隔離が必要である旨を応答する。
【００９５】
リソース提供部２は、リソースの隔離が必要である旨の応答を得た場合には、アプリケーション実行部１から受けたリソース<R>の生成要求に対して、隔離ファイル“<R>.err”を生成する。また、リソース提供部２は、アプリケーション実行部１から受けたリソース<R>の参照要求に対して、隔離ファイル“<R>.err”が存在するときには、隔離ファイル“<R>.err”を提供する。一方、リソース提供部２は、隔離ファイル“<R>.err”が存在しないときには、正常のファイル“<R>”を提供する。
【００９６】
次に、図８を参照して、第２実施形態におけるアプリケーションＡの処理ステップについて説明する。
【００９７】
最初に、アプリケーション実行部１は、入力ファイルを読み込む（ステップＳ５０１）。
【００９８】
続いて、アプリケーション実行部１は、入力ファイルのレコードが３件以上であるか否かを判定する（ステップＳ５０２）。この判定がＹＥＳである場合（ステップＳ５０２；ＹＥＳ）に、ファイル分割処理を実行する（ステップＳ５０３）。そして、処理を上記ステップＳ５０１に移行する。
【００９９】
一方、上記ステップＳ５０２の判定で入力ファイルのレコードが２件以下であると判定された場合（ステップＳ５０２；ＮＯ）には、データ取得処理を実行する（ステップＳ５０４）。そして、本動作を終了する。
【０１００】
図９を参照して、ファイル分割処理の手順について説明する。
【０１０１】
最初に、アプリケーション実行部１は、入力ファイルを二分割して分散共有ストレージＤＳに保存する（ステップＳ６０１）。
【０１０２】
続いて、アプリケーション実行部１は、子供関係にある子コンテナの処理が終了したか否かを判定する（ステップＳ６０２）。この判定がＮＯである場合（ステップＳ６０２；ＮＯ）には、子コンテナの処理が終了するまで待機する。
【０１０３】
一方、上記ステップＳ６０２の判定で子コンテナの処理が終了したと判定された場合（ステップＳ６０２；ＹＥＳ）に、アプリケーション実行部１は、二つの子コンテナから出力されたファイルを読み込み、取得したデータのサイズが最大のレコードと、最小のレコードとを格納したファイルを分散共有ストレージＤＳ上に出力する（ステップＳ６０３）。そして、ファイル分割処理を終了する。
【０１０４】
図１０を参照して、データ取得処理の手順について説明する。
【０１０５】
最初に、アプリケーション実行部１は、入力ファイルを読み込む（ステップＳ７０１）。
【０１０６】
続いて、アプリケーション実行部１は、読み込んだ２件のレコードに格納されたＵＲＬに対応する外部サービスＥＳから、それぞれデータを取得する（ステップＳ７０２）。
【０１０７】
続いて、アプリケーション実行部１は、外部サービスＥＳからのデータ取得に成功したか否かを判定する（ステップＳ７０３）。この判定がＹＥＳである場合（ステップＳ７０３；ＹＥＳ）に、アプリケーション実行部１は、二つのレコードを取得したデータのサイズの大きい順に並び換え、その二つのレコードを格納した正常のファイル“<R>”を分散共有ストレージＤＳ上に出力する（ステップＳ７０４）。そして、データ取得処理を終了する。
【０１０８】
一方、上記ステップＳ７０３の判定で外部サービスＥＳからのデータ取得に失敗したと判定された場合（ステップＳ７０３；ＮＯ）に、アプリケーション実行部１は、外部サービスＥＳからのデータ取得に成功したレコードのみを格納した隔離ファイル“<R>.err”を分散共有ストレージＤＳ上に出力する（ステップＳ７０５）。そして、ファイル分割処理を終了する。
【０１０９】
次に、分散共有ストレージＤＳ上のファイルＦを入力ファイルとして、コンテナＣ_a-1でアプリケーションＡを処理する場合の動作について説明する。
【０１１０】
この動作では、分散共有ストレージＤＳ上のファイルＦとして、図１１に示すファイルを用いる。また、図１１に示す各ＵＲＬに対応する外部サービスＥＳからのデータ取得結果を、図１２に示す。図１２の取得結果欄には、取得したデータのサイズが格納されている。取得結果欄に“エラー”が格納されている場合には、データ取得に失敗したことを示す。また、各コンテナＣのリソース隔離判定部４は、リソース隔離対象ステップとして、アプリケーションＡの処理ステップ“ステップＳ７０５”（図１０参照）を設定している。
【０１１１】
最初に、コンテナＣ_a-1のアプリケーション実行部１_a-1がアプリケーションＡの実行を開始し、入力ファイルとしてファイル“Ｆ_IN”を読み込む（ステップＳ５０１）。
【０１１２】
続いて、アプリケーション実行部１_a-1は、二つのファイル“Ｃ_a-1-F”および“Ｃ_a-1-S”を生成するように、リソース提供部２_a-1に依頼する（ステップＳ６０１）。
【０１１３】
続いて、リソース提供部２_a-1は、処理ステップ監視部３_a-1およびリソース隔離判定部４_a-1に問い合わせた結果に基づいて、現在の処理ステップがリソースの隔離が不要な処理ステップであることを検知する。
【０１１４】
したがって、リソース提供部２_a-1は、図１３に示すように、二つのファイル“Ｃ_a-1-F”および“Ｃ_a-1-S”を分散共有ストレージＤＳ上に生成する（ステップＳ６０１）。
【０１１５】
続いて、コンテナＣ_b-1のアプリケーション実行部１_b-1がアプリケーションＡの実行を開始し、入力ファイルとしてファイル“Ｃ_a-1-F”を読み込む（ステップＳ５０１）。これと並行して、コンテナＣ_b-2のアプリケーション実行部１_b-2がアプリケーションＡの実行を開始し、入力ファイルとしてファイル“Ｃ_a-1-S”を読み込む（ステップＳ５０１）。
【０１１６】
コンテナＣ_b-1およびコンテナＣ_b-2では、上述したコンテナＣ_a-1と同様にアプリケーションＡが実行される。その結果、図１４に示すように、四つのファイル“Ｃ_b-1-F”、“Ｃ_b-1-S”、“Ｃ_b-2-F”および“Ｃ_b-2-S”が分散共有ストレージＤＳ上に新たに生成される（ステップＳ６０１）。
【０１１７】
続いて、コンテナＣ_c-1のアプリケーション実行部１_c-1がアプリケーションＡの実行を開始し、入力ファイルとしてファイル“Ｃ_b-1-F”を読み込む（ステップＳ５０１）。これと並行して、コンテナＣ_c-2のアプリケーション実行部１_c-2がアプリケーションＡの実行を開始し、入力ファイルとしてファイル“Ｃ_b-1-S”を読み込む（ステップＳ５０１）。
【０１１８】
同様に、コンテナＣ_c-3では、ファイル“Ｃ_b-2-F”を入力ファイルとして、アプリケーションＡの実行が開始され（ステップＳ５０１）、コンテナＣ_c-4では、ファイル“Ｃ_b-2-S”を入力ファイルとして、アプリケーションＡの実行が開始される（ステップＳ５０１）。
【０１１９】
続いて、コンテナＣ_c-1では、ＵＲＬ“http://example.com/data/WEST/OSAKA”へのアクセスおよびＵＲＬ“http://example.com/data/WEST/FUKUOKA”へのアクセスが実行され、それぞれ、“１００”および“２００”が取得結果として得られる（ステップＳ７０２）。
【０１２０】
続いて、コンテナＣ_c-1では、出力ファイル“Ｃ_b-1-F-out”を生成するように、リソース提供部２_c-1に依頼する（ステップＳ７０４）。
【０１２１】
続いて、リソース提供部２_c-1は、処理ステップ監視部３_c-1およびリソース隔離判定部４_c-1に問い合わせた結果に基づいて、現在の処理ステップがリソースの隔離が不要な処理ステップであることを検知する。
【０１２２】
したがって、リソース提供部２_c-1は、図１５に示すように、出力ファイル“Ｃ_b-1-F-out”を分散共有ストレージＤＳ上に新たに生成する（ステップＳ７０４）。この出力ファイル“Ｃ_b-1-F-out”の内容は、一件目のレコードが(http://example.com/data/WEST/FUKUOKA,２００)となり、二件目のレコードが(http://example.com/data/WEST/OSAKA,１００)となる。
【０１２３】
同様に、コンテナＣ_c-2では、図１５に示すように、出力ファイル“Ｃ_b-1-s-out”が分散共有ストレージＤＳ上に新たに生成される（ステップＳ７０４）。この出力ファイル“Ｃ_b-1-s-out”の内容は、一件目のレコードが(http://example.com/data/WEST/KOBE,１０)となり、二件目のレコードが(http://example.com/data/WEST/KYOTO,５)となる。
【０１２４】
同様に、コンテナＣ_c-4では、図１５に示すように、出力ファイル“Ｃ_b-2-s-out”が分散共有ストレージＤＳ上に新たに生成される（ステップＳ７０４）。この出力ファイル“Ｃ_b-2-s-out”の内容は、一件目のレコードが(http://example.com/data/EAST/SAPPORO,９０)となり、二件目のレコードが(http://example.com/data/EAST/SENDAI,８０)となる。
【０１２５】
一方、コンテナＣ_c-3では、ＵＲＬ“http://example.com/data/EAST/TOKYO”へのアクセスに失敗する（ステップＳ７０３；ＮＯ）ため、処理ステップがステップＳ７０５に移行する。
【０１２６】
続いて、コンテナＣ_c-3では、出力ファイル“Ｃ_b-2-F-out”を生成するように、リソース提供部２_c-3に依頼する（ステップＳ７０５）。
【０１２７】
続いて、リソース提供部２_c-3は、処理ステップ監視部３_c-3およびリソース隔離判定部４_c-3に問い合わせた結果に基づいて、現在の処理ステップがリソースの隔離が必要な処理ステップであることを検知する。
【０１２８】
したがって、リソース提供部２_c-3は、図１５に示すように、隔離ファイル“Ｃ_b-2-F-out.err”を分散共有ストレージＤＳ上に新たに生成する（ステップＳ７０５）。この隔離ファイル“Ｃ_b-2-F-out.err”の内容は、１件のレコード(http://example.com/data/EAST/YOKOHAMA,１５０)のみとなる。
【０１２９】
続いて、コンテナＣ_b-1上では、二つの子コンテナＣ_c-1、Ｃ_c-2から出力されたファイル“Ｃ_b-1-F-out”および“Ｃ_b-1-S-out”を参照するように、リソース提供部２_b-1に依頼する（ステップＳ６０３）。
【０１３０】
続いて、リソース提供部２_b-1は、処理ステップ監視部３_b-1およびリソース隔離判定部４_b-1に問い合わせた結果に基づいて、現在の処理ステップがリソースの隔離が不要な処理ステップであることを検知する。
【０１３１】
したがって、リソース提供部２_b-1は、二つのファイル“Ｃ_b-1-F-out”および“Ｃ_b-1-S-out”を参照して、出力ファイル“Ｃ_a-1-F-out”を生成し、分散共有ストレージＤＳに新たに出力する（ステップＳ６０３）。この出力ファイル“Ｃ_a-1-F-out”の内容は、一件目のレコードが(http://example.com/data/WEST/FUKUOKA,２００)となり、二件目のレコードが(http://example.com/data/WEST/KYOTO,５)となる。
【０１３２】
一方、コンテナＣ_b-2上では、二つの子コンテナＣ_c-3、Ｃ_c-4から出力されたファイル“Ｃ_b-2-F-out”および“Ｃ_b-2-S-out”を参照するように、リソース提供部２_b-2に依頼する（ステップＳ６０３）。
【０１３３】
続いて、リソース提供部２_b-2は、処理ステップ監視部３_b-2に実行履歴の問い合わせを行う。その問い合わせに対して、処理ステップ監視部３_b-2は、処理ステップ監視部３_c-3に記録されているステップＳ７０５の実行履歴を含む結果を応答する。その応答結果を用いて、リソース提供部２_b-2は、リソース隔離判定部４_b-2に問い合わせを行い、現在の処理ステップがリソースの隔離が必要な処理ステップであることを検知する。
【０１３４】
したがって、リソース提供部２_b-2は、二つのファイル“Ｃ_b-2-F-out.err”および“Ｃ_b-2-S-out”を参照して、隔離ファイル“Ｃ_a-1-s-out.err”を生成し、分散共有ストレージＤＳに新たに出力する（ステップＳ６０３）。この隔離ファイル“Ｃ_a-1-s-out.err”の内容は、一件目のレコードが(http://example.com/data/EAST/YOKOHAMA,１５０)となり、二件目のレコードが(http://example.com/data/EAST/SENDAI,８０)となる。
【０１３５】
続いて、コンテナＣ_a-1上では、二つの子コンテナＣ_b-1、Ｃ_b-2から出力されたファイル“Ｃ_a-1-F-out”および“Ｃ_a-1-S-out”を参照するように、リソース提供部２_a-1に依頼する（ステップＳ６０３）。
【０１３６】
上述したリソース提供部２_b-2と同様に、リソース提供部２_a-1は、現在の処理ステップがリソースの隔離が必要な処理ステップであることを検知する。
【０１３７】
したがって、リソース提供部２_a-1は、二つのファイル“Ｃ_a-1-F-out”および“Ｃ_a-1-S-out.err”を参照して、隔離ファイル“Ｆ_IN-out.err”を生成し、分散共有ストレージＤＳに新たに出力する（ステップＳ６０３）。この隔離ファイル“Ｆ_IN-out.err”の内容は、一件目のレコードが(http://example.com/data/WEST/FUKUOKA,２００)となり、二件目のレコードが(http://example.com/data/WEST/KYOTO,５)となる。
【０１３８】
上述したように、第２実施形態における分散処理システムによれば、処理ステップがリソース隔離ステップである場合には、その処理の結果を格納した隔離ファイル“<R>.err”を分散共有ストレージＤＳ上に出力することができる。
【０１３９】
これにより、リソース隔離ステップが実行されたことを、隔離ファイルの存在を確認することで、容易に認識することができる。それゆえに、エラーや障害が発生した場合に、その解析作業や対応作業を容易化することが可能となる。
【０１４０】
また、エラーや障害の影響を受けた隔離ファイルと、エラーや障害の影響を受けない正常なファイルとを分離して保持することができるため、アプリケーション全体を再実行することなくリカバリすることが可能となる。以下に、具体的に説明する。
【０１４１】
上述した第２実施形態では、３つの隔離ファイル“Ｃ_b-2-F-out.err”、“Ｃ_a-1-S-out.err”および“Ｆ_IN-out.err”が生成されている。まず、その中で最も下位階層に位置する隔離ファイル“Ｃ_b-2-F-out.err”の生成要因となった“http://example.com/data/EAST/TOKYO”のデータサイズを取得する。続いて、取得したデータの内容および隔離ファイル“Ｃ_b-2-F-out.err”の内容と、その上位階層に位置する隔離ファイル“C_a-1-S-out.err”の内容とを比較して、正常なファイル“Ｃ_a-1-S-out”の内容を生成する。同様にして、生成したファイル“Ｃ_a-1-S-out”の内容と、その上位階層に位置する“Ｆ_IN-out.err”の内容とを比較して、正常なファイル“Ｆ_IN-out”の内容を生成する。これにより、アプリケーション全体の再実行を行うことなく、“Ｆ_IN-out”の内容をリカバリすることが可能となる。
【０１４２】
なお、第２実施形態では、処理ステップの実行履歴を参照する処理ステップ監視部３_<x>-<y>が親子関係からなるツリー構造で規定される場合について説明したが、依存関係の構造はツリー構造には限定されない。任意の有向非循環グラフで既定される依存関係で構成することで同様の効果を得ることができる。
【０１４３】
また、上述した各実施形態は、単なる例示に過ぎず、各実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施することができる。
【０１４４】
上述した各実施形態の一部または全部は、以下の付記のようにも記載され得るが、本発明を以下のように限定するものではない。
【０１４５】
（付記１）  分散共有ストレージ上の処理対象ファイルを参照しながら一つのアプリケーションを分散して実行する複数のアプリケーション実行部と、前記アプリケーション実行部により実行されている前記アプリケーションの処理ステップを監視する処理ステップ監視部と、前記処理ステップ監視部により監視されている前記処理ステップが、リソースの隔離が必要なリソース隔離ステップであるか否かを判定するリソース隔離判定部と、前記リソース隔離判定部により前記処理ステップが前記リソース隔離ステップであると判定された場合に、隔離ファイルを生成するリソース提供部と、を備えることを特徴とする分散処理システム。
【０１４６】
（付記２）  前記リソース提供部は、前記リソース隔離判定部により前記処理ステップが前記リソース隔離ステップではないと判定された場合に、分散共有ストレージ上の処理対象ファイルを前記アプリケーションに提供し、前記リソース隔離判定部により前記処理ステップが前記リソース隔離ステップであると判定された場合には、当該処理ステップを実行するノード上に前記隔離ファイルを生成し、当該隔離ファイルに前記処理対象ファイルの内容を複製し、前記アプリケーションに提供する、ことを特徴とする付記１記載の分散処理システム。
【０１４７】
（付記３）  前記リソース提供部は、前記リソース隔離判定部により前記処理ステップが前記リソース隔離ステップではないと判定された場合に、当該処理ステップの実行結果を格納した出力ファイルを生成して前記分散共有ストレージ上に出力し、前記リソース隔離判定部により前記処理ステップが前記リソース隔離ステップであると判定された場合には、当該処理ステップの実行結果を格納した前記隔離ファイルを生成して前記分散共有ストレージ上に出力する、ことを特徴とする付記１記載の分散処理システム。
【０１４８】
（付記４）  分散共有ストレージ上の処理対象ファイルを参照しながら一つのアプリケーションを分散して実行する複数のアプリケーション実行ステップと、前記アプリケーション実行ステップにおいて実行されている前記アプリケーションの処理ステップを監視する処理ステップ監視ステップと、前記処理ステップ監視ステップにおいて監視されている前記処理ステップが、リソースの隔離が必要なリソース隔離ステップであるか否かを判定するリソース隔離判定ステップと、前記リソース隔離判定ステップにおいて前記処理ステップが前記リソース隔離ステップであると判定された場合に、隔離ファイルを生成するリソース提供ステップと、を含むことを特徴とする分散処理方法。
【０１４９】
（付記５）  付記４に記載の各ステップをコンピュータに実行させるための分散処理プログラム。
【符号の説明】
【０１５０】
１    アプリケーション実行部
２    リソース提供部
３    処理ステップ監視部
４    リソース隔離判定部
１０  分散処理システム
Ａ    アプリケーション
Ｃ    コンテナ
ＣＦ  隔離ファイル
ＤＳ  分散共有ストレージ
ＥＳ  外部サービス
Ｈ    ホストノード
ＬＳ  ローカルストレージ
ＮＣ  ネットワークコネクション
【図１】
0005907419.tif 000002
【図２】
0005907419.tif 000003
【図３】
0005907419.tif 000004
【図４】
0005907419.tif 000005
【図５】
0005907419.tif 000006
【図６】
0005907419.tif 000007
【図７】
0005907419.tif 000008
【図８】
0005907419.tif 000009
【図９】
0005907419.tif 000010
【図１０】
0005907419.tif 000011
【図１１】
0005907419.tif 000012
【図１２】
0005907419.tif 000013
【図１３】
0005907419.tif 000014
【図１４】
0005907419.tif 000015
【図１５】
0005907419.tif 000016
【図１６】
0005907419.tif 000017
【図１７】
0005907419.tif 000018