"分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、タスクを割り当てる資源管理ノード及びタスクを割り当てられる計算ノードから構成される並列キャッシュシステムであって、前記資源管理ノードは、タスクの入力データを有する計算ノードに対して入力データのハッシュ値の計算を要求し、実行ファイルと共に取得するハッシュ値取得手段と、タスクを実行した計算ノードから取得した入力データのハッシュ値、実行ファイル、入力ファイル取得し、該計算ノードと関連付けて計算結果記憶手段に格納するタスク管理手段と、前記入力データのハッシュ値と前記実行ファイルを検索キーとして、前記計算結果記憶手段を検索し、該キーに該当する計算ノードのデータがある場合には、計算をスキップし、ない場合にはタスクを割り当てる計算ノードを決定するタスク割当手段と、を有し、前記計算ノードは、前記資源管理ノードから要求された前記入力データのハッシュ値を求め、該資源管理ノードに返却するハッシュ値計算手段と、前記資源管理ノードにより割り当てられたタスクを実行し、その結果を実行ファイル、入力データと関連付けて計算結果一時記憶手段に格納すると共に、該資源管理ノードに送信するタスク実行手段とを有することを特徴とする並列キャッシュシステム。前記資源管理ノードは、ジョブが終了すると、前記検索キーに基づいて前記計算結果記憶手段から計算結果を保持している計算ノードを抽出し、該計算ノードと同じ物理計算機上で動作しているデータノードに対して、該計算結果を送信し、格納する手段を更に有する請求項1記載の並列キャッシュシステム。分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、タスクを割り当てる資源管理ノード及びタスクを割り当てられる計算ノードから構成される並列キャッシュ方法であって、前記資源管理ノードのハッシュ値取得手段が、入力データを保持している計算ノードに該入力データのハッシュ値を要求し、実行ファイルと共に取得するハッシュ値取得ステップと、前記資源管理ノードのタスク割当手段が、入力データを保持している計算ノードにタスクを割り当てるタスク割り当てステップと、前記計算ノードのタスク実行手段が、前記資源管理ノードから割り当てられたタスクを実行し、その結果を実行ファイル、入力データと関連付けて計算結果一時記憶手段に格納するタスク実行ステップと、前記資源管理ノードの実行結果管理手段が、前記計算ノードからタスクの実行結果として、実行ファイル、入力データを取得して、該計算ノードと関連付けて計算結果記憶手段に格納する実行結果管理ステップと、を行い、前記タスク割当ステップにおいて、前記計算ノードにタスクを割り当てる際に、前記入力データのハッシュ値と前記実行ファイルをキーとして、前記計算結果記憶手段を検索し、該計算ノードによる該タスクの計算結果が存在している場合には、当該タスクの処理をスキップすることを特徴とする並列キャッシュ方法。前記資源管理ノードにおいて、ジョブが終了すると、前記キーに基づいて前記計算結果記憶手段から計算結果を保持している計算ノードを抽出し、該計算ノードと同じ物理計算機上で動作しているデータノードに対して、該計算結果を送信し格納する請求項3記載の並列キャッシュ方法。分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、タスクを計算ノードに割り当てる資源管理ノードであって、タスクの入力データを有する計算ノードから取得した入力データのハッシュ値、実行ファイル、入力データを取得し、該計算ノードと関連付けて前記計算結果記憶手段に格納するタスク管理手段と、前記計算ノードに対して入力データのハッシュ値の計算を要求し、ハッシュ値と実行ファイルを取得するハッシュ値取得手段と、前記入力データのハッシュ値と前記実行ファイルを検索キーとして、前記計算結果記憶手段を検索し、該キーに該当するデータがある場合には、計算をスキップし、ない場合にはタスクを割り当てる計算ノードを決定するタスク割当手段と、を有することを特徴とする資源管理ノード。コンピュータを、請求項5記載の資源管理ノードの各手段として機能させるための並列キャッシュプログラム。しかしながら、上記特許文献1,2、非特許文献1,2のシステムのよい箇所を組み合わせたシステムを構築した場合でも、以下のような問題がある。1ジョブ内で過去に行われた計算結果を再利用するためには、再利用するデータをユーザが宣言する必要がある。2ジョブが複数回実行される場合、過去に行ったことがあるタスクであっても再度同じ計算、転送を行う必要がある。詳しくは、過去に行ったことがある計算が実行中のジョブに含まれていたとしても、複数ジョブを実行する際には再度同じ計算を行う必要がある。過去に行ったことがある計算が実行中のジョブに含まれていたとしても、計算ノード間における転送が発生してしまう。本発明は、上記の点に鑑みなされたもので、ジョブ内に複数回実行されるタスクが含まれている場合、ジョブを高速に処理すると共に、過去に行ったことがある処理を高速化することが可能な分散並列処理キャッシュ装置及び方法及びプログラムを提供することを目的とする。上記の課題を解決するため、本発明請求項1は、分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、タスクを割り当てる資源管理ノード及びタスクを割り当てられる計算ノードから構成される並列キャッシュシステムであって、前記資源管理ノードは、タスクの入力データを有する計算ノードに対して入力データのハッシュ値の計算を要求し、実行ファイルと共に取得するハッシュ値取得手段と、タスクを実行した計算ノードから取得した入力データのハッシュ値、実行ファイル、入力ファイル取得し、該計算ノードと関連付けて計算結果記憶手段に格納するタスク管理手段と、前記入力データのハッシュ値と前記実行ファイルを検索キーとして、前記計算結果記憶手段を検索し、該キーに該当する計算ノードのデータがある場合には、計算をスキップし、ない場合にはタスクを割り当てる計算ノードを決定するタスク割当手段と、を有し、前記計算ノードは、前記資源管理ノードから要求された前記入力データのハッシュ値を求め、該資源管理ノードに返却するハッシュ値計算手段と、前記資源管理ノードにより割り当てられたタスクを実行し、その結果を実行ファイル、入力データと関連付けて計算結果一時記憶手段に格納すると共に、該資源管理ノードに送信するタスク実行手段と、を有する。また、本発明請求項2は、前記資源管理ノードにおいて、ジョブが終了すると、前記検索キーに基づいて前記計算結果記憶手段から計算結果を保持している計算ノードを抽出し、該計算ノードと同じ物理計算機上で動作しているデータノードに対して、該計算結果を送信し、格納する手段を更に有する。上記のように、本発明によれば、入力データを保持する計算ノードにおいて実行されたタスクの実行結果を資源管理ノードで記録しておくことにより、1ジョブ内に複数回実行されるタスクが含まれている場合、ジョブの高速化を自動的に行うことができる。2ジョブが複数回実行される場合において、過去に行ったことのある処理を高速化できる。詳しくは、過去に行ったことのある計算が実行中のジョブに含まれていた場合、その結果を入力ブロック単位で再利用し計算をスキップすることができる。以下図面と共に、本発明の実施の形態を説明する。図6は、本発明の一実施の形態におけるシステム構成を示す。同図に示すシステムは、資源管理ノード10と計算ノード21、分散ファイルシステムのノードであり、データを保存するデータノード22を有する複数の物理計算機20から構成される。資源管理ノード10は、どの計算ノードにどのタスクを割り当てるかを管理する計算機であり、タスク管理部11、検索部12、ノード管理DB13を有し、外部記憶として計算結果記憶部1ローカルディスクが接続されている。ノード管理DB13は、物理計算機毎に、計算ノード、データノード、及び、タスク用の入力データを関連付けて保持している。また、計算結果記憶部1は、計算ノード毎にハッシュ値及び実行ファイルが格納される。以下では外部記憶装置として説明するが、資源管理ノード内のディスク装置やメモリとして構築されていてもよい。物理計算機20の計算ノード21は、ハッシュ計算部211を有し、計算結果一時記憶部2を有するローカルディスクが接続されている。データノード22はデータ記憶部221を有する。上記の構成のシステムの処理について説明する。図7は、本発明の一実施の形態における全体動作のフローチャートである。ステップ310資源管理ノード10のタスク管理部11は、キャッシュを考慮しながら計算ノード21にタスクを割り当てる。詳細については図8で後述する。ステップ320タスクを割り当てられた計算ノード21は、資源管理ノード10の指示によりタスクを実行する。ステップ330計算ノード21は、ステップ320の結果を実行ファイル、入力データと関連付けて一時ファイルとして計算結果一時記憶部2ローカルディスクに保存すると共に、資源管理ノード10に計算結果を送信し、ジョブが終了すればステップ340に移行し、終了していなければステップ310に戻る。詳細については図9にて後述する。ステップ340ジョブが終了したら、資源管理ノード10のタスク管理部11は、計算結果を再利用できるように計算結果記憶部1に保存し、永続化する。詳細は図10にて後述する。次に、上記のステップ310について説明する。図8は、本発明の一実施の形態における図7のS310の詳細化のフローチャートである。ステップ510資源管理ノード10のタスク管理部11は、特許文献1の技術に基づいて、次に実行すべきタスクを決定する。ステップ520資源管理ノード10のタスク管理部11は、ステップ510で選択したタスクの入力データを保持している計算ノード21をノード管理DB13から検索し、当該計算ノード21に対して入力データのハッシュ値を計算するように要求する。これにより計算ノード21は、入力データのハッシュ値を計算してハッシュ値と実行ファイルを資源管理ノード10に送信する。ステップ530資源管理ノード10のノード検索部12は、ステップ520において、計算ノード21に要求して取得した、入力データのハッシュ値と実行ファイルをキーとして、計算結果記憶部1から過去の計算結果の有無と当該計算結果の保存場所を検索する。計算結果記憶部1に入力データのハッシュ値に該当する計算結果が存在する場合には、すでに計算が実行されているものとしてステップ540に移行し、存在しない場合はまだ計算が実行されていないものとしてステップ550に移行する。ステップ540タスク管理部11は、計算結果を保持する計算ノードで処理が終了したと見做し、計算をスキップし、ステップ510に移行する。ステップ550タスク管理部11は、特許文献1の技術に基づいて、タスクを実行する計算ノードを決定する。次に、図7のタスク終了時の処理ステップ330について説明する。図9は、本発明の一実施の形態における図7のS330の詳細化のフローチャートである。ステップ710計算ノード21は、実行完了したタスクの計算結果入力データのハッシュ値、実行ファイル、実行結果を自ノードに接続された計算結果一時記憶部2に保存すると共に、資源管理ノード10に送信する。ステップ720資源管理ノード10のタスク管理部11は、計算ノードからキー入力データのハッシュ値と実行ファイルと実行結果を取得し、計算ノードと関連付けて計算結果記憶部1に格納する。次に、図7のジョブ終了時の処理ステップ340について説明する。図10は、本発明の一実施の形態における図7のS340のフローチャートである。ステップ910ジョブが終了すると、資源管理ノード10のノード検索部12は、検索キー入力データのハッシュ値と実行ファイルに基づいて計算結果記憶部1を検索し、当該キーに対応する計算結果を保持している計算ノードを検索する。ステップ920ノード検索部12は、ステップ910で検索された計算ノードと同じ物理計算機上で動作しているデータノードをノード管理DB13から検索する。タスク管理部11は、当該データノード22に計算結果を送信する。これにより物理計算機20のデータノード22は当該計算結果をデータ記憶部221に格納する。図11は、本発明の一実施の形態における全体動作のシーケンスチャートである。同図におけるステップ番号は前述のフローチャートのステップ番号に対応する。上記のような処理を行うことにより、入力データが時系列に従って増えていくような処理を含む計算を高速に行うことができる。これにより、1検索エンジンの更新が高速に行えるようになる。2ユーザへのレコメンデーションが高速に更新できるようになる。3ログ解析を高速に行うことができる。なお、上記の資源管理ノード及び計算ノードの動作をプログラムとして構築し、資源管理ノード、計算ノードとして利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。本発明は、上記の実施の形態に限定されることなく特許請求の範囲内において種々変更応用が可能である。"