(57)【特許請求の範囲】
【請求項１】
複数のノードを並列に用いて第１のデータ処理を行い、前記第１のデータ処理の結果に対して第２のデータ処理を行うシステムで実行されるデータ処理方法であって、
過去に実行された前記第１のデータ処理の結果を記憶する記憶装置を参照して、データを、前記記憶装置に記憶された結果を利用可能な第１のセグメントと、前記記憶装置に記憶された結果を利用可能でない複数の第２のセグメントとに分割し、
前記複数の第２のセグメントを前記複数のノードに割り当て、前記複数のノードを並列に用いて前記複数の第２のセグメントに対して前記第１のデータ処理を行い、
前記記憶装置に記憶された前記第１のセグメントに対応する過去の結果と、前記複数のノードを用いて得られた前記複数の第２のセグメントに対応する結果とに対して、前記第２のデータ処理を行い、
前記分割では、前記データのうち、過去に前記第１のデータ処理を実行していない第１の部分と、過去に前記第１のデータ処理を実行しているが利用可能な結果が前記記憶装置に記憶されていない第２の部分とが、異なる第２のセグメントに属するように前記データを分割し、
前記第１の部分に対する前記第１のデータ処理の結果と前記第２の部分に対する前記第１のデータ処理の結果とを分けて、前記記憶装置に格納する、
ことを特徴とするデータ処理方法。
【請求項２】
複数のノードを並列に用いて第１のデータ処理を行い、前記第１のデータ処理の結果に対して第２のデータ処理を行うシステムで実行されるデータ処理方法であって、
過去に実行された前記第１のデータ処理の結果を記憶する記憶装置を参照して、データを、前記記憶装置に記憶された結果を利用可能な第１のセグメントと、前記記憶装置に記憶された結果を利用可能でない複数の第２のセグメントとに分割し、
前記複数の第２のセグメントを前記複数のノードに割り当て、前記複数のノードを並列に用いて前記複数の第２のセグメントに対して前記第１のデータ処理を行い、
前記記憶装置に記憶された前記第１のセグメントに対応する過去の結果と、前記複数のノードを用いて得られた前記複数の第２のセグメントに対応する結果とに対して、前記第２のデータ処理を行い、
前記分割では、前記記憶装置に記憶された、前記データの少なくとも一部と他のデータとを含む集合に対して過去に実行された前記第１のデータ処理の結果は、前記データを処理するために利用可能でないと判定する、
ことを特徴とするデータ処理方法。
【請求項３】
前記第２のデータ処理は、前記第１のセグメントに対する前記第１のデータ処理の結果と前記複数の第２のセグメントに対する前記第１のデータ処理の結果とを集計する処理を含む、請求項１記載のデータ処理方法。
【請求項４】
複数のノードを並列に用いて第１のデータ処理を行い、前記第１のデータ処理の結果に対して第２のデータ処理を行う分散処理システムであって、
過去に実行された前記第１のデータ処理の結果を記憶する記憶装置と、
前記記憶装置を参照して、データを、前記記憶装置に記憶された結果を利用可能な第１のセグメントと、前記記憶装置に記憶された結果を利用可能でない複数の第２のセグメントとに分割する分割手段と、
前記複数の第２のセグメントを前記複数のノードに割り当て、前記複数のノードを並列に用いて前記複数の第２のセグメントに対して前記第１のデータ処理を実行させ、前記記憶装置に記憶された前記第１のセグメントに対応する過去の結果と、前記複数のノードを用いて得られた前記複数の第２のセグメントに対応する結果とに対して、前記第２のデータ処理を実行するよう制御する制御手段と、を有し、
前記分割手段は、前記データのうち、過去に前記第１のデータ処理を実行していない第１の部分と、過去に前記第１のデータ処理を実行しているが利用可能な結果が前記記憶装置に記憶されていない第２の部分とが、異なる第２のセグメントに属するように前記データを分割し、
前記制御手段は、前記第１の部分に対する前記第１のデータ処理の結果と前記第２の部分に対する前記第１のデータ処理の結果とを分けて、前記記憶装置に格納する、
ことを特徴とする分散処理システム。
【請求項５】
複数のノードを並列に用いて第１のデータ処理を行い、前記第１のデータ処理の結果に対して第２のデータ処理を行う分散処理システムであって、
過去に実行された前記第１のデータ処理の結果を記憶する記憶装置と、
前記記憶装置を参照して、データを、前記記憶装置に記憶された結果を利用可能な第１のセグメントと、前記記憶装置に記憶された結果を利用可能でない複数の第２のセグメントとに分割する分割手段と、
前記複数の第２のセグメントを前記複数のノードに割り当て、前記複数のノードを並列に用いて前記複数の第２のセグメントに対して前記第１のデータ処理を実行させ、前記記憶装置に記憶された前記第１のセグメントに対応する過去の結果と、前記複数のノードを用いて得られた前記複数の第２のセグメントに対応する結果とに対して、前記第２のデータ処理を実行するよう制御する制御手段と、を有し、
前記分割手段は、前記記憶装置に記憶された、前記データの少なくとも一部と他のデータとを含む集合に対して過去に実行された前記第１のデータ処理の結果は、前記データを処理するために利用可能でないと判定する、
ことを特徴とする分散処理システム。
【請求項６】
複数のノードを並列に用いて第１のデータ処理を行い、前記第１のデータ処理の結果に対して第２のデータ処理を行うシステムの制御に用いられるプログラムであって、
コンピュータに、
過去に実行された前記第１のデータ処理の結果を記憶する記憶装置を参照して、データを、前記記憶装置に記憶された結果を利用可能な第１のセグメントと、前記記憶装置に記憶された結果を利用可能でない複数の第２のセグメントとに分割し、
前記複数の第２のセグメントを前記複数のノードに割り当て、前記複数のノードを並列に用いて前記複数の第２のセグメントに対して前記第１のデータ処理を実行させ、
前記記憶装置に記憶された前記第１のセグメントに対応する過去の結果と、前記複数のノードを用いて得られた前記複数の第２のセグメントに対応する結果とに対して、前記第２のデータ処理を実行するよう制御し、
前記分割では、前記データのうち、過去に前記第１のデータ処理を実行していない第１の部分と、過去に前記第１のデータ処理を実行しているが利用可能な結果が前記記憶装置に記憶されていない第２の部分とが、異なる第２のセグメントに属するように前記データを分割し、
前記第１の部分に対する前記第１のデータ処理の結果と前記第２の部分に対する前記第１のデータ処理の結果とを分けて、前記記憶装置に格納する、
処理を実行させることを特徴とするプログラム。
【請求項７】
複数のノードを並列に用いて第１のデータ処理を行い、前記第１のデータ処理の結果に対して第２のデータ処理を行うシステムの制御に用いられるプログラムであって、
コンピュータに、
過去に実行された前記第１のデータ処理の結果を記憶する記憶装置を参照して、データを、前記記憶装置に記憶された結果を利用可能な第１のセグメントと、前記記憶装置に記憶された結果を利用可能でない複数の第２のセグメントとに分割し、
前記複数の第２のセグメントを前記複数のノードに割り当て、前記複数のノードを並列に用いて前記複数の第２のセグメントに対して前記第１のデータ処理を実行させ、
前記記憶装置に記憶された前記第１のセグメントに対応する過去の結果と、前記複数のノードを用いて得られた前記複数の第２のセグメントに対応する結果とに対して、前記第２のデータ処理を実行するよう制御し、
前記分割では、前記記憶装置に記憶された、前記データの少なくとも一部と他のデータとを含む集合に対して過去に実行された前記第１のデータ処理の結果は、前記データを処理するために利用可能でないと判定する、
処理を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理方法、分散処理システムおよびプログラムに関する。
【背景技術】
【０００２】
ネットワークに接続された複数のノード（例えば、コンピュータなどの情報処理装置）を備えた分散処理システムを用いてデータ処理を行うことがある。データを分割して複数のノードに割り当て、複数のノードを並列に用いることで、データ処理を高速化し得る。このようなデータ処理の並列化は、例えば、サーバ装置に対するアクセスを示すアクセスログの解析など、大量のデータを処理する際に行われる。【０００３】
並列データ処理を行うプログラムの作成を支援するために、ＭａｐＲｅｄｕｃｅなどのフレームワークが提案されている。ＭａｐＲｅｄｕｃｅで定義されるデータ処理方法は、ＭａｐフェーズとＲｅｄｕｃｅフェーズを含む。Ｍａｐフェーズでは、入力されたデータを分割し、複数のノードを用いてデータを処理する。Ｒｅｄｕｃｅフェーズでは、Ｍａｐフェーズの結果を、キーなどに応じて１またはそれ以上のノードを用いて集約する。Ｒｅｄｕｃｅフェーズの結果を次のＭａｐフェーズに渡すこともできる。データの分割や集約は、フレームワークに自動的に実行させることもできる。【０００４】
なお、処理前後のデータ量の変化を確認し、データ量が減少する場合には分散度を高く設定しデータ量が増加する場合には分散度を低く設定することで、ノード間の通信がボトルネックにならないように制御する分散処理システムが提案されている。また、電気回路の電磁解析シミュレーションにおいて、本体部分の解析結果を保存しておき、追加部分のパッチが与えられると、保存した本体部分の解析結果から開始して追加部分のみ電磁解析を行うことで、シミュレーションを高速化する方法が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２４４４７０号公報
【特許文献２】特開２００３−２９６３９５号公報
【非特許文献】
【０００６】
【非特許文献１】Jeffrey Dean and Sanjay Ghemawat, “MapReduce: Simplified Data Processing on Large Clusters”, Proc. of the 6th Symposium on Operating Systems Design and Implementation, pp.137-150, Dec. 2004
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のように、分散処理システムには、データを分割し複数のノードを用いて第１段階のデータ処理を行い、第１段階のデータ処理の結果に対して第２段階のデータ処理を行うものがある。しかし、与えられたデータが自動的に分割され並列処理化される場合、従来の分散処理システムでは、毎回、与えられたデータ全体を対象として第１段階のデータ処理から実行されていた。このため、過去のデータ処理の結果が活用されていなかった。【０００８】
一側面では、本発明は、データ処理を効率化できるデータ処理方法、分散処理システムおよびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
一実施態様では、複数のノードを並列に用いて第１のデータ処理を行い、第１のデータ処理の結果に対して第２のデータ処理を行うシステムが実行するデータ処理方法が提供される。このデータ処理方法では、過去に実行された第１のデータ処理の結果を記憶する記憶装置を参照して、データを、記憶装置に記憶された結果を利用可能な第１のセグメントと、記憶装置に記憶された結果を利用可能でない複数の第２のセグメントとに分割する。複数の第２のセグメントを複数のノードに割り当て、複数のノードを並列に用いて複数の第２のセグメントに対して第１のデータ処理を行う。記憶装置に記憶された第１のセグメントに対応する過去の結果と、複数のノードを用いて得られた複数の第２のセグメントに対応する結果とに対して、第２のデータ処理を行う。分割では、データのうち、過去に第１のデータ処理を実行していない第１の部分と、過去に第１のデータ処理を実行しているが利用可能な結果が記憶装置に記憶されていない第２の部分とが、異なる第２のセグメントに属するようにデータを分割し、第１の部分に対する第１のデータ処理の結果と第２の部分に対する第１のデータ処理の結果とを分けて、記憶装置に格納する。
【００１０】
また、一実施態様では、複数のノードを並列に用いて第１のデータ処理を行い、第１のデータ処理の結果に対して第２のデータ処理を行う分散処理システムが提供される。この分散処理システムは、記憶装置と分割手段と制御手段とを有する。記憶装置は、過去に実行された第１のデータ処理の結果を記憶する。分割手段は、記憶装置を参照して、データを、記憶装置に記憶された結果を利用可能な第１のセグメントと、記憶装置に記憶された結果を利用可能でない複数の第２のセグメントとに分割する。制御手段は、複数の第２のセグメントを複数のノードに割り当て、複数のノードを並列に用いて複数の第２のセグメントに対して第１のデータ処理を実行させ、記憶装置に記憶された第１のセグメントに対応する過去の結果と、複数のノードを用いて得られた複数の第２のセグメントに対応する結果とに対して、第２のデータ処理を実行するよう制御する。分割手段は、データのうち、過去に第１のデータ処理を実行していない第１の部分と、過去に第１のデータ処理を実行しているが利用可能な結果が記憶装置に記憶されていない第２の部分とが、異なる第２のセグメントに属するようにデータを分割する。制御手段は、第１の部分に対する第１のデータ処理の結果と第２の部分に対する第１のデータ処理の結果とを分けて、記憶装置に格納する。
【００１１】
また、一実施態様では、コンピュータが実行するプログラムであって、複数のノードを並列に用いて第１のデータ処理を行い、第１のデータ処理の結果に対して第２のデータ処理を行うシステムの制御に用いられるプログラムが提供される。
【発明の効果】
【００１２】
一実施態様によれば、データ処理を効率化できる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の分散処理システムを示す図である。
【図２】第２の実施の形態の分散処理システムを示す図である。
【図３】実行制御サーバのハードウェア例を示す図である。
【図４】分散処理システムのソフトウェア例を示す図である。
【図５】分散処理の例を示す図である。
【図６】評価値テーブルの例を示す図である。
【図７】中間情報テーブルの例を示す図である。
【図８】第１のＭａｐ処理の入出力データ例を示す図である。
【図９】第１のＭａｐクラスの例を示す図である。
【図１０】第１のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理の入出力データ例を示す図である。
【図１１】第１のＲｅｄｕｃｅ処理の入出力データ例を示す図である。
【図１２】第１のＲｅｄｕｃｅクラスの例を示す図である。
【図１３】第２のＭａｐ処理の入出力データ例を示す図である。
【図１４】第２のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理の入出力データ例を示す図である。
【図１５】第２のＲｅｄｕｃｅ処理の入出力データ例を示す図である。
【図１６】リコメンド情報の例を示す図である。
【図１７】分散処理制御の例を示すフローチャートである。
【図１８】処理済データ特定処理の例を示すフローチャートである。
【図１９】流用可能データ特定処理の例を示すフローチャートである。
【図２０】処理変換処理の例を示すフローチャートである。
【図２１】分散処理制御の例を示すシーケンス図である。
【図２２】分散処理制御の例を示すシーケンス図である。
【図２３】１回目の処理の例を示す図である。
【図２４】２回目の処理の入力情報の例を示す図である。
【図２５】２回目の処理の例を示す図である。
【図２６】３回目の処理の入力情報の例を示す図である。
【図２７】３回目の処理の例を示す図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の分散処理システムを示す図である。第１の実施の形態の分散処理システムは、複数のノードを並列に用いて第１のデータ処理を行い、第１のデータ処理の結果に対して第２のデータ処理を行う。例えば、ＭａｐＲｅｄｕｃｅでは、第１のデータ処理としてＭａｐフェーズを、第２のデータ処理としてＲｅｄｕｃｅフェーズを行う。第１の実施の形態の分散処理システムは、記憶装置１、情報処理装置２，３およびノード４，４ａを含む。記憶装置１、情報処理装置２，３およびノード４，４ａは、ネットワークで接続されている。ノード４，４ａは、入力されたデータを並列に処理するためのノードである。情報処理装置２，３およびノード４，４ａは、ＣＰＵ（Central Processing Unit）などのプロセッサとＲＡＭ（Random Access Memory）などのメモリとを備えてもよく、メモリに記憶されたプログラムをプロセッサが実行するコンピュータであってもよい。
【００１５】
記憶装置１は、ネットワークを介してアクセス可能なデータストレージである。例えば、記憶装置１はＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などのデバイスにデータを格納する。記憶装置１は、過去に実行された第１のデータ処理の結果を記憶する。
【００１６】
情報処理装置２は、分割手段２ａを有する。分割手段２ａは、記憶装置１を参照して、データＤ１を、記憶装置１に記憶された結果を利用可能な第１のセグメントＳＧ１と、記憶装置１に記憶された結果を利用可能でない第２のセグメントＳＧ２，ＳＧ３とに分割する。
【００１７】
情報処理装置３は、制御手段３ａを有する。制御手段３ａは、第２のセグメントＳＧ２，ＳＧ３をノード４，４ａに割り当て、ノード４，４ａを並列に用いて第２のセグメントＳＧ２，ＳＧ３に対して第１のデータ処理を実行させる。制御手段３ａは、記憶装置１に記憶された第１のセグメントＳＧ１に対応する過去の結果ＳＧ１ａと、ノード４，４ａを用いて得られた第２のセグメントＳＧ２，ＳＧ３に対応する結果ＳＧ２ａ，ＳＧ３ａとに対して、第２のデータ処理を実行するよう制御する。第２のデータ処理の対象となるのは、データＤ１を並列処理した結果であるデータＤ２である。データＤ２には、セグメントＳＧ１，ＳＧ２，ＳＧ３を処理した結果ＳＧ１ａ，ＳＧ２ａ，ＳＧ３ａが含まれる。制御手段３ａは、例えばノード４，４ａを並列に用いてデータＤ２に対する第２のデータ処理を行う。
【００１８】
第１の実施の形態の分散処理システムによれば、分割手段２ａにより、記憶装置１が参照され、データＤ１が、記憶装置に記憶された結果を利用可能な第１のセグメントＳＧ１と、記憶装置１に記憶された結果を利用可能でない第２のセグメントＳＧ２，ＳＧ３とに分割される。制御手段３ａにより、第２のセグメントＳＧ２，ＳＧ３がノード４，４ａに割り当てられ、ノード４，４ａが並行に用いられて、第２のセグメントＳＧ２，ＳＧ３に対して第１のデータ処理が実行される。制御手段３ａにより、記憶装置１に記憶された第１のセグメントＳＧ１に対応する過去の結果ＳＧ１ａと、ノード４，４ａを用いて得られた第２のセグメントＳＧ２，ＳＧ３に対応する結果ＳＧ２ａ，ＳＧ３ａとに対して、第２のデータ処理が実行されるよう制御される。
【００１９】
これにより、データ処理を効率化できる。具体的には、過去の処理結果を流用可能なセグメントＳＧ１以外のセグメントＳＧ２，ＳＧ３をノード４，４ａに分散処理させるので、データＤ１の全てを処理せずに済む。既に実行された処理を重複して実行しないよう制御することで、処理効率を向上し、処理の高速化を図れる。また、ノード４，４ａの負荷を軽減できる。
【００２０】
［第２の実施の形態］
図２は、第２の実施の形態の分散処理システムを示す図である。第２の実施の形態の分散処理システムは、入力されたデータを分割して複数のノードに分散処理させる。第２の実施の形態の分散処理システムでは、電子商取引において、ユーザによる商品の評価値を受け付け、その評価値に基づいて当該ユーザへ勧める商品を抽出する。具体的には、当該ユーザと他のユーザとの間の商品ごとの評価値の相関から、当該ユーザが高評価を付けると予測される商品を抽出してお勧め商品とする。第２の実施の形態の分散処理システムは、多数のユーザおよび商品に係る大量の評価値データを分散処理することで、お勧め商品の抽出処理を高速に実行する。なお、以下では、第２の実施の形態の分散処理システムが出力する、各商品の各ユーザによる予測評価値の情報を、リコメンド情報と称することがある。
【００２１】
ここで、第２の実施の形態の分散処理システムでは、分散処理にＭａｐＲｅｄｕｃｅを用いるものとする。ＭａｐＲｅｄｕｃｅを利用するためのフレームワークとして、例えば、Ｈａｄｏｏｐが知られている。ただし、他の手法により分散処理を行うシステムでもよい。他の分散処理の手法としては、例えば、ＭＰＩ（Message Passing Interface）やＯｐｅｎＭＰ（登録商標）などが考えられる。また、例えば、並列化コンパイラによって生成した実行ファイルを用いて分散処理するシステムでもよい。
【００２２】
第２の実施の形態の分散処理システムは、ＥＣ（Electronic Commerce）サーバ２０、クライアント３０、実行制御サーバ１００、処理解析サーバ２００、処理変換サーバ３００、データ分析サーバ４００、登録サーバ５００、入力情報管理サーバ６００、中間情報管理サーバ７００、結果情報管理サーバ８００およびデータ処理サーバ９００，９００ａ，・・・を含む。各サーバは、ネットワーク１０に接続されている。ネットワーク１０は、例えばＬＡＮ（Local Area Network）である。また、ネットワーク１０は、インターネット（図示を省略）に接続されている。
【００２３】
ＥＣサーバ２０は、電子商取引による商品販売を制御するサーバコンピュータである。ＥＣサーバ２０は、ユーザの商品に対する評価値を受け付ける。ユーザは、例えばインターネットを介して通信可能な端末装置（図示を省略）を操作して、ＥＣサーバ２０に商品ごとの評価値を送信できる。ＥＣサーバ２０は、入力された評価値をユーザを示す情報（例えば、ユーザ名）に対応付けて、入力情報管理サーバ６００に格納する。
【００２４】
クライアント３０は、分散処理システムを管理する管理者が操作するクライアントコンピュータである。管理者は、クライアント３０を操作して、リコメンド情報を生成するためのソースプログラムを実行制御サーバ１００に送信する。ソースプログラムは、例えば、Ｊａｖａ（登録商標）で記述される。また、管理者は、クライアント３０を操作して、処理対象とする入力情報を実行制御サーバ１００に指示する。
【００２５】
実行制御サーバ１００は、分散処理システム全体を制御するサーバコンピュータである。実行制御サーバ１００は、クライアント３０から受信したソースプログラムや、指示された入力情報に基づいて、他のサーバと連携し、分散処理の実行を制御する。具体的には、実行制御サーバ１００は、ソースプログラムを処理解析サーバ２００に送信して、並列処理が可能な箇所の解析を依頼する。実行制御サーバ１００は、並列処理対象の入力情報につき、処理変換サーバ３００に処理変換を依頼する。処理変換では、既存の処理結果を流用した処理を組み立てて分散処理を効率的に行えるようにする。
【００２６】
実行制御サーバ１００は、処理変換サーバ３００による変換結果に基づいて、データ処理サーバ９００，９００ａ，・・・による分散処理を制御する。具体的には、実行制御サーバ１００は、データ処理サーバ９００，９００ａ，・・・のうち、アイドル状態のサーバにＭａｐ処理またはＲｅｄｕｃｅ処理をアサインする。実行制御サーバ１００のような制御を行うノードを、マスター（master）と呼ぶことがある。
【００２７】
処理解析サーバ２００は、ソースプログラムの処理ロジックを解析するサーバコンピュータである。処理解析サーバ２００は、実行制御サーバ１００から受信した処理解析の依頼に応じて、ソースプログラムを解析し、並列処理が可能な箇所を特定する。処理解析サーバ２００は、解析結果を実行制御サーバ１００に応答する。
【００２８】
処理変換サーバ３００は、実行制御サーバ１００から受信した処理変換依頼に応じて、並列処理の処理変換を行うサーバコンピュータである。具体的には、処理変換サーバ３００は、入力情報のうち、過去の計算結果を流用可能な部分（セグメント）については、当該過去の計算結果を流用するように処理を変換する。処理変換サーバ３００は、入力情報について当該流用可能な部分を特定するための分析をデータ分析サーバ４００に依頼する。処理変換サーバ３００は、処理変換の結果を実行制御サーバ１００に応答する。
【００２９】
データ分析サーバ４００は、処理変換サーバ３００から受信した分析依頼に応じて、入力情報の分析を行うサーバコンピュータである。具体的には、データ分析サーバ４００は、中間情報管理サーバ７００を参照して、入力情報に含まれる部分に対する過去の計算結果を検索する。データ分析サーバ４００は、入力情報を次のように分類する。すなわち、入力情報を、（１）新規に計算する部分と（２）既に処理されたことのある部分とに分類する。更に、（２）既に処理されたことのある部分を、（２−１）流用可能な処理結果がない部分と（２−２）流用可能な処理結果がある部分とに分類する。データ分析サーバ４００は、当該分析結果を処理変換サーバ３００に応答する。
【００３０】
登録サーバ５００は、データの登録処理を行うサーバコンピュータである。登録サーバ５００は、データ処理サーバ９００，９００ａ，・・・による分散処理に関するデータを取得して、中間情報管理サーバ７００および結果情報管理サーバ８００に当該データを格納する。
【００３１】
入力情報管理サーバ６００は、入力情報を管理するサーバコンピュータである。入力情報は、入力された日付、ユーザを示す情報および当該ユーザによる商品ごとの評価値を含む。
【００３２】
中間情報管理サーバ７００は、中間情報を管理するサーバコンピュータである。中間情報は、分散処理の過程で生成された情報である。中間情報は、Ｍａｐ処理の結果を含む。
結果情報管理サーバ８００は、結果情報を管理するサーバコンピュータである。結果情報は、分散処理の結果として生成された情報である。結果情報は、Ｒｅｄｕｃｅ処理の結果や最終的に生成されたリコメンド情報を含む。
【００３３】
データ処理サーバ９００，９００ａ，・・・は、データを並列処理するサーバコンピュータである。データ処理サーバ９００，９００ａ，・・・は、実行制御サーバ１００からアサインされたＭａｐ処理またはＲｅｄｕｃｅ処理を実行する。このようにデータの並列処理を担当するノードを、ワーカー（worker）あるいはスレーブ（slave）と呼ぶことがある。
【００３４】
図３は、実行制御サーバのハードウェア例を示す図である。実行制御サーバ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、ディスクドライブ１０６および通信部１０７を有する。各ユニットが実行制御サーバ１００のバスに接続されている。他のサーバやクライアント３０も、実行制御サーバ１００と同様のハードウェアを用いて実装できる。
【００３５】
ＣＰＵ１０１は、実行制御サーバ１００の情報処理を制御するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部を読み出し、ＲＡＭ１０２に展開してプログラムを実行する。なお、実行制御サーバ１００は、複数のプロセッサを設けて、プログラムを分散して実行してもよい。
【００３６】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムや処理に用いるデータを一時的に記憶する揮発性メモリである。なお、実行制御サーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えていてもよい。
【００３７】
ＨＤＤ１０３は、ＯＳ（Operating System）プログラムやアプリケーションプログラムなどのプログラムおよびデータを記憶する不揮発性の記憶装置である。ＨＤＤ１０３は、ＣＰＵ１０１の命令に従って、内蔵の磁気ディスクに対してデータの読み書きを行う。なお、実行制御サーバ１００は、ＨＤＤ以外の種類の不揮発性の記憶装置（例えば、ＳＳＤなど）を備えてもよく、複数の記憶装置を備えていてもよい。
【００３８】
画像信号処理部１０４は、ＣＰＵ１０１の命令に従って、実行制御サーバ１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、例えば、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイを用いることができる。
【００３９】
入力信号処理部１０５は、実行制御サーバ１００に接続された入力デバイス１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００４０】
ディスクドライブ１０６は、記録媒体１３に記録されたプログラムやデータを読み取る駆動装置である。記録媒体１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。ディスクドライブ１０６は、例えば、ＣＰＵ１０１の命令に従って、記録媒体１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４１】
通信部１０７は、ネットワーク１０を介して他のサーバと通信を行う通信インタフェースである。通信部１０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【００４２】
図４は、分散処理システムのソフトウェア例を示す図である。図４に示すユニットの一部または全部は、各サーバが実行するプログラムのモジュールであってもよい。また、図４に示すユニットの一部または全部は、ＦＰＧＡ（Field Programmable Gate Array）やＡＳＩＣ（Application Specific Integrated Circuit）などの電子回路であってもよい。データ処理サーバ９００ａ，・・・もデータ処理サーバ９００と同様のユニットを用いて実装できる。
【００４３】
ＥＣサーバ２０は、ＥＣ  ＡＰＰ（Application）２１を有する。ＥＣ  ＡＰＰ２１は、電子商取引の機能を実現するアプリケーションである。ＥＣサーバ２０はＷｅｂサーバとして機能する。ＥＣ  ＡＰＰ２１は、当該Ｗｅｂサーバ上のＷｅｂアプリケーションとして、ユーザが操作する端末装置から利用可能である。
【００４４】
クライアント３０は、ブラウザ３１を有する。ブラウザ３１は、実行制御サーバ１００にＷｅｂアクセスするためのＷｅｂブラウザである（実行制御サーバ１００は、Ｗｅｂサーバとしても機能する）。管理者は、ブラウザ３１を操作して、実行制御サーバ１００に処理依頼を行える。処理依頼と共に、処理内容を記述したソースプログラムを実行制御サーバ１００に送信したり、処理対象とする入力情報（あるいは入力情報の範囲）を指定したりすることができる。なお、クライアント３０から実行制御サーバ１００への処理依頼は、例えば、ＣＬＩ（Command Line Interface）を用いて行ってもよい。
【００４５】
実行制御サーバ１００は、実行制御部１１０を有する。実行制御部１１０は、分散処理の実行を制御する。実行制御部１１０は、クライアント３０から受信した処理依頼に応じて、リコメンド情報の生成を開始する。実行制御部１１０は、ソースプログラムを処理解析サーバ２００に送信して並列化可能な箇所の解析を依頼する。実行制御部１１０は、ソースプログラムのうち、並列化可能な箇所を指定して、処理変換サーバ３００に処理変換を依頼する。実行制御部１１０は、変換結果に基づいて、Ｍａｐ処理やＲｅｄｕｃｅ処理をデータ処理サーバ９００，９００ａ，・・・にアサインする。そして、実行制御部１１０は、分散処理により生成されたリコメンド情報をクライアント３０に応答する。
【００４６】
処理解析サーバ２００は、処理解析部２１０を有する。処理解析部２１０は、実行制御部１１０から取得したソースプログラムを解析して、データの並列処理が可能な箇所を特定する。データの並列処理が可能な箇所は、例えばデータ並列性の有無により特定できる。データ並列性とは、（１）入力されたデータを分割して別々に処理した場合も分割しないで処理した場合と結果が同一になる、（２）一回の処理が他の処理（前後の処理）に依存しない、という特性である。データ並列性に関しては、例えば次の文献に記載されている。
【００４７】
〔データ並列性に関する文献〕
David Culler and Jaswinder Pal Singh, “Parallel Computer Architecture: A Hardware/Software Approach (The Morgan Kaufmann Series in Computer Architecture and Design)”, Aug. 1998
処理解析部２１０は、例えば、ソースプログラム中に宣言的に記述された所定箇所を検出することで、データの並列処理が可能な箇所を特定できる。具体的には、ＭａｐＲｅｄｕｃｅのフレームワークで型決めしたインタフェースを検出することが考えられる。この場合、処理解析部２１０は、ソースプログラム中から、所定のインタフェース（“Ｍａｐｐｅｒ”や“Ｒｅｄｕｃｅｒ”など）を実装したクラスをデータ並列処理が可能な箇所として特定する。あるいは、例えば、所定のクラス（“Ｍａｐｐｅｒ”や“Ｒｅｄｕｃｅｒ”など）を継承したクラスをデータ並列処理が可能な箇所として特定する。
【００４８】
なお、並列化可能箇所が明示的に示されていない場合や、並列化可能箇所が明示的に指定されていない処理の場合、処理解析部２１０は並列化コンパイラを用いて並列化可能箇所を特定してもよい。並列化コンパイラによる並列化可能箇所の特定は、例えば次の文献に記載されている。
【００４９】
〔並列化コンパイラに関する文献〕
Utpal Banerjee, Rudolf Eigenmann, Alexandru Nicolau and David A. Padua, “Automatic Program Parallelization”, Proc. of the IEEE (Institute of Electrical and Electronics Engineers), Vol. 81 No. 2, Feb. 1993
処理変換サーバ３００は、処理変換部３１０を有する。処理変換部３１０は、処理解析部２１０により特定された並列処理可能な箇所を、過去の処理結果を流用する処理に変換する。処理変換部３１０は、入力情報のうち、過去の処理結果を流用可能な部分をデータ分析サーバ４００に特定させる。
【００５０】
データ分析サーバ４００は、データ分析部４１０を有する。データ分析部４１０は、入力情報のうち、過去の処理結果を流用可能な部分を特定して、処理変換部３１０に通知する。
【００５１】
登録サーバ５００は、処理結果登録部５１０を有する。処理結果登録部５１０は、データ処理サーバ９００，９００ａ，・・・によるＭａｐ処理の結果やＲｅｄｕｃｅ処理の結果を取得して、中間情報管理サーバ７００および結果情報管理サーバ８００に格納する。
【００５２】
入力情報管理サーバ６００は、入力情報記憶部６１０を有する。入力情報記憶部６１０は、入力情報を記憶する。
中間情報管理サーバ７００は、中間情報記憶部７１０を有する。中間情報記憶部７１０は、中間情報を記憶する。
【００５３】
結果情報管理サーバ８００は、結果情報記憶部８１０を有する。結果情報記憶部８１０は、結果情報を記憶する。
データ処理サーバ９００は、データ処理部９１０を有する。データ処理部９１０は、実行制御部１１０によりＭａｐ処理をアサインされると、入力情報の一部を取得してＭａｐ処理を実行する。また、データ処理部９１０は、実行制御部１１０によりＲｅｄｕｃｅ処理をアサインされるとＭａｐ処理の結果に対してＲｅｄｕｃｅ処理を実行する。Ｍａｐ処理やＲｅｄｕｃｅ処理のロジックは、ソースプログラム内に記述される。
【００５４】
図５は、分散処理の例を示す図である。第２の実施の形態の分散処理システムでは、リコメンド情報を生成するまでに、第１，第２フェーズの２回のフェーズで、ＭａｐＲｅｄｕｃｅを利用する。第１，第２フェーズは、データ処理サーバ９００，９００ａ，・・・により実行される。第１，第２フェーズの結果、ユーザ間の評価値の相関を得ることができる。ユーザ間の相関に基づいて、各ユーザが高評価すると予測される商品を抽出し、これをお勧め商品とする。
【００５５】
第１フェーズは、ステップＳ１，Ｓ２，Ｓ３を含む。ステップＳ１は、第１のＭａｐ処理である。ステップＳ１では、ｃｓｖ形式のデータが入力される。当該入力データには、ユーザ名、商品を示す情報、評価した日付、評価値が含まれる。ステップＳ１では、入力データに対して、キー（ｋｅｙ）とバリュー（ｖａｌｕｅ）とのペアが生成される。具体的には、キーは商品を示す情報である。バリューは当該商品を評価したユーザ名、その評価値および評価した日付のセットである。ここで、処理結果登録部５１０は、ステップＳ１で生成されたキー・バリューを取得し、中間情報として中間情報記憶部７１０に格納する。
【００５６】
ステップＳ２は、第１のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理である。ステップＳ２では、ステップＳ１の出力が入力される。ステップＳ２では、入力されたキー・バリューをキーでソートして出力する。
【００５７】
ステップＳ３は、第１のＲｅｄｕｃｅ処理である。ステップＳ３では、ステップＳ２の出力が入力となる。ステップＳ３では、入力されたデータをマージして新たなキー・バリューを出力する。具体的には、キーは商品を示す情報である。バリューは商品ごとの全ユーザの評価値のセットである。
【００５８】
第２フェーズは、ステップＳ４，Ｓ５，Ｓ６を含む。ステップＳ４は、第２のＭａｐ処理である。ステップＳ４では、ステップＳ３の出力が入力となる。ステップＳ４では、入力されたデータに基づいて、新たなキー・バリューを出力する。具体的には、キーはあるユーザ名と別のユーザ名のセットである。バリューは当該各ユーザによる評価値のセットである。
【００５９】
ステップＳ５は、第２のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理である。ステップＳ５では、ステップＳ４の出力が入力される。ステップＳ５では、入力されたキー・バリューをキーでソートして出力する。
【００６０】
ステップＳ６は、第２のＲｅｄｕｃｅ処理である。ステップＳ６では、ステップＳ５の出力が入力となる。ステップＳ６では、入力されたキー・バリューに基づいて、ユーザ間の相関係数を求め、これを評価の類似度Ｓｉｍｉｌａｒｉｔｙ（ｕｓｅｒ１，ｕｓｅｒ２）とする。例えば、ユーザ“Ｔａｒｏ”および“Ｊｉｒｏ”の類似度Ｓｉｍｉｌａｒｉｔｙ（Ｔ，Ｊ）（“Ｔ”は“Ｔａｒｏ”を、“Ｊ”は“Ｊｉｒｏ”を示す）は、次の（１）式により求めることができる。
【００６１】
【数１】
0005888336.tif 000002
【００６２】
ここで、Ｃｏｖ（Ｔ，Ｊ）は、ユーザ“Ｔａｒｏ”および“Ｊｉｒｏ”の評価値の共分散である。σＴは“Ｔａｒｏ”の評価値の標準偏差であり、σＪは“Ｊｉｒｏ”の評価値の標準偏差である。また、Ｔｉは“Ｔａｒｏ”の商品“Ｉｔｅｍ”に対する評価値であり、Ｊｉは“Ｊｉｒｏ”の“Ｉｔｅｍ”に対する評価値である。Ｔ，Ｊの上付きバーはそれぞれＴｉ，Ｊｉの相加平均を示す。
【００６３】
このように、第１，第２フェーズを実行して、各ユーザ間の相関係数を算出する。各ユーザ間の相関係数を用いて、例えば、“Ｔａｒｏ”のある商品“Ｉｔｅｍ”に対する予測評価値Ｒａｔｅ（Ｔ，ｉｔｅｍ）（“Ｔ”は“Ｔａｒｏ”を示す）を次の（２）式により求めることができる。
【００６４】
【数２】
0005888336.tif 000003
【００６５】
ここで、Σは、当該“Ｉｔｅｍ”に対して計算対象の期間内に評価を行った全ユーザについての和をとるものである。“ｕｓｅｒ”の上付きバーは当該期間内の全ユーザによる評価値の相加平均を示す。
【００６６】
図６は、評価値テーブルの例を示す図である。評価値テーブル６１１は、入力情報記憶部６１０に記憶される。評価値テーブル６１１は、日付、商品ＩＤ（IDentifier）および評価値の項目を含む。
【００６７】
日付の項目には、評価値が入力された日付が登録される。商品ＩＤの項目には、評価対象の商品を示す情報が登録される。評価値の項目には、各ユーザによる評価値が登録される。例えば、２０１１年３月１日に、商品ＩＤ“Ｉｔｅｍ１”の商品に対して、ユーザ“Ｔａｒｏ”が入力した評価値“１”が登録されている。なお、評価値が大きい程、高評価であるとする。
【００６８】
なお、評価値テーブル６１１に登録されるデータは、ｃｓｖ形式など他のデータ形式で保持されてもよい。
図７は、中間情報テーブルの例を示す図である。中間情報テーブル７１１は、中間情報記憶部７１０に記憶される。中間情報テーブル７１１は、入力データハッシュ値、データ日付および中間情報の項目を含む。
【００６９】
入力データハッシュ値の項目には、ステップＳ１で入力されたｃｓｖ形式のデータのハッシュ値が登録される。データ日付の項目には、入力データに含まれる日付の範囲が登録される。中間情報の項目には、ステップＳ１で出力された中間情報が登録される。例えば、２０１１年３月１日〜５日に入力された評価値を含む入力情報のハッシュ値“１２３ａ５ｃ”に対して、中間情報（データ名“結果０１−０５”）が登録されている。
【００７０】
図８は、第１のＭａｐ処理の入出力データ例を示す図である。データＤ１１は、ステップＳ１（第１のＭａｐ処理）の入力データである。データＤ１１は、評価値テーブル６１１から管理者が指定した期間の情報をｃｓｖ形式で抽出したものである。データＤ１１には、ユーザ名、商品ＩＤ、評価日付および評価値の順で情報が記述されている。データＤ１２は、ステップＳ１の出力データである。データＤ１２は、データＤ１１に含まれる商品ＩＤをキーとしたキー・バリューである。バリューは、ユーザ名、評価日付および評価値の各値を“−”（ハイフン）で結んだものである。第１のＭａｐ処理を記述した第１のＭａｐクラスは、例えば、次のように記述できる。
【００７１】
図９は、第１のＭａｐクラスの例を示す図である。プログラム９１１は、ソースプログラムの一部である。プログラム９１１では、データＤ１１から一行ずつレコードを取得し、“，”（カンマ）で区切られた各値を抽出して、データＤ１２を生成する処理が記述されている。第１のＭａｐクラス“ＣｏｌｌａｂｏｒａｔｉｖｅＦｉｌｔｅｒｉｎｇ＿ｐｈａｓｅ１＿Ｍａｐ”は、“Ｍａｐｐｅｒ”インタフェースを実装したクラスである。第２の実施の形態の分散処理システムでは、“Ｍａｐｐｅｒ”インタフェースによる型の定義により、第１のＭａｐクラスのメソッド“ｍａｐ”による処理のデータ並列性が保証されている。処理解析部２１０は、第１のＭａｐクラスが“Ｍａｐｐｅｒ”インタフェースを実装したものであることを検出することで、メソッド“ｍａｐ”による処理を並列処理可能な箇所として特定できる。
【００７２】
図１０は、第１のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理の入出力データ例を示す図である。データＤ１２は、ステップＳ１の出力データであり、ステップＳ２（第１のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理）の入力データである。データＤ１３は、ステップＳ２の出力データである。データＤ１３は、データＤ１２のキー・バリューをキー（商品ＩＤ）でソートしたものである。
【００７３】
図１１は、第１のＲｅｄｕｃｅ処理の入出力データ例を示す図である。データＤ１３は、ステップＳ２の出力データであり、ステップＳ３（第１のＲｅｄｕｃｅ処理）の入力データである。データＤ１４は、ステップＳ３の出力データである。データＤ１４は、データＤ１３のキー・バリューをキー（商品ＩＤ）でマージしたものであり、商品ＩＤに対する全ユーザの評価値を集約したものである。例えば、キー（商品ＩＤ）に対するバリューとして、ユーザと評価値とのセットが評価を行ったユーザ分だけ抽出される。データＤ１４は、“（商品ＩＤ，（（ｕｓｅｒ１，ｕｓｅｒ１の評価値），（ｕｓｅｒ２，ｕｓｅｒ２の評価値），・・・））”というフォーマットである。なお、同一ユーザが同一商品に複数回評価を行っている場合には、新しい方の評価値を採用する。
【００７４】
図１２は、第１のＲｅｄｕｃｅクラスの例を示す図である。プログラム９１２は、ソースプログラムの一部である。プログラム９１２では、データＤ１３から一行ずつレコードを取得し、バリューに含まれる“−”（ハイフン）で区切られた各値をキーごとに抽出して、データＤ１４を生成する処理が記述されている。第１のＲｅｄｕｃｅクラス“ＣｏｌｌａｂｏｒａｔｉｖｅＦｉｌｔｅｒｉｎｇ＿ｐｈａｓｅ１＿Ｒｅｄｕｃｅ”は、“Ｒｅｄｕｃｅｒ”インタフェースを実装したクラスである。“Ｒｅｄｕｃｅｒ”インタフェースも、“Ｍａｐｐｅｒ”インタフェースと同様に、その型の定義により、第１のＲｅｄｕｃｅクラスのデータ並列性が保証されている。このため、第１のＲｅｄｕｃｅクラスのメソッド“Ｒｅｄｕｃｅ”も並列処理可能な箇所である。
【００７５】
図１３は、第２のＭａｐ処理の入出力データ例を示す図である。データＤ２１は、ステップＳ３の出力データであり、ステップＳ４（第２のＭａｐ処理）の入力データである。データＤ２２は、ステップＳ４の出力データである。データＤ２２は、データＤ２１に基づいて生成された新たなキー・バリューである。具体的には、データＤ２１の各行について、評価したユーザの組をキーとして抽出し、抽出したユーザによる評価値の組をバリューとしたものである。データＤ２２では、ユーザ名を“−”（ハイフン）で結んだ値をキーとしている（例えば、“Ｔａｒｏ−Ｊｉｒｏ”）。また、各ユーザによる評価値を“，”（カンマ）で区切った値をバリューとしている（例えば、“（１，４）”）。
【００７６】
図１４は、第２のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理の入出力データ例を示す図である。データＤ２２は、ステップＳ４の出力データであり、ステップＳ５（第２のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理）の入力データである。データＤ２３は、ステップＳ５の出力データである。データＤ２３は、データＤ２２のキー・バリューをキー（ユーザ名の組）でソートしたものである。
【００７７】
図１５は、第２のＲｅｄｕｃｅ処理の入出力データ例を示す図である。データＤ２３は、ステップＳ５の出力データであり、ステップＳ６（第２のＲｅｄｕｃｅ処理）の入力データである。データＤ２４は、ステップＳ６の出力データであり、データＤ２３に基づいて生成されるデータである。データＤ２４の各行は、データＤ２３に基づいて（１）式により算出されたユーザ間の類似度（相関係数）である。
【００７８】
図１６は、リコメンド情報の例を示す図である。データＤ２４は、ステップＳ６の出力データである。データＤ２５は、ユーザ間の類似度を用いて（２）式により算出された各ユーザの各商品に対する予測評価値の一覧であり、お勧め商品を抽出するためのリコメンド情報である。例えば、ユーザ“Ｔａｒｏ”に対するお勧め商品を３つ抽出したい場合には、データＤ２５からＲａｔｅ（Ｔａｒｏ，Ｉｔｅｍ）のうち、大きい方から３つ選択して、該当する商品を特定すればよい。
【００７９】
図１７は、分散処理制御の例を示すフローチャートである。以下、図１７に示す処理をステップ番号に沿って説明する。
（ステップＳ１１）実行制御部１１０は、処理対象のソースプログラムおよび処理対象の入力情報範囲（日付範囲）を含む処理依頼をクライアント３０から受信する。例えば、管理者は、ブラウザ３１を操作して、実行制御部１１０に送信する情報（あるいは、当該情報のパス）を入力できる。実行制御部１１０は、当該ソースプログラムにつき処理解析部２１０に処理解析を依頼する。ソースプログラムには、ＭａｐＲｅｄｕｃｅ処理の第１フェーズに関するプログラム９１１，９１２が含まれる。処理解析部２１０は、プログラム９１１に含まれる第１のＭａｐクラスが“Ｍａｐｐｅｒ”インタフェースを実装していることを検出すると、当該箇所をデータ並列化可能箇所として特定する。また、処理解析部２１０は、プログラム９１２に含まれる第１のＲｅｄｕｃｅクラスが“Ｒｅｄｕｃｅｒ”インタフェースを実装していることを検出すると、当該箇所をデータ並列化可能箇所として特定する。処理解析部２１０は、特定した箇所を実行制御部１１０に応答する。実行制御部１１０は、ソースプログラムで記述された処理のうち、データ並列化可能箇所まで処理を進める。
【００８０】
（ステップＳ１２）実行制御部１１０は、データ並列化可能箇所のうち、中間情報の流用可能性のある箇所に関して、処理変換部３１０に処理変換を依頼する。中間情報の流用可能性のある第１のＭａｐ処理では、当該処理の過去の処理結果（中間情報）が中間情報記憶部７１０に記憶された中間情報テーブル７１１に蓄積されている。処理変換部３１０は、第１のＲｅｄｕｃｅ処理に対する第１のＭａｐ処理が中間情報を生成する処理であるため、当該第１のＭａｐ処理に関して、処理変換を開始する。処理変換部３１０は、データ分析部４１０に入力情報の分析を依頼する。データ分析部４１０は、中間情報テーブル７１１を参照して、入力情報のうち、処理済のデータ部分を特定する。詳細は後述する。
【００８１】
（ステップＳ１３）データ分析部４１０は、ステップＳ１２で特定した処理済のデータ部分のうち、中間情報を流用可能なデータ部分を特定する。詳細は後述する。データ分析部４１０は、入力情報のうち、新たに計算すべきデータ部分、中間情報を流用できないデータ部分および中間情報を流用可能なデータ部分を示す情報を処理変換部３１０に応答する。
【００８２】
（ステップＳ１４）処理変換部３１０は、中間情報を流用可能なデータ部分については、中間情報テーブル７１１に登録された中間情報を流用した処理を行うように、第１フェーズの処理を変換する。詳細は後述する。処理変換部３１０は、変換結果を実行制御部１１０に応答する。
【００８３】
（ステップＳ１５）実行制御部１１０は、処理変換部３１０による変換結果に基づいて、データ処理サーバ９００，９００ａ，・・・に分散処理を依頼する。例えば、データ処理部９１０は、第１のＭａｐ処理、第１のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理、第１のＲｅｄｕｃｅ処理、第２のＭａｐ処理、・・・とアサインされた処理を順次実行する。実行制御部１１０からデータ処理部９１０に処理対象として指定されるデータは、クライアント３０から指定された入力情報のうち、新たに計算すべきデータ部分および処理済だが中間情報を流用できないデータ部分となる。また、データ処理部９１０は、各データ部分に対する第１のＭａｐ処理の結果、新規に得た中間情報を処理結果登録部５１０に出力する。更に、データ処理部９１０は、第１のＭａｐ処理において、中間情報を流用可能なデータ部分については、当該データ部分に対応する中間情報を中間情報テーブル７１１から取得して後続の処理を行う。そして、データ処理部９１０は、ユーザ間の類似度の情報（データＤ２４）やリコメンド情報（データＤ２５）を生成して、処理結果登録部５１０に出力する。データ処理サーバ９００ａ，・・・のデータ処理部も同様である。
【００８４】
（ステップＳ１６）処理結果登録部５１０は、データ処理サーバ９００，９００ａ，・・・から取得した中間情報を１つにまとめて中間情報テーブル７１１に登録する。このとき、当該中間情報に含まれるデータの日付範囲も登録する。また、入力情報のうち当該日付範囲に対応する部分のデータのハッシュ値をインデックスとして登録する。また、処理結果登録部５１０は、データ処理サーバ９００，９００ａ，・・・から取得したユーザ間の類似度の情報やリコメンド情報を結果情報記憶部８１０に格納する。
【００８５】
このようにして、第２の実施の形態の分散処理システムでは、第１のＭａｐ処理において中間情報を流用可能な処理については、中間情報を流用した処理を行う。また、中間情報を流用できない箇所について新たに第１のＭａｐ処理を行うと、その結果得られた中間情報を中間情報テーブル７１１に登録する。再びリコメンド情報を生成するときにその結果を流用できるようにするためである。次に、上記ステップＳ１２の処理を説明する。
【００８６】
図１８は、処理済データ特定処理の例を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。
（ステップＳ２１）データ分析部４１０は、処理変換部３１０から指示された入力情報を読み込む。データ分析部４１０は、処理変換部３１０から入力情報を取得してもよいし、処理変換部３１０から指定された日付範囲の入力情報を、入力情報記憶部６１０に記憶された評価値テーブル６１１から取得してもよい。処理変換部３１０は、ｃｓｖ形式のデータとして入力情報を取得する。
【００８７】
（ステップＳ２２）データ分析部４１０は、入力情報から１行を読み込む。
（ステップＳ２３）データ分析部４１０は、読み込んだ行に含まれる日付を取得する。
（ステップＳ２４）データ分析部４１０は、中間情報テーブル７１１に含まれる中間情報の日付範囲（データ日付の項目）を取得する。
【００８８】
（ステップＳ２５）データ分析部４１０は、入力情報の当該行のデータが処理済であるか否かを判定する。処理済である場合、処理をステップＳ２６に進める。処理済でない場合、処理をステップＳ２７に進める。データ分析部４１０は、読み込んだ行のデータを処理済であるか否かを、当該行に含まれる日付が、中間情報テーブル７１１に含まれる何れかのデータ日付に含まれるか否かにより判定できる。含まれる場合、処理済である。含まれない場合、処理済でない。
【００８９】
（ステップＳ２６）データ分析部４１０は、ステップＳ２２で読み込んだ行を処理済データとしてファイル出力する。そして、処理をステップＳ２８に進める。
（ステップＳ２７）データ分析部４１０は、ステップＳ２２で読み込んだ行を新規データとしてファイル出力する。そして、処理をステップＳ２８に進める。
【００９０】
（ステップＳ２８）データ分析部４１０は、ステップＳ２２で読み込んだ行が入力情報の最後の行であるか否かを判定する。最後の行でない場合、処理をステップＳ２２に進める。最後の行である場合、処理を終了する。
【００９１】
このようにして、データ分析部４１０は、入力情報を、新規に計算する部分および処理済の部分に分けてファイル出力する。データ分析部４１０は、処理済の部分について、中間情報を流用可能な部分を更に特定する。以下、図１７のステップＳ１３の処理を説明する。
【００９２】
図１９は、流用可能データ特定処理の例を示すフローチャートである。以下、図１９に示す処理をステップ番号に沿って説明する。
（ステップＳ３１）データ分析部４１０は、処理済データ特定処理で出力した処理済データを読み込む。
【００９３】
（ステップＳ３２）データ分析部４１０は、処理済データから１行を読み込む。
（ステップＳ３３）データ分析部４１０は、読み込んだ１行に含まれる日付を集合ａの要素として取得する。集合ａは、評価値の登録日付の集合である。
【００９４】
（ステップＳ３４）データ分析部４１０は、ステップＳ３２で読み込んだ行が処理済データの最後の行であるか否かを判定する。最後の行でない場合、処理をステップＳ３２に進める。最後の行である場合、ステップＳ３５に進める。例えば、処理済データに含まれる日付が、２０１１／０３／０３〜２０１１／０３／０６の範囲の各日付であれば、集合ａ＝｛２０１１／０３／０３，２０１１／０３／０４，２０１１／０３／０５，２０１１／０３／０６｝となる。
【００９５】
（ステップＳ３５）データ分析部４１０は、中間情報テーブル７１１を参照して、中間情報に含まれる日付のべき集合ｌｉｓｔを作成する。例えば、中間情報テーブル７１１に対して、集合ｌｉｓｔ＝｛｛φ｝，｛２０１１／０３／０１〜０５｝，｛２０１１／０３／０２〜０５｝，・・・，｛２０１１／０３／０１〜０５，２０１１／０３／０２〜０５｝，・・・｝を得る。
【００９６】
（ステップＳ３６）データ分析部４１０は、集合ｌｉｓｔから、空集合｛φ｝および重複する要素を除外する。
（ステップＳ３７）データ分析部４１０は、集合ｌｉｓｔの各要素の和集合が集合ａの部分集合にならないものを除外する。
【００９７】
（ステップＳ３８）データ分析部４１０は、集合ｌｉｓｔのうち最大の和集合になる要素を流用可能箇所とする。ここで、最大の和集合とは、要素である日付の個数が最大となる和集合を示す。
【００９８】
（ステップＳ３９）データ分析部４１０は、集合ｌｉｓｔのうちから流用可能箇所として特定した要素の和集合に含まれる日付を処理変換部３１０に応答する。
このようにして、データ分析部４１０は、処理済データのうちから、中間情報の流用が可能な部分を特定する。中間情報の流用ができない部分は、第１のＭａｐ処理の対象に含める部分となる。すなわち、入力情報のうち、図１８のステップＳ２７で新規データとしてファイル出力された部分および、中間情報の流用ができない部分が第１のＭａｐ処理の対象の部分である。次に、図１７のステップＳ１４の処理を説明する。
【００９９】
図２０は、処理変換処理の例を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。
（ステップＳ４１）処理変換部３１０は、入力情報を読み込む。
【０１００】
（ステップＳ４２）処理変換部３１０は、データ分析部４１０の分析結果に基づいて、入力情報に新規に計算する部分があるか否かを判定する。新規に計算する部分がある場合、処理をステップＳ４３に進める。新規に計算する部分がない場合、処理をステップＳ４４に進める。
【０１０１】
（ステップＳ４３）処理変換部３１０は、入力情報のうち、新規に計算する部分および計算のロジック（第１のＭａｐ処理の“ｍａｐ”メソッドなど）を実行制御部１１０に通知して処理を依頼する。実行制御部１１０は、処理変換部３１０からの通知に基づき、データ処理サーバ９００，９００ａ，・・・に当該データ部分に対する第１のＭａｐ処理を依頼する。
【０１０２】
（ステップＳ４４）処理変換部３１０は、データ分析部４１０の分析結果に基づいて、入力情報のうち、処理済だが中間情報を流用できない部分があるか否かを判定する。処理済だが中間情報を流用できない部分がある場合、処理をステップＳ４５に進める。処理済だが中間情報を流用できない部分がない場合、処理をステップＳ４６に進める。
【０１０３】
（ステップＳ４５）処理変換部３１０は、ステップＳ４３と同様に、入力情報のうち、処理済だが中間情報を流用できない部分および計算のロジック（第１のＭａｐ処理の“ｍａｐ”メソッドなど）を実行制御部１１０に通知して処理を依頼する。実行制御部１１０は、処理変換部３１０からの通知に基づき、データ処理サーバ９００，９００ａ，・・・に当該データ部分に対する第１のＭａｐ処理を依頼する。
【０１０４】
（ステップＳ４６）処理変換部３１０は、データ分析部４１０の分析結果に基づいて、入力情報のうち、中間情報を流用可能な部分があるか否かを判定する。中間情報を流用可能な部分がある場合、処理をステップＳ４７に進める。中間情報を流用可能な部分がない場合、処理を終了する。
【０１０５】
（ステップＳ４７）処理変換部３１０は、入力情報のうち、中間情報を流用可能な部分を実行制御部１１０に通知して、第１のＭａｐ処理の後続の処理を依頼する。実行制御部１１０は、処理変換部３１０からの通知に基づき、データ処理サーバ９００，９００ａ，・・・に当該データ部分に対しては第１のＭａｐ処理を行わず、既存の中間情報を取得するよう依頼する。この場合、図１７のステップＳ１５において、データ処理部９１０は、通知された中間情報を中間情報記憶部７１０から取得して、後続の第１のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理や第１のＲｅｄｕｃｅ処理を実行することになる。ステップＳ４３，Ｓ４４の何れかまたは両方を実行している場合には、データ処理部９１０は、通知された中間情報と、ステップＳ４３，Ｓ４４で新たに得た中間情報とに基づいて、後続の処理を実行する。
【０１０６】
このようにして、処理変換部３１０は、入力情報を３種類に区分して、実行制御部１１０に処理依頼する。実行制御部１１０は、データ処理サーバ９００，９００ａ，・・・を制御して、入力情報の各区分に応じた分散処理を実行させる。
【０１０７】
図２１は、分散処理制御の例を示すシーケンス図である。以下、図２１に示す処理をステップ番号に沿って説明する。
（ステップＳＴ１０１）クライアント３０は、ソースプログラムや入力情報の日付範囲を指定した、リコメンド情報生成の処理依頼を実行制御サーバ１００に送信する。実行制御サーバ１００は、当該処理依頼を受信する。
【０１０８】
（ステップＳＴ１０２）実行制御サーバ１００は、ソースプログラムを指定して、処理解析依頼を処理解析サーバ２００に送信する。処理解析サーバ２００は、当該処理解析依頼を受信する。
【０１０９】
（ステップＳＴ１０３）処理解析サーバ２００は、解析結果を実行制御サーバ１００に応答する。実行制御サーバ１００は、処理解析結果を受信する。当該解析結果では、ＭａｐＲｅｄｕｃｅ処理の第１フェーズのステップＳ１（第１のＭａｐ処理）およびステップＳ３（第１のＲｅｄｕｃｅ処理）がデータ並列化可能箇所として特定されている。
【０１１０】
（ステップＳＴ１０４）実行制御サーバ１００は、データ並列化可能箇所のうち、中間情報の流用可能性のある第１のＭａｐ処理について、処理の変換依頼を処理変換サーバ３００に送信する。処理変換サーバ３００は、当該変換依頼を受信する。
【０１１１】
（ステップＳＴ１０５）処理変換サーバ３００は、入力情報および中間情報の分析依頼をデータ分析サーバ４００に送信する。データ分析サーバ４００は、当該分析依頼を受信する。
【０１１２】
（ステップＳＴ１０６）データ分析サーバ４００は、中間情報管理サーバ７００に中間情報を要求する。中間情報管理サーバ７００は、当該要求を受信する。
（ステップＳＴ１０７）中間情報管理サーバ７００は、中間情報記憶部７１０に記憶された中間情報テーブル７１１を参照して、中間情報を応答する。データ分析サーバ４００は、中間情報の応答を受信する。
【０１１３】
（ステップＳＴ１０８）データ分析サーバ４００は、入力情報の日付範囲と中間情報とに基づいて、入力情報を、第１のＭａｐ処理の計算対象とする箇所および中間情報を流用可能な箇所に区分する。データ分析サーバ４００は、その分析結果を処理変換サーバ３００に応答する。処理変換サーバ３００は、分析結果の応答を受信する。
【０１１４】
（ステップＳＴ１０９）処理変換サーバ３００は、当該分析結果に基づいて、入力情報を分割し、中間情報を流用する処理に変換する。処理変換サーバ３００は、実行制御サーバ１００に変換結果を応答する。
【０１１５】
図２２は、分散処理制御の例を示すシーケンス図である。以下、図２２に示す処理をステップ番号に沿って説明する。なお、図２２では、データ処理サーバ９００のみを図示しているが、データ処理サーバ９００ａ，・・・も、データ処理サーバ９００と同様の処理を行う。
【０１１６】
（ステップＳＴ１１１）実行制御サーバ１００は、処理変換サーバ３００による処理変換結果に応じて、第１のＭａｐ処理を含む処理依頼をデータ処理サーバ９００，９００ａ，・・・に送信する。処理依頼では、第１のＭａｐ処理において、新たに計算対象とする入力情報の日付範囲が指定される。また、実行制御サーバ１００は、入力情報のうち中間情報を流用可能な箇所を示す日付範囲の情報をデータ処理サーバ９００，９００ａ，・・・に送信する。流用可能な箇所を示す情報は、データ処理サーバ９００，９００ａ，・・・のうちの何れか１つに送信することが考えられる。また、流用可能な箇所を分割して、分割した各部分を複数のデータ処理サーバに通知してもよい。
【０１１７】
（ステップＳＴ１１２）データ処理サーバ９００，９００ａ，・・・は、新たに計算対象とする入力情報を、入力情報管理サーバ６００に要求する。日付範囲を指定することで、新たに計算対象とする箇所を要求する。入力情報管理サーバ６００は、当該要求を受信する。
【０１１８】
（ステップＳＴ１１３）入力情報管理サーバ６００は、入力情報記憶部６１０に記憶された入力情報を参照して、指定された日付範囲のデータを応答する。データ処理サーバ９００は、当該応答を受信する。
【０１１９】
（ステップＳＴ１１４）データ処理サーバ９００，９００ａ，・・・は、中間情報の流用可能な箇所について、中間情報管理サーバ７００に中間情報を要求する。中間情報管理サーバ７００は、当該要求を受信する。
【０１２０】
（ステップＳＴ１１５）中間情報管理サーバ７００は、中間情報記憶部７１０に記憶された中間情報テーブル７１１を参照して、要求された日付範囲の中間情報を取得し応答する。データ処理サーバ９００，９００ａ，・・・は、当該応答を受信する。
【０１２１】
（ステップＳＴ１１６）データ処理サーバ９００，９００ａ，・・・は、ＭａｐＲｅｄｕｃｅの第１フェーズを実行する。第１のＭａｐ処理では、中間情報を流用可能な箇所は処理対象外となり、当該箇所についてはステップＳＴ１１５で取得した中間情報を第１のＭａｐ処理の処理結果として、後続の処理を実行する。データ処理サーバ９００，９００ａ，・・・は、入力情報のうち、第１のＭａｐ処理の計算を新たに行った箇所について中間情報を取得すると、登録サーバ５００に送信する。登録サーバ５００は、データ処理サーバ９００，９００ａ，・・・から受信した中間情報を中間情報管理サーバ７００に格納する。
【０１２２】
（ステップＳＴ１１７）データ処理サーバ９００，９００ａ，・・・は、ＭａｐＲｅｄｕｃｅの第２フェーズを実行する。そして、データ処理サーバ９００，９００ａ，・・・は、ユーザ間の類似度の情報を得ると、当該情報に基づいて、リコメンド情報を生成する。更に、データ処理サーバ９００，９００ａ，・・・は、これらの情報を登録サーバ５００に送信する。登録サーバ５００は、データ処理サーバ９００，９００ａ，・・・から受信したユーザ間の類似度の情報やリコメンド情報を結果情報管理サーバ８００に格納する。
【０１２３】
（ステップＳＴ１１８）データ処理サーバ９００，９００ａ，・・・は、リコメンド情報を生成する処理が完了した旨を実行制御サーバ１００に応答する。実行制御サーバ１００は、当該応答を受信する。
【０１２４】
（ステップＳＴ１１９）実行制御サーバ１００は、指示された処理が完了した旨をクライアント３０に応答する。クライアント３０は、当該応答を受信する。管理者は、クライアント３０を操作して、結果情報管理サーバ８００に格納されたリコメンド情報を参照し、ユーザの商品評価の傾向を把握することができる。また、ＥＣサーバ２０は、リコメンド情報に基づき、高評価が予測される商品をユーザごとに抽出し、当該商品をお勧め商品としてユーザが操作する端末装置のブラウザ上に表示させることもできる。
【０１２５】
このようにして、分散処理システムによる分散処理制御が行われる。
以下、リコメンド情報の具体的な生成処理を説明する。ある日のリコメンド情報を生成するために、その日の直前の５日間の評価値のログを処理する場合を想定する。以下の説明において、１回目の処理は、２０１１年３月６日のリコメンド情報を生成する処理である。２回目の処理は、２０１１年３月７日のリコメンド情報を生成する処理である。３回目の処理は、２０１１年３月８日のリコメンド情報を生成する処理である。また、１回目の処理の直前では、中間情報テーブル７１１に何れの中間情報も登録されていないとする。
【０１２６】
図２３は、１回目の処理の例を示す図である。１回目の処理の入力情報は、データＤ１１である。データＤ１１には、２０１１年３月１日に入力された評価値の情報（以下、単に「１日のログ」のように称する）を含む１〜５日のログが含まれる。データＤ１１を入力して、第１のＭａｐ処理を実行した結果、データＤ１２が出力される。データＤ１２は、１〜５日のログから新規に生成された中間情報である。登録サーバ５００は、データ処理サーバ９００，９００ａ，・・・による第１のＭａｐ処理の結果を収集してデータＤ１２を生成し、データＤ１２に含まれる日付範囲と共に中間情報テーブル７１１に登録する。なお、図２３では、中間情報テーブル７１１のハッシュ値の項目の図示を省略している（以下、同様）。
【０１２７】
以降、第１のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理、第１のＲｅｄｕｃｅ処理、第２のＭａｐ処理、・・・と順次実行され、データＤ２５が生成される。データＤ２５は、１〜５日のログから生成された６日のリコメンド情報である。
【０１２８】
図２４は、２回目の処理の入力情報の例を示す図である。２回目の処理の入力情報は、データＤ１１ａである。データＤ１１ａには、２〜６日のログが含まれる。この時点では、中間情報テーブル７１１には、１〜５日のログに関する中間情報（データＤ１２）が登録されている。データＤ１１ａの各日付のログは、図１８，１９で示した処理において次のように扱われる。
【０１２９】
（１）２〜５日のログは、既に処理されたことのある処理済データである。１〜５日のログを含むデータＤ１１を処理した結果、データＤ１２を既に得ているからである。また、２〜５日のログは、中間情報を流用可能な部分ではない。中間情報であるデータＤ１２に含まれる日付の集合（１〜５日）が、２〜５日の日付の集合の部分集合ではないからである。
【０１３０】
（２）６日のログは、新規に追加されたデータであり、新規に計算するデータである。６日のログの処理結果を含む中間情報は未取得だからである。
図２５は、２回目の処理の例を示す図である。第１のＭａｐ処理に入力されたデータＤ１１ａは次のように処理される。
【０１３１】
（１）２〜５日のログによって、中間情報であるデータＤ１２ａが生成される。登録サーバ５００は、データ処理サーバ９００，９００ａ，・・・による２〜５日のログに対する第１のＭａｐ処理の結果を収集してデータＤ１２ａを生成し、データＤ１２ａに含まれる日付範囲と共に中間情報テーブル７１１に登録する。
【０１３２】
（２）６日のログによって、中間情報であるデータＤ１２ｂが生成される。登録サーバ５００は、データ処理サーバ９００，９００ａ，・・・による６日のログに対する第１のＭａｐ処理の結果を収集してデータＤ１２ｂを生成し、データＤ１２ｂに含まれる日付範囲と共に中間情報テーブル７１１に登録する。
【０１３３】
以降、第１のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理、第１のＲｅｄｕｃｅ処理、第２のＭａｐ処理、・・・と順次実行され、データＤ２５ａが生成される。データＤ２５ａは、２〜６日のログから生成された７日のリコメンド情報である。
【０１３４】
図２６は、３回目の処理の入力情報の例を示す図である。３回目の処理の入力情報は、データＤ１１ｂである。データＤ１１ｂには、３〜７日のログが含まれる。この時点では、中間情報テーブル７１１には、１〜５日のログに関する中間情報（データＤ１２）、２〜５日のログに関する中間情報（データＤ１２ａ）および６日のログに関する中間情報（データＤ１２ｂ）が登録されている。データＤ１１ｂの各日付のログは、図１８，１９で示した処理において次のように扱われる。
【０１３５】
（１）３〜５日のログは、既に処理されたことのある処理済データである。１〜５日のログを含むデータＤ１１を処理した結果、データＤ１２を既に得ているからである。あるいは、２〜５日のログを含むデータＤ１１ａを処理した結果、データＤ１２ａを既に得ているからである。また、３〜５日のログは、中間情報を流用可能な部分ではない。中間情報であるデータＤ１２，Ｄ１２ａに含まれる日付の集合（１〜５日）およびデータＤ１２，Ｄ１２ａ，Ｄ１２ｂに含まれる日付の和集合が、３〜６日の日付の集合の部分集合ではないからである。
【０１３６】
（２）６日のログは、既に処理されたことのある処理済データである。６日のログを含むデータＤ１１ａを処理した結果、データＤ１２ｂを既に得ているからである。また、６日のログは、中間情報を流用可能な部分である。中間情報であるデータＤ１２ｂに含まれる日付の集合（６日）が３〜６日の日付の集合の部分集合だからである。
【０１３７】
（３）７日のログは、新規に追加されたデータであり、新規に計算するデータである。データＤ１２，Ｄ１２ａ，Ｄ１２ｂは、何れも７日のログの処理結果を含まないからである。
【０１３８】
図２７は、３回目の処理の例を示す図である。第１のＭａｐ処理に入力されたデータＤ１１ｂは次のように処理される。
（１）３〜５日のログによって、中間情報であるデータＤ１２ｃが生成される。登録サーバ５００は、データ処理サーバ９００，９００ａ，・・・による３〜５日のログに対する第１のＭａｐ処理の結果を収集してデータＤ１２ｃを生成し、データＤ１２ｃに含まれる日付範囲と共に中間情報テーブル７１１に登録する。
【０１３９】
（２）６日のログに関しては、中間情報テーブル７１１から流用可能な既存の中間情報であるデータＤ１２ｂを取得する。
（３）７日のログによって、中間情報であるデータＤ１２ｄが生成される。登録サーバ５００は、データ処理サーバ９００，９００ａ，・・・による７日のログに対する第１のＭａｐ処理の結果を収集してデータＤ１２ｄを生成し、データＤ１２ｄに含まれる日付範囲と共に中間情報テーブル７１１に登録する。
【０１４０】
以降、第１のｓｈｕｆｆｌｅ＆ｓｏｒｔ処理、第１のＲｅｄｕｃｅ処理、第２のＭａｐ処理、・・・と順次実行され、データＤ２５ｂが生成される。データＤ２５ｂは、３〜７日のログから生成された８日のリコメンド情報である。
【０１４１】
このように、第２の実施の形態の分散処理システムでは、入力情報のうち、過去に取得した中間情報を利用可能な部分を特定する。そして、入力情報の内、当該部分に関しては過去の中間情報を取得し、それ以外の部分を分散処理の対象とする。
【０１４２】
これにより、データ処理を効率化できる。具体的には、過去に取得した中間情報を流用可能な部分以外の部分をデータ処理サーバ９００，９００ａ，・・・に分散処理させるので、入力情報の全てを処理せずに済む。既に実行された処理を重複して実行しないことで、処理効率を向上し、処理の高速化を図れる。また、データ処理サーバ９００，９００ａ，・・・が処理するデータの量を低減できるので、データ処理サーバ９００，９００ａ，・・・の負荷を軽減できる。
【０１４３】
なお、第２の実施の形態の分散処理システムでは、中間情報の管理単位を入力データの日付範囲の単位とする場合を例示したが他の単位で管理してもよい。例えば、中間情報の管理単位を日単位に統一してもよい。その場合、例えば、処理結果登録部５１０は、中間情報を日単位に分割して、中間情報記憶部７１０に記憶された中間情報テーブル７１１に登録する。このようすれば、中間情報の流用可能性を向上できる。
【０１４４】
また、第２の実施の形態の分散処理システムでは、評価値が入力された日付に基づいて、既処理の入力情報か、流用可能な中間情報があるか、を判断するものとしたが、他の指標により判断してもよい。例えば、年、月、週および時間帯などで判断してもよい。
【０１４５】
また、第２の実施の形態の分散処理システムでは、入力されるデータが日付（時間）によって区分できる場合を例示したが、これに限らない。例えば、入力されるデータが場所（座標値など）で区分できる場合にも上記方法を利用できる。より具体的には、ある領域内の各地点に関する入力データに対し、当該領域に含まれる一部領域の各地点のデータについて、過去の計算結果を流用できるかを第２の実施の形態と同様にして判断し、後段の処理を効率的に制御することもできる。
【０１４６】
更に、第２の実施の形態の分散処理システムでは、複数のサーバ装置で処理を分担するものとしたが、複数のサーバ装置の機能の少なくとも一部を一台のサーバ装置に集約してもよい。例えば、実行制御サーバ１００、処理解析サーバ２００、処理変換サーバ３００およびデータ分析サーバ４００の機能を一台のサーバ装置に実装してもよい。
【０１４７】
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１４８】
１  記憶装置
２，３  情報処理装置
２ａ  分割手段
３ａ  制御手段
４，４ａ  ノード
Ｄ１，Ｄ２  データ
【図１】
0005888336.tif 000004
【図２】
0005888336.tif 000005
【図３】
0005888336.tif 000006
【図４】
0005888336.tif 000007
【図５】
0005888336.tif 000008
【図６】
0005888336.tif 000009
【図７】
0005888336.tif 000010
【図８】
0005888336.tif 000011
【図９】
0005888336.tif 000012
【図１０】
0005888336.tif 000013
【図１１】
0005888336.tif 000014
【図１２】
0005888336.tif 000015
【図１３】
0005888336.tif 000016
【図１４】
0005888336.tif 000017
【図１５】
0005888336.tif 000018
【図１６】
0005888336.tif 000019
【図１７】
0005888336.tif 000020
【図１８】
0005888336.tif 000021
【図１９】
0005888336.tif 000022
【図２０】
0005888336.tif 000023
【図２１】
0005888336.tif 000024
【図２２】
0005888336.tif 000025
【図２３】
0005888336.tif 000026
【図２４】
0005888336.tif 000027
【図２５】
0005888336.tif 000028
【図２６】
0005888336.tif 000029
【図２７】
0005888336.tif 000030