(57)【要約】【課題】分散処理にかかる時間の増大化の抑制を図ること。【解決手段】割当装置１０１は、距離情報１１０を参照して、ノード群１０２のうちのＭａｐタスク１１１が割り当てられたノードと、ノード群１０２のうちのＲｅｄｕｃｅタスクを割当可能なノードと、の間の距離を特定する。具体的に、割当装置１０１は、ノード１０２＃１とノード１０２＃２との間の距離が短く、ノード１０２＃１とノード１０２＃３との間の距離が長いということを特定する。次に、割当装置１０１は、特定した距離に基づいて、Ｒｅｄｕｃｅタスクを割当可能なノードからＲｅｄｕｃｅの処理を割り当てるノードを決定する。図１の例では、割当装置１０１は、ノード１０２＃１との距離が短いノード１０２＃２を、Ｒｅｄｕｃｅタスクを割り当てるノードに決定する。【選択図】図１
2015001828.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
通信可能なノード群の各々のノード間の距離を特定する距離情報を参照して、前記ノード群のうちの第１の処理が割り当てられたノードと、前記ノード群のうちの前記第１の処理の処理結果を処理対象とする第２の処理を割当可能なノードと、の間の距離を特定し、
特定した前記距離に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定する、
処理を実行させることを特徴とする割当プログラム。
【請求項２】
前記距離情報は、前記ノード群が属する複数のデータセンタの各々のデータセンタ間の距離を表す情報と、前記複数のデータセンタのうちの前記ノード群の各々のノードが属するデータセンタを特定する情報とを含み、
前記特定する処理は、
前記距離情報を参照して、前記複数のデータセンタのうちの前記第１の処理が割り当てられたノードが属するデータセンタと、前記複数のデータセンタのうちの前記第２の処理を割当可能なノードが属するデータセンタと、の間の距離を特定することにより、前記第１の処理が割り当てられたノードと前記第２の処理を割当可能なノードとの間の距離を特定することを特徴とする請求項１に記載の割当プログラム。
【請求項３】
前記距離情報は、さらに、前記各々のノード間の通信路に含まれるスイッチ装置の数を含み、
前記特定する処理は、
前記距離情報を参照して、前記第１の処理が割り当てられたノードが属するデータセンタと前記第２の処理を割当可能なノードが属するデータセンタとの間の距離と、前記第１の処理が割り当てられたノードと前記第２の処理を割当可能なノードとの間の通信路に含まれるスイッチ装置の数と、に基づいて、前記第１の処理が割り当てられたノードと前記第２の処理を割当可能なノードとの間の距離を特定することを特徴とする請求項２に記載の割当プログラム。
【請求項４】
前記特定する処理は、
前記第２の処理を割当可能な複数のノードがある場合、前記距離情報を参照して、前記第１の処理が割り当てられたノードと前記第２の処理を割当可能な複数のノードの各々のノードとの間の距離を特定し、
前記決定する処理は、
前記第２の処理を割当可能な複数のノードのうちの、特定した前記距離が相対的に短いノードに前記第２の処理を割り当てることを決定することを特徴とする請求項１〜３のいずれか一つに記載の割当プログラム。
【請求項５】
前記特定する処理は、
前記第１の処理が割り当てられた複数のノードがある場合、前記距離情報を参照して、前記第１の処理が割り当てられたノードの各々のノードと前記第２の処理を割当可能なノードと間の距離を特定し、
前記決定する処理は、
前記第１の処理が割り当てられた複数のノードの各々のノードに対応して特定した前記距離の合計に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定することを特徴とする請求項１〜４のいずれか一つに記載の割当プログラム。
【請求項６】
通信可能なノード群の各々のノード間の距離を特定する距離情報を参照して、前記ノード群のうちの第１の処理が割り当てられたノードと、前記ノード群のうちの前記第１の処理の処理結果を処理対象とする第２の処理を割当可能なノードと、の間の距離を特定する特定部と、
前記特定部が特定した前記距離に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定する決定部と、
を有することを特徴とする割当装置。
【請求項７】
コンピュータが、
通信可能なノード群の各々のノード間の距離を特定する距離情報を参照して、前記ノード群のうちの第１の処理が割り当てられたノードと、前記ノード群のうちの前記第１の処理の処理結果を処理対象とする第２の処理を割当可能なノードと、の間の距離を特定し、
特定した前記距離に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定する、
処理を実行することを特徴とする割当方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、割当プログラム、割当装置および割当方法に関する。
【背景技術】
【０００２】
近年、膨大なデータを処理する技術として、ＭａｐＲｅｄｕｃｅ処理という分散処理技術がある。ＭａｐＲｅｄｕｃｅは、データの処理を、Ｍａｐ処理とＭａｐ処理の処理結果を用いるＲｅｄｕｃｅ処理という２段階に分けて行う処理である。具体的に、複数のノードの各々が、蓄積されたデータを分割したデータを処理対象とするＭａｐ処理を実行する。そして、複数のノードのうちのいずれかのノードが、Ｍａｐ処理の処理結果を処理対象として、データ全体についての処理結果を取得するＲｅｄｕｃｅ処理を実行する。
【０００３】
たとえば、Ｍａｐ処理とＲｅｄｕｃｅ処理とを複数の仮想マシンに分散配置する各種の配置パターンを検出し、配置パターンごとに、実行時間、消費電力、Ｉ／Ｏ量を考慮したコストの計算結果に基づいて、コストが最小となる配置パターンを選択する技術がある。また、スレーブノードとスイッチとの間の接続関係に基づいて、複数のスイッチの各々のスイッチと直接接続するスレーブノード群で形成するグループを算出し、分散処理する複数のデータブロックを、算出したグループのうちの一つに配置する技術がある。（たとえば、下記特許文献１、２を参照。）
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−２１８３０７号公報
【特許文献２】特開２０１０−２４４４６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、Ｍａｐ処理が割り当てられたノードとＲｅｄｕｃｅ処理が割り当てられるノードとの間の距離が遠くなるにつれて、Ｍａｐ処理の処理結果の転送にかかる時間が増大することになり、分散処理にかかる時間が増大する。
【０００６】
１つの側面では、本発明は、分散処理にかかる時間の増大化を抑制できる割当プログラム、割当装置および割当方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、通信可能なノード群の各々のノード間の距離を特定する距離情報を参照して、ノード群のうちの第１の処理が割り当てられたノードと、ノード群のうちの第１の処理の処理結果を処理対象とする第２の処理を割当可能なノードと、の間の距離を特定し、特定した距離に基づいて、第２の処理を割当可能なノードから第２の処理を割り当てるノードを決定する割当プログラム、割当装置および割当方法が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、分散処理にかかる時間の増大化の抑制を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかる割当装置の動作例を示す説明図である。
【図２】図２は、分散処理システムのシステム構成例を示す説明図である。
【図３】図３は、マスタノードのハードウェア構成例を示すブロック図である。
【図４】図４は、分散処理システムのソフトウェア構成例を示す説明図である。
【図５】図５は、マスタノードの機能構成例を示すブロック図である。
【図６】図６は、本実施の形態にかかる分散処理システムによるＭａｐＲｅｄｕｃｅ処理の一例を示す説明図である。
【図７】図７は、距離関数Ｄｔの説明図である。
【図８】図８は、距離関数テーブルの記憶内容の一例を示す説明図である。
【図９】図９は、距離係数の設定例を示す説明図である。
【図１０】図１０は、距離係数テーブルの記憶内容の一例を示す説明図である。
【図１１】図１１は、Ｒｅｄｕｃｅタスクの割当先ノード決定の第１の例を示す説明図である。
【図１２】図１２は、Ｒｅｄｕｃｅタスクの割当先ノード決定の第２の例を示す説明図である。
【図１３】図１３は、ＭａｐＲｅｄｕｃｅ処理手順の一例を示すフローチャートである。
【図１４】図１４は、Ｒｅｄｕｃｅタスク割当ノード決定処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示の割当プログラム、割当装置および割当方法の実施の形態を詳細に説明する。
【００１１】
図１は、本実施の形態にかかる割当装置の動作例を示す説明図である。システム１００は、第１の処理および第２の処理を割り当てる割当装置１０１と、割当装置１０１と通信可能なノード群１０２とを含む。ノード群１０２は、システム１００内に複数台存在する。図１の例では、システム１００は、ノード群１０２としてノード１０２＃１とノード１０２＃２とノード１０２＃３を含む。割当装置１０１、ノード１０２＃１〜＃３は、ネットワーク１０３により接続される。ノード群１０２の各々のノードは、割当装置１０１により割り当てられた第１の処理および第２の処理を実行する装置である。また、割当装置１０１、ノード１０２＃１、＃２は、データセンタ１０４に含まれ、ノード１０２＃３は、データセンタ１０５に含まれる。
【００１２】
データセンタとは、情報処理と通信を行う装置や、通信を経由するスイッチ装置等の複数のリソースが設置された施設である。また、データセンタ１０４とデータセンタ１０５とは、離れた距離にあるものとする。なお、スイッチ装置を、以下、単に、「スイッチ」と呼称する。
【００１３】
以下の説明では、ｘをインデックスとし、末尾記号“＃ｘ”が付与される記号については、ｘ番目のノード１０２について説明するものとする。また、ノード１０２と表現する場合、ノード１０２全てに共通する説明を行うものとする。
【００１４】
第１の処理とは、他のノード１０２に割り当てられる第１の処理とは独立したものであり、ノード１０２に割り当てられた全ての第１の処理を並列に実行できる処理である。たとえば、第１の処理は、処理対象となる入力されたデータを用いて、他の入力されたデータを処理対象とする別の第１の処理とは独立して、ＫｅｙＶａｌｕｅの形式に従ってデータを出力する処理である。ＫｅｙＶａｌｕｅの形式となるデータとは、Ｖａｌｕｅフィールドに格納された任意の保存したい値と、Ｋｅｙフィールドに格納された保存したいデータに対応する一意の標識と、の組である。
【００１５】
第２の処理とは、第１の処理の処理結果を処理対象とする処理である。たとえば、第１の処理の処理結果が、ＫｅｙＶａｌｕｅの形式となるデータである場合、第２の処理は、第１の処理の処理結果の属性となるＫｅｙフィールドをもとに第１の処理結果を集約した１つ以上の処理結果を処理対象とする処理である。また、たとえば、第２の処理は、Ｖａｌｕｅフィールドをもとに第１の処理結果を集約した１つ以上の処理結果を処理対象とする処理であってもよい。
【００１６】
システム１００は、あるデータを処理対象として何らかの結果を得る情報処理を、第１の処理と第２の処理とをノード１０２に分散して割り当てることにより、情報処理を実行する。処理を分散して処理するソフトウェアとして、実施の形態にかかるシステム１００は、Ｈａｄｏｏｐを採用した例を用いて説明する。
【００１７】
また、Ｈａｄｏｏｐで用いられる用語を用いて、本実施の形態にかかるシステム１００を説明する。「ジョブ」は、Ｈａｄｏｏｐにおける処理単位である。たとえば、交通量を示す情報から渋滞情報を算出する処理が１つのジョブとなる。「タスク」は、ジョブが分割された処理単位である。タスクは、第１の処理であるＭａｐ処理を実行するＭａｐタスクと、第２の処理であるＲｅｄｕｃｅ処理を実行するＲｅｄｕｃｅタスクとの２種類がある。また、Ｍａｐ処理を実行した装置がＭａｐ処理の処理結果をＲｅｄｕｃｅタスクを割り当てられた装置に送信し、Ｒｅｄｕｃｅタスクを割り当てられた装置がＫｅｙフィールドをもとにＭａｐ処理の処理結果を集約するシャッフル＆ソート処理がある。
【００１８】
次に、Ｈａｄｏｏｐが構築される環境について説明する。１つのデータセンタ内にＨａｄｏｏｐを構築することが一般的であるが、複数のデータセンタを利用してＨａｄｏｏｐを構築することもできる。複数のデータセンタを利用してＨａｄｏｏｐを構築する第１の例として、予め複数のデータセンタでデータを収集した状態において、複数のデータセンタに収集されたデータ全てを用いて分散処理を行う需要が発生したとする。このとき、複数のデータセンタに収集されたデータ全てを一つのデータセンタに集約しようとしても、データの移動で時間がかかるため、複数のデータセンタを利用してＨａｄｏｏｐを構築することにより、データの集約を行わずに、分散処理を行うことができる。
【００１９】
また、複数のデータセンタを利用してＨａｄｏｏｐを構築する第２の例としては、予め複数のデータセンタでデータを収集した状態において、各データセンタにあるデータがセキュリティの関係から移動することが禁止された場合である。移動することが禁止されたデータは、たとえば、ある企業に勤める人の給与情報、個人情報等を含むデータである。このとき、Ｍａｐ処理の割当先となり得るノードの条件が、データのあるデータセンタ内のノードとなる。
【００２０】
複数のデータセンタを利用してＨａｄｏｏｐを構築した場合、シャッフル＆ソート処理において、離れたノードにＭａｐ処理の処理結果を送信する場合がある。この場合、Ｍａｐ処理の処理結果の送信にかかる時間が増加してしまい、ＭａｐＲｅｄｕｃｅ全体の時間が増加する。
【００２１】
そこで、割当装置１０１は、各地に点在するノード群１０２から、Ｍａｐタスク１１１が割り当てられたノード１０２との距離の近いノードを、Ｒｅｄｕｃｅタスクを割り当てるノード１０２として決定する。これにより、割当装置１０１は、Ｍａｐタスク１１１の処理結果が遠隔地にあるノード１０２に転送され難くなり、分散処理にかかる時間の増大化を抑制する。
【００２２】
割当装置１０１は、距離情報１１０を参照して、ノード群１０２のうちのＭａｐタスク１１１が割り当てられたノードと、ノード群１０２のうちのＲｅｄｕｃｅタスクを割当可能なノードと、の間の距離を特定する。図１の例において、Ｒｅｄｕｃｅタスクを割当可能なノードは、ノード１０２＃２とノード１０２＃３とであるとする。図１中、点線で示すブロックは、Ｒｅｄｕｃｅタスクが割当可能であることを示す。なお、ノード１０２がＲｅｄｕｃｅタスクを割当可能であることを割当装置１０１に伝達するために、Ｒｅｄｕｃｅタスクが割当可能であるノード１０２は、Ｒｅｄｕｃｅタスクが割当可能であることを示すＲｅｄｕｃｅタスク割当要求を割当装置１０１に送信する。
【００２３】
距離情報１１０は、ノード群１０２の各々のノード間の距離を特定する情報である。距離情報１１０は、ノード間の距離として、ノード間の実際の距離でもよいし、ノード間の距離を表す度合でもよい。距離情報１１０の具体的な説明は、図５で後述する。たとえば、距離情報１１０は、ノード１０２＃１とノード１０２＃２との間の距離が短く、ノード１０２＃１とノード１０２＃３との間の距離が、データセンタ１０４とデータセンタ１０５とが離れているため、長いことを示す。距離情報１１０が前述の例である場合、割当装置１０１は、ノード１０２＃１とノード１０２＃２との間の距離が短く、ノード１０２＃１とノード１０２＃３との間の距離が長いということを特定する。
【００２４】
次に、割当装置１０１は、特定した距離に基づいて、Ｒｅｄｕｃｅタスクを割当可能なノードからＲｅｄｕｃｅの処理を割り当てるノードを決定する。図１の例では、割当装置１０１は、ノード１０２＃１との距離が短いノード１０２＃２を、Ｒｅｄｕｃｅタスクを割り当てるノードに決定する。そして、割当装置１０１は、決定結果に従い、Ｒｅｄｕｃｅタスクをノード１０２＃２に割り当てる。
【００２５】
（分散処理システムのシステム構成例）
次に、図１に示したシステム１００を分散処理システムに適用した場合について、図２〜図１４を用いて説明する。
【００２６】
図２は、分散処理システムのシステム構成例を示す説明図である。図２に示す分散処理システム２００は、地理的に離れた広域分散クラスタを用いて、データを分散させてＭａｐＲｅｄｕｃｅ処理を実行するシステムである。具体的に、分散処理システム２００は、スイッチＳｗ＿ｓと、複数のデータセンタとしてデータセンタＤ１およびデータセンタＤ２と、を有する。データセンタＤ１と、データセンタＤ２とは、地理的に離れた位置にある。データセンタＤ１と、データセンタＤ２とはスイッチＳｗ＿ｓにより接続される。
【００２７】
データセンタＤ１は、スイッチＳｗ＿ｄ１と、２個のラックとを含む。以下、データセンタＤ１に含まれる２個のラックをそれぞれ、「ラックＤ１／Ｒ１」、「ラックＤ１／Ｒ２」と称する。ラックＤ１／Ｒ１とラックＤ１／Ｒ２は、スイッチＳｗ＿ｄ１により接続される。
【００２８】
ラックＤ１／Ｒ１は、スイッチＳｗ＿ｄ１ｒ１と、マスタノードＭｓと、ｎ＿ｄ１ｒ１個のスレーブノードを含む。ｎ＿ｄ１ｒ１は、正の整数である。以下、ラックＤ１／Ｒ１に含まれるスレーブノードをそれぞれ、「スレーブノードＤ１／Ｒ１／Ｓｌ＃１」、…、「スレーブノードＤ１／Ｒ１／Ｓｌ＃ｎ＿ｄ１ｒ１」と称する。マスタノードＭｓ、スレーブノードＤ１／Ｒ１／Ｓｌ＃１、…、スレーブノードＤ１／Ｒ１／Ｓｌ＃ｎ＿ｄ１ｒ１は、スイッチＳｗ＿ｄ１ｒ１により接続される。
【００２９】
ラックＤ１／Ｒ２は、スイッチＳｗ＿ｄ１ｒ２と、ｎ＿ｄ１ｒ２個のスレーブノードを含む。ｎ＿ｄ１ｒ２は、正の整数である。以下、ラックＤ１／Ｒ２に含まれるスレーブノードをそれぞれ、「スレーブノードＤ１／Ｒ２／Ｓｌ＃１」、…、「スレーブノードＤ１／Ｒ２／Ｓｌ＃ｎ＿ｄ１ｒ２」と称する。スレーブノードＤ１／Ｒ２／Ｓｌ＃１、…、スレーブノードＤ１／Ｒ２／Ｓｌ＃ｎ＿ｄ１ｒ２は、スイッチＳｗ＿ｄ１ｒ２により接続される。
【００３０】
データセンタＤ２は、スイッチＳｗ＿ｄ２と、２個のラックを含む。以下、データセンタＤ２に含まれる２個のラックをそれぞれ、「ラックＤ２／Ｒ１」、「ラックＤ２／Ｒ２」と称する。ラックＤ２／Ｒ１とラックＤ２／Ｒ２は、スイッチＳｗ＿ｄ２により接続される。
【００３１】
ラックＤ２／Ｒ１は、スイッチＳｗ＿ｄ２ｒ１と、ｎ＿ｄ２ｒ１個のスレーブノードを含む。ｎ＿ｄ２ｒ１は、正の整数である。以下、ラックＤ２／Ｒ１に含まれるスレーブノードをそれぞれ、「スレーブノードＤ２／Ｒ１／Ｓｌ＃１」、…、「スレーブノードＤ２／Ｒ１／Ｓｌ＃ｎ＿ｄ２ｒ１」と称する。スレーブノードＤ２／Ｒ１／Ｓｌ＃１、…、スレーブノードＤ２／Ｒ１／Ｓｌ＃ｎ＿ｄ２ｒ１は、スイッチＳｗ＿ｄ２ｒ１により接続される。
【００３２】
ラックＤ２／Ｒ２は、スイッチＳｗ＿ｄ２ｒ２と、ｎ＿ｄ２ｒ２個のスレーブノードを含む。ｎ＿ｄ２ｒ２は、正の整数である。以下、ラックＤ２／Ｒ２に含まれるスレーブノードをそれぞれ、「スレーブノードＤ２／Ｒ２／Ｓｌ＃１」、…、「スレーブノードＤ２／Ｒ２／Ｓｌ＃ｎ＿ｄ２ｒ２」と称する。スレーブノードＤ２／Ｒ２／Ｓｌ＃１、…、スレーブノードＤ２／Ｒ２／Ｓｌ＃ｎ＿ｄ２ｒ２は、スイッチＳｗ＿ｄ２ｒ２により接続される。
【００３３】
以下、全てのデータセンタ、全てのラックに含まれるスレーブノードのいずれかについて言及する際は、スレーブノードＳｌと称する。また、分散処理システム２００内には、スレーブノードがｎ台あるとする。ｎは、正の整数であり、ｎ＝ｎ＿ｄ１ｒ１＋ｎ＿ｄ１ｒ２＋ｎ＿ｄ２ｒ１＋ｎ＿ｄ２ｒ２という関係を有する。さらに、ｎを用いて、分散処理システム２００内に含まれるスレーブノード群を、スレーブノード群Ｓｌｎと称することがある。また、スレーブノードＳｌ＃１〜＃ｎと、マスタノードＭｓとを総称して、単に、「ノード」と称することもある。
【００３４】
ここで、図１との対応関係を説明する。マスタノードＭｓは、図１で説明した割当装置１０１に相当する。スレーブノードＳｌは、図１で説明したノード１０２に相当する。スイッチＳｗ＿ｓ、Ｓｗ＿ｄ１、Ｓｗ＿ｄ２、Ｓｗ＿ｄ１ｒ１、Ｓｗ＿ｄ１ｒ２、Ｓｗ＿ｄ２ｒ１、Ｓｗ＿ｄ２ｒ２は、図１で説明したネットワーク１０３に相当する。データセンタＤ１と、データセンタＤ２とは、図１で説明したデータセンタ１０４、１０５に相当する。
【００３５】
マスタノードＭｓは、Ｍａｐ処理とＲｅｄｕｃｅ処理とをスレーブノードＳｌ＃１〜＃ｎに割り当てる装置である。また、マスタノードＭｓは、スレーブノードＳｌ＃１〜＃ｎのホスト名一覧を記述した設定ファイルを有する。スレーブノードＳｌ＃１〜＃ｎは、割り当てられたＭａｐ処理と、Ｒｅｄｕｃｅ処理とを実行する装置である。
【００３６】
（マスタノードＭｓのハードウェア）
図３は、マスタノードのハードウェア構成例を示すブロック図である。図３において、マスタノードＭｓは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、を含む。また、マスタノードＭｓは、磁気ディスクドライブ３０４と、磁気ディスク３０５と、ＩＦ（Ｉｎｔｅｒｆａｃｅ）３０６と、を含む。また、各部はバス３０７によってそれぞれ接続される。
【００３７】
ＣＰＵ３０１は、マスタノードＭｓの全体の制御を司る演算処理装置である。ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される揮発性メモリである。磁気ディスクドライブ３０４は、ＣＰＵ３０１の制御に従って磁気ディスク３０５に対するデータのリード／ライトを制御する制御装置である。磁気ディスク３０５は、磁気ディスクドライブ３０４の制御で書き込まれたデータを記憶する不揮発性メモリである。また、マスタノードＭｓは、ソリッドステートドライブを有してもよい。
【００３８】
ＩＦ３０６は、通信回線を通じて、ネットワーク３０８を介し、スイッチＳｗ＿ｄ１ｒ１等の他の装置に接続される。そして、ＩＦ３０６は、ネットワーク３０８と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。ＩＦ３０６には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３９】
なお、マスタノードＭｓの管理者がマスタノードＭｓを直接操作する場合、図３には図示していないが、マスタノードＭｓは、光ディスクドライブと、光ディスクと、ディスプレイと、マウスと、を有してもよい。
【００４０】
光ディスクドライブは、ＣＰＵ３０１の制御に従って光ディスクに対するデータのリード／ライトを制御する制御装置である。光ディスクは、光ディスクドライブの制御で書き込まれたデータを記憶したり、光ディスクに記憶されたデータをコンピュータに読み取らせたりする。
【００４１】
ディスプレイは、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。たとえば、ディスプレイは、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００４２】
キーボードは、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボードは、タッチパネル式の入力パッドやテンキーなどであってもよい。マウスは、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。また、マスタノードＭｓは、マウスの代わりとして、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
【００４３】
また、スレーブノードＳｌは、ＣＰＵと、ＲＯＭと、ＲＡＭと、磁気ディスクドライブと、磁気ディスクと、を有する。
【００４４】
図４は、分散処理システムのソフトウェア構成例を示す説明図である。分散処理システム２００は、マスタノードＭｓと、スレーブノードＳｌ＃１〜＃ｎと、ジョブクライアント４０１と、ＨＤＦＳ（Ｈａｄｏｏｐ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）クライアント４０２とを含む。マスタノードＭｓと、スレーブノードＳｌ＃１〜＃ｎとを含めてＨａｄｏｏｐクラスタ４００として定義する。Ｈａｄｏｏｐクラスタ４００は、ジョブクライアント４０１と、ＨＤＦＳクライアント４０２を含めてもよい。
【００４５】
ジョブクライアント４０１は、ＭａｐＲｅｄｕｃｅ処理の処理対象となるファイルと、実行可能ファイルとなるプログラムと、実行ファイルの設定ファイルとを記憶しており、ジョブの実行要求をマスタノードＭｓに通知する装置である。
【００４６】
ＨＤＦＳクライアント４０２は、Ｈａｄｏｏｐ独自のファイルシステムである、ＨＤＦＳのファイル操作を行う端末である。
【００４７】
マスタノードＭｓは、ジョブトラッカー４１１と、ジョブスケジューラ４１２と、ネームノード４１３と、ＨＤＦＳ４１４と、メタデータテーブル４１５とを有する。スレーブノードＳｌ＃ｘは、タスクトラッカー４２１＃ｘと、データノード４２２＃ｘと、ＨＤＦＳ４２３＃ｘと、Ｍａｐタスク４２４＃ｘと、Ｒｅｄｕｃｅタスク４２５＃ｘとを有する。ｘは、１からｎまでの整数である。ジョブクライアント４０１は、ＭａｐＲｅｄｕｃｅプログラム４３１と、ＪｏｂＣｏｎｆ４３２とを、有する。ＨＤＦＳクライアント４０２は、ＨＤＦＳクライアントアプリケーション４４１と、ＨＤＦＳ  ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）４４２と、を有する。
【００４８】
Ｈａｄｏｏｐは、ＨＤＦＳ以外のファイルシステムが採用されてもよい。たとえば、分散処理システム２００は、マスタノードＭｓとスレーブノードＳｌ＃１〜＃ｎが、ＦＴＰ（Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）によりアクセス可能なファイルサーバを採用してもよい。
【００４９】
ジョブトラッカー４１１は、実行すべきジョブをジョブクライアント４０１から受け付ける。続けて、ジョブトラッカー４１１は、クラスタ中の利用可能なタスクトラッカー４２１に、Ｍａｐタスク４２４、Ｒｅｄｕｃｅタスク４２５を割り当てる。ジョブスケジューラ４１２は、次に実行するジョブを決定する。具体的に、ジョブスケジューラ４１２は、ジョブクライアント４０１から要求された複数のジョブのうち、次に実行するジョブを決定する。また、ジョブスケジューラ４１２は、決定したジョブに対して、スプリットが入力される都度、Ｍａｐタスク４２４を生成する。また、ジョブトラッカー４１１は、各タスクトラッカー４２１を識別するタスクトラッカーＩＤを記憶する。
【００５０】
ネームノード４１３は、Ｈａｄｏｏｐクラスタ４００内のファイルの記憶先を制御する。たとえば、ネームノード４１３は、入力されたファイルが、ＨＤＦＳ４１４、ＨＤＦＳ４２３＃１〜＃ｎのどこに記憶されるかを決定し、決定されたＨＤＦＳにファイルを送信する。
【００５１】
ＨＤＦＳ４１４、ＨＤＦＳ４２３＃１〜＃ｎは、ファイルを分散して記憶する記憶領域である。具体的に、ＨＤＦＳ４２３＃１〜＃ｎは、ファイルを物理的な区切りで分割したブロック単位で記憶する。メタデータテーブル４１５は、ＨＤＦＳ４１４、ＨＤＦＳ４２３＃１〜＃ｎに記憶するファイルの位置を記憶する記憶領域である。
【００５２】
タスクトラッカー４２１は、ジョブトラッカー４１１から割り当てられたＭａｐタスク４２４やＲｅｄｕｃｅタスク４２５を、自装置に実行させる。また、タスクトラッカー４２１は、Ｍａｐタスク４２４やＲｅｄｕｃｅタスク４２５の進捗状況や処理の完了報告をジョブトラッカー４１１に通知する。また、タスクトラッカー４２１は、マスタノードＭｓにある、スレーブノードＳｌ＃１〜＃ｎのホスト名一覧を記述した設定ファイルが読み込まれた際に、起動要求を受ける。そして、タスクトラッカー４２１は、スレーブノードＳｌのホスト名に対応しており、マスタノードＭｓよりタスクトラッカーＩＤを受け付ける。
【００５３】
データノード４２２は、スレーブノードＳｌ内のＨＤＦＳ４２３を制御する。Ｍａｐタスク４２４は、Ｍａｐ処理を実行する。Ｒｅｄｕｃｅタスク４２５は、Ｒｅｄｕｃｅ処理を実行する。また、スレーブノードＳｌは、Ｒｅｄｕｃｅ処理を行う前段階として、シャッフル＆ソート処理を実行する。シャッフル＆ソート処理は、Ｍａｐ処理の結果を集約する処理を行う。具体的に、シャッフル＆ソート処理は、Ｍａｐ処理の結果をＫｅｙごとに並び替え、同一のＫｅｙとなったＶａｌｕｅを纏めて、Ｒｅｄｕｃｅタスク４２５に出力する。
【００５４】
ＭａｐＲｅｄｕｃｅプログラム４３１は、Ｍａｐ処理を実行するプログラムと、Ｒｅｄｕｃｅ処理を実行するプログラムとを含むプログラムである。ＪｏｂＣｏｎｆ４３２は、ＭａｐＲｅｄｕｃｅプログラム４３１の設定を記述したプログラムである。設定の例としては、Ｍａｐタスク４２４の生成数や、Ｒｅｄｕｃｅタスク４２５の生成数や、ＭａｐＲｅｄｕｃｅ処理の処理結果の出力先等である。
【００５５】
ＨＤＦＳクライアントアプリケーション４４１は、ＨＤＦＳを操作するアプリケーションである。ＨＤＦＳ  ＡＰＩ４４２は、ＨＤＦＳにアクセスするＡＰＩである。ＨＤＦＳ  ＡＰＩ４４２は、たとえば、ＨＤＦＳクライアントアプリケーション４４１からファイルのアクセス要求があった場合、データノード４２２に、ファイルを保持しているか否かを問い合わせる。
【００５６】
（マスタノードＭｓの機能）
次に、マスタノードＭｓの機能について説明する。図５は、マスタノードの機能構成例を示すブロック図である。マスタノードＭｓは、特定部５０１と、決定部５０２と、を含む。制御部となる特定部５０１、決定部５０２は、記憶装置に記憶されたプログラムをＣＰＵ３０１が実行することにより、特定部５０１、決定部５０２の機能を実現する。記憶装置とは、具体的には、たとえば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、磁気ディスク３０５などである。または、ＩＦ３０６を経由して他のＣＰＵが実行することにより、特定部５０１、決定部５０２の機能を実現してもよい。
【００５７】
また、マスタノードＭｓは、距離情報１１０にアクセス可能である。距離情報１１０は、ＲＡＭ３０３、磁気ディスク３０５といった記憶装置に格納される。距離情報１１０は、スレーブノード群Ｓｌｎの各々のノード間の距離を特定する情報である。また、距離情報１１０は、スレーブノード群Ｓｌｎが属するデータセンタ間の距離を表す情報を記憶する距離係数テーブルｄα＿ｔと、スレーブノード群Ｓｌｎの各々のノードが属するデータセンタを特定するノード情報Ｎｉとを含めてもよい。さらに、距離情報１１０は、各々のノード間の伝送路に含まれるスイッチの数を含めた値を記憶する距離関数テーブルｄｔ＿ｔを含めてもよい。
【００５８】
たとえば、ノード情報Ｎｉは、スレーブノードＤ１／Ｒ１／Ｓｌ＃１、…、スレーブノードＤ１／Ｒ２／Ｓｌ＃ｎ＿ｄ１ｒ２がデータセンタＤ１に属することを記憶する。さらに、ノード情報Ｎｉは、スレーブノードＤ２／Ｒ１／Ｓｌ＃１、…、スレーブＤ２／Ｒ２／Ｓｌ＃ｎ＿ｄ２ｒ２がデータセンタＤ２に属することを記憶する。また、ノード情報Ｎｉは、スレーブノードＳｌが、どのラックに属するかを記憶する。また、ノード情報Ｎｉは、図２で説明した設定ファイルでもよい。
【００５９】
ノード情報Ｎｉの記憶内容の一例として、図２で説明した設定ファイルであるとき、ノード情報Ｎｉは、スレーブノードＤ１／Ｒ１／Ｓｌ＃１、…、スレーブノードＤ１／Ｒ２／Ｓｌ＃ｎ＿ｄ１ｒ２のそれぞれのホスト名である。スレーブノードＳｌのホスト名が“Ｄ１／Ｒ１／Ｓｌ＃１”というようにデータセンタの識別情報を含んでいれば、マスタノードＭｓは、あるスレーブノードＳｌがどのデータセンタに属するスレーブノードＳｌかを特定することができる。
【００６０】
また、ノード情報Ｎｉの記憶内容の他の例として、ノード情報Ｎｉは、スレーブノードＤ１／Ｒ１／Ｓｌ＃１、…、スレーブノードＤ１／Ｒ２／Ｓｌ＃ｎ＿ｄ１ｒ２のそれぞれのホスト名と、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスとを対応付けている。そして、分散処理システム２００の管理者等により、スレーブノードＳｌに割り当てるＩＰアドレスが、データセンタごとにサブネットワークに分割して割り振られたものとする。たとえば、データセンタＤ１に属するスレーブノードＳｌに割り振るＩＰアドレスが、１９２．１６８．０．Ｘであり、データセンタＤ２に属するスレーブノードＳｌに割り振るＩＰアドレスが１９２．１６８．１．Ｘであるとする。マスタノードＭｓは、あるスレーブノードＳｌのＩＰアドレスの上位２４ビットを参照することにより、あるスレーブノードＳｌがどのデータセンタに属するスレーブノードＳｌかを特定することができる。
【００６１】
距離関数テーブルｄｔ＿ｔは、各々のスレーブノードＳｌ間の伝送路に含まれるスイッチの数に加え、通信相手となる装置の数を加えてもよい。距離関数テーブルｄｔ＿ｔの記憶内容は、図８で後述する。距離係数テーブルｄα＿ｔの記憶内容は、図１０で後述する。
【００６２】
特定部５０１は、距離情報１１０を参照して、スレーブノード群ＳｌｎのうちのＭａｐタスク４２４が割り当てられたスレーブノードＳｌと、スレーブノード群ＳｌｎのうちのＲｅｄｕｃｅタスク４２５を割当可能なスレーブノードＳｌと、の間の距離を特定する。以下、図５の説明において、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌを、「スレーブノードＳｌ＿Ｍ」と称し、Ｒｅｄｕｃｅタスク４２５を割当可能なスレーブノードＳｌを、「スレーブノードＳｌ＿Ｒ」と称する。
【００６３】
たとえば、スレーブノードＤ１／Ｒ１／Ｓｌ＃１がスレーブノードＳｌ＿Ｍとなり、スレーブノードＤ１／Ｒ１／Ｓｌ＃２がスレーブノードＳｌ＿Ｒとなったとする。さらに、距離情報１１０が、スレーブノードＤ１／Ｒ１／Ｓｌ＃１とスレーブノードＤ１／Ｒ１／Ｓｌ＃２との間の距離の度合が１であるという情報であるとする。このとき、特定部５０１は、スレーブノードＤ１／Ｒ１／Ｓｌ＃１とスレーブノードＤ１／Ｒ１／Ｓｌ＃２との間の距離が１であると特定する。
【００６４】
また、特定部５０１は、ノード情報Ｎｉを参照して、複数のデータセンタのうちのスレーブノードＳｌ＿Ｍが属するデータセンタと、スレーブノードＳｌ＿Ｒが属するデータセンタとをそれぞれ特定する。そして、特定部５０１は、距離係数テーブルｄα＿ｔを参照して、スレーブノードＳｌ＿Ｍが属するデータセンタとスレーブノードＳｌ＿Ｒが属するデータセンタとの間の距離を特定する。特定部５０１は、データセンタ間の距離を特定することにより、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒとの間の距離を特定してもよい。
【００６５】
たとえば、ノード情報Ｎｉが、スレーブノードＳｌ＿Ｍが属するデータセンタがデータセンタＤ１であり、スレーブノードＳｌ＿Ｒが属するデータセンタがデータセンタＤ２であることを示すとする。さらに、距離係数テーブルｄα＿ｔが、データセンタＤ１とデータセンタＤ２との間の距離の度合として、１００を示すとする。このとき、特定部５０１は、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒとの間の距離を、１００であると特定する。
【００６６】
また、特定部５０１は、距離関数テーブルｄｔ＿ｔを参照して、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒとの間の伝送路に含まれるスイッチの数を特定する。そして、特定部５０１は、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒとがそれぞれ属するデータセンタ間の距離と、特定したスイッチの数と、に基づいて、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒとの間の距離を特定してもよい。
【００６７】
特定部５０１は、図７で示す距離関数Ｄｔを用いて、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒとの間の距離を特定する。また、たとえば、距離関数テーブルｄｔ＿ｔが、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒとの間の伝送路に含まれるスイッチの数として「３」を示すとする。そして、データセンタ内のスイッチ間の距離の度合の平均値が２０であったとする。２０という値は、予め分散処理システム２００の管理者によって設定される値である。さらに、距離係数テーブルｄα＿ｔが、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒとがそれぞれ属するデータセンタ間の距離の度合として、１００を示すとする。このとき、特定部５０１は、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒとの間の距離を、３×２０＋１００＝１６０として特定する。
【００６８】
また、特定部５０１は、Ｒｅｄｕｃｅタスク４２５を割当可能な複数のスレーブノードＳｌがある場合、距離情報１１０を参照して、スレーブノードＳｌ＿ＭとＲｅｄｕｃｅタスク４２５を割当可能な複数のノードの各々のノードとの間の距離を特定してもよい。たとえば、Ｒｅｄｕｃｅタスク４２５を割当可能なスレーブノードＳｌが２台あり、それぞれを、スレーブノードＳｌ＿Ｒ１、スレーブノードＳｌ＿Ｒ２とする。このとき、特定部５０１は、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒ１との間の距離と、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒ２との間の距離とを特定する。
【００６９】
また、特定部５０１は、Ｍａｐタスク４２４が割り当てられた複数のスレーブノードＳｌがある場合、距離情報１１０を参照して、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌの各々とスレーブノードＳｌ＿Ｒとの間の距離を特定してもよい。たとえば、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌが２台あり、それぞれを、スレーブノードＳｌ＿Ｍ１、スレーブノードＳｌ＿Ｍ２とする。このとき、特定部５０１は、スレーブノードＳｌ＿Ｍ１とスレーブノードＳｌ＿Ｒとの間の距離と、スレーブノードＳｌ＿Ｍ２とスレーブノードＳｌ＿Ｒとの間の距離とを特定する。なお、特定したデータは、ＲＡＭ３０３、磁気ディスク３０５などの記憶領域に記憶される。
【００７０】
決定部５０２は、特定部５０１が特定した距離に基づいて、スレーブノードＳｌ＿ＭからＲｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌを決定する。たとえば、決定部５０２は、Ｒｅｄｕｃｅタスク４２５を割当可能なスレーブノードＳｌが１台であり、特定部５０１が特定した距離が所定の閾値以下ならば、該当のスレーブノードＳｌをＲｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌとして決定する。所定の閾値は、たとえば、分散処理システム２００の管理者が指定した値である。
【００７１】
また、Ｒｅｄｕｃｅタスク４２５を割当可能な複数のスレーブノードＳｌがあるとする。このとき、決定部５０２は、Ｒｅｄｕｃｅタスク４２５を割当可能な複数のスレーブノードＳｌのうちの、特定部５０１が特定した距離が相対的に短いスレーブノードＳｌにＲｅｄｕｃｅタスク４２５を割り当てることを決定してもよい。なお、Ｒｅｄｕｃｅタスク４２５を割当可能な複数のスレーブノードＳｌがあることを検出する例として、マスタノードＭｓは、スレーブノードＳｌから受信するＲｅｄｕｃｅタスク割当要求を記憶するバッファを有する。
【００７２】
たとえば、Ｒｅｄｕｃｅタスク４２５を割当可能なスレーブノードＳｌが２台あり、それぞれを、スレーブノードＳｌ＿Ｒ１、スレーブノードＳｌ＿Ｒ２とする。このとき、特定部５０１が、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒ１との間の距離を１０、スレーブノードＳｌ＿ＭとスレーブノードＳｌ＿Ｒ２との間の距離を１２と特定したとする。そして、決定部５０２は、スレーブノードＳｌ＿Ｒ１とスレーブノードＳｌ＿Ｒ２とのうち、特定部５０１が特定した距離が相対的に短いスレーブノードＳｌ＿Ｒ１を、Ｒｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌとして決定する。
【００７３】
また、Ｍａｐタスク４２４が割り当てられた複数のスレーブノードＳｌがあるとする。このとき、決定部５０２は、Ｍａｐタスク４２４が割り当てられた複数のスレーブノードＳｌの各々のスレーブノードＳｌに対応して特定した距離の合計に基づいて、スレーブノードＳｌ＿ＲからＲｅｄｕｃｅタスク４２５を割り当てるノードを決定してもよい。
【００７４】
たとえば、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌが２台あり、それぞれを、スレーブノードＳｌ＿Ｍ１、スレーブノードＳｌ＿Ｍ２とする。このとき、特定部５０１は、スレーブノードＳｌ＿Ｍ１とスレーブノードＳｌ＿Ｒとの間の距離を１０、スレーブノードＳｌ＿Ｍ２とスレーブノードＳｌ＿Ｒとの間の距離を１２として特定する。そして、決定部５０２は、距離を合計した値１０＋１２＝２２がＭａｐタスク４２４が割り当てられたスレーブノードＳｌの台数×所定の閾値以下であれば、スレーブノードＳｌ＿ＲをＲｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌとして決定する。
【００７５】
また、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌが複数あり、かつ、Ｒｅｄｕｃｅタスク４２５を割当可能な複数のスレーブノードＳｌがあるとする。このとき、決定部５０２は、Ｍａｐタスク４２４が割り当てられた複数のスレーブノードＳｌの各々のスレーブノードＳｌに対応して特定した距離の合計を、Ｒｅｄｕｃｅタスク４２５を割当可能な複数のスレーブノードＳｌのスレーブノードＳｌごとに算出する。そして、決定部５０２は、算出した距離の合計が相対的に短いスレーブノードＳｌを、Ｒｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌとして決定してもよい。なお、決定した際のスレーブノードＳｌを特定する識別情報が、ＲＡＭ３０３、磁気ディスク３０５などの記憶領域に記憶される。
【００７６】
図６は、本実施の形態にかかる分散処理システムによるＭａｐＲｅｄｕｃｅ処理の一例を示す説明図である。図６では、ＭａｐＲｅｄｕｃｅプログラム４３１が、処理対象となるファイルの中に出現する単語の個数を数えるｗｏｒｄｃｏｕｎｔである例について説明する。ｗｏｒｄｃｏｕｎｔにおけるＭａｐ処理は、ファイルが分割されたスプリットから、出現した単語の個数を単語ごとに数える処理である。ｗｏｒｄｃｏｕｎｔにおけるＲｅｄｕｃｅ処理は、単語ごとの出現した単語の個数を合計する処理である。
【００７７】
マスタノードＭｓは、スレーブノードＳｌ＃１〜＃ｎのうちの、スレーブノードＳｌ＃ｍ＿１〜＃ｍ＿ｎに、Ｍａｐ処理やＲｅｄｕｃｅ処理を割り当てる。具体的に、ジョブトラッカー４１１は、スレーブノードＳｌ＃１〜＃ｎからのハートビートによるタスク割当要求を受信して、スプリットが存在するスレーブノードＳｌにＭａｐタスク４２４を割り当てる。また、ジョブトラッカー４１１は、スレーブノードＳｌ＃１〜＃ｎからのハートビートによるタスク割当要求を受信して、本実施の形態にかかる割当処理の結果に従って、Ｒｅｄｕｃｅタスク４２５を割り当てる。Ｒｅｄｕｃｅタスクの割当処理については、図１１と図１２とで説明する。図６の例では、ジョブトラッカー４１１は、スレーブノードＳｌ＃ｒ１、スレーブノードＳｌ＃ｒ２にＲｅｄｕｃｅタスク４２５を割り当てる。
【００７８】
スレーブノードＳｌからのハートビートには、タスクトラッカーＩＤと、割当可能なＭａｐタスク４２４の最大数と、割当可能なＲｅｄｕｃｅタスク４２５の最大数と、タスク用の空きスロット数と、いう４つの情報が格納される。タスクトラッカーＩＤとは、図４で説明した、ハートビートの送信元となるスレーブノードＳｌのタスクトラッカー４２１を識別する情報である。マスタノードＭｓは、タスクトラッカーＩＤからスレーブノードＳｌのホスト名が判断できるため、タスクトラッカーＩＤからスレーブノードＳｌが属するラック、データセンタを特定することができる。
【００７９】
割当可能なＭａｐタスク４２４の最大数は、ハートビートの送信元となるスレーブノードＳｌが現在割当可能なＭａｐタスク４２４の最大数である。割当可能なＲｅｄｕｃｅタスク４２５の最大数は、ハートビートの送信元となるスレーブノードＳｌが現在割当可能なＲｅｄｕｃｅタスク４２５の最大数である。タスク用の空きスロット数は、ハートビートの送信元となるスレーブノードＳｌにタスクが割当可能な数である。
【００８０】
Ｍａｐ処理が割り当てられたスレーブノードＳｌ＃ｍ＿１〜＃ｍ＿ｎは、Ｍａｐ処理として、スプリットから、出現した単語の個数を単語ごとに数える。たとえば、スレーブノードＳｌ＃ｍ＿１は、Ｍａｐ処理として、あるスプリットに、“Ａｐｐｌｅ”という単語の出現回数が１回であり、“Ｉｓ”という単語の出現回数が３回であると数える。そして、スレーブノードＳｌ＃ｍ＿１は、Ｍａｐ処理の処理結果として、（Ａｐｐｌｅ，１）、（Ｉｓ，３）を出力する。
【００８１】
次に、Ｍａｐ処理が割り当てられたスレーブノードＳｌ＃ｍ＿１〜＃ｍ＿ｎは、シャッフル＆ソート処理として、Ｍａｐ処理の処理結果をソートする。そして、スレーブノードＳｌ＃ｍ＿１〜＃ｍ＿ｎは、Ｒｅｄｕｃｅタスクが割り当てられたスレーブノードＳｌ＃ｒ１、＃ｒ２に、ソートしたＭａｐ処理の処理結果を送信する。たとえば、スレーブノードＳｌ＃ｍ＿１は、（Ａｐｐｌｅ，１）をスレーブノードＳｌ＃ｒ１に送信するとともに、（Ｉｓ，３）をスレーブノードＳｌ＃ｒ２に送信する。
【００８２】
ソートしたＭａｐ処理の処理結果を受信した、スレーブノードＳｌ＃ｒ１、＃ｒ２は、ソートしたＭａｐ処理の処理結果をＫｅｙごとにマージする。たとえば、スレーブノードＳｌ＃ｒ１は、Ｋｅｙ：Ａｐｐｌｅについて、スレーブノードＳｌ＃ｍ＿１、＃ｍ＿２からそれぞれ受信した（Ａｐｐｌｅ，１）と（Ａｐｐｌｅ，２）とをマージして、（Ａｐｐｌｅ，［１，２］）を出力する。さらに、スレーブノードＳｌ＃ｒ１は、Ｋｅｙ：Ｈｅｌｌｏについて、受信した（Ｈｅｌｌｏ，４）、（Ｈｅｌｌｏ，３）、…、（Ｈｅｌｌｏ，１０００）をマージして、（Ｈｅｌｌｏ，［４，３，…，１０００］）を出力する。
【００８３】
ソートしたＭａｐ処理の処理結果をＫｅｙごとにマージしたスレーブノードＳｌ＃ｒ１、＃ｒ２は、マージした結果をＲｅｄｕｃｅタスク４２５へ入力する。たとえば、スレーブノードＳｌ＃ｒ１は、（Ａｐｐｌｅ，［１，２］）と（Ｈｅｌｌｏ，［４，３，…，１０００］）とをＲｅｄｕｃｅタスク４２５へ入力する。
【００８４】
図７は、距離関数Ｄｔの説明図である。距離関数Ｄｔは、下記（１）式により求められる。
【００８５】
Ｄｔ（ｘ，ｙ）＝ｄｔ（ｘ，ｙ）＋ｄα（ｘ，ｙ）  …（１）
【００８６】
ｘは、Ｍａｐ処理が割り当てられたスレーブノードＳｌのＩＤである。ｙは、Ｒｅｄｕｃｅ処理を割り当てることが可能なスレーブノードＳｌのＩＤである。ｄｔ（ｘ，ｙ）は、スレーブノードＳｌ＃ｘとスレーブノードＳｌ＃ｙとの相対的な位置関係を示す値を求める距離関数である。より詳細には、距離関数ｄｔ（ｘ，ｙ）は、スレーブノードＳｌ＃ｘからスレーブノードＳｌ＃ｙまでデータを送信する際に、スイッチまたはノードにデータが到達する回数である。具体的に、距離関数ｄｔは、距離関数テーブルｄｔ＿ｔを参照して値を出力する。距離関数テーブルｄｔ＿ｔの記憶内容の一例については、図８で後述する。
【００８７】
ｄα（ｘ，ｙ）は、スレーブノードＳｌ＃ｘとスレーブノードＳｌ＃ｙとの物理的な距離を表す度合である距離係数である。距離係数は、距離係数テーブルｄα＿ｔを参照して決定される。距離係数の設定例について図９を用いて説明する。また、距離係数テーブルｄα＿ｔの記憶内容の一例について、図１０で後述する。
【００８８】
たとえば、マスタノードＭｓは、スレーブノードＤ１／Ｒ１／Ｓｌ＃１と、スレーブノードＤ１／Ｒ１／Ｓｌ＃ｎ＿ｄ１ｒ１の距離を（１）式を用いて下記のように算出する。
【００８９】
Ｄｔ（Ｄ１／Ｒ１／Ｓｌ＃１，Ｄ１／Ｒ１／Ｓｌ＃ｎ＿ｄ１ｒ１）＝ｄｔ（Ｄ１／Ｒ１／Ｓｌ＃１，Ｄ１／Ｒ１／Ｓｌ＃ｎ＿ｄ１ｒ１）＋ｄα（Ｄ１／Ｒ１／Ｓｌ＃１，Ｄ１／Ｒ１／Ｓｌ＃ｎ＿ｄ１ｒ１）＝２＋０＝２
【００９０】
図８は、距離関数テーブルの記憶内容の一例を示す説明図である。距離関数テーブルｄｔ＿ｔは、スレーブノードＳｌの組み合わせごとに、スレーブノードＳｌ間の伝送路に含まれるスイッチと通信相手となる装置との数を記憶するテーブルである。図８に示す距離関数テーブルｄｔ＿ｔは、レコード８０１−１〜レコード８０１−８を含む。たとえば、レコード８０１−１は、スレーブノードＤ１／Ｒ１／Ｓｌ＃１と、分散処理システム２００に含まれるスレーブノードＳｌそれぞれに対するスレーブノードＳｌ間の伝送路に含まれるスイッチと通信相手となる装置との数を記憶する。
【００９１】
具体的に、スレーブノードＳｌが同一である場合の伝送路に含まれるスイッチと通信相手となるノードとの数は、０となる。また、同一ラック内の別のスレーブノードＳｌの伝送路に含まれるスイッチと通信相手となるノードとの数は、２となる。さらに、同一データセンタ内の別ラック内の別のスレーブノードＳｌの伝送路に含まれるスイッチと通信相手となるノードとの数は、４となる。さらに、別のデータセンタ内のスレーブノードＳｌの伝送路に含まれるスイッチと通信相手となるノードとの数は、６となる。
【００９２】
たとえば、図８に示す距離関数テーブルｄｔ＿ｔを参照すると、ｄｔ（Ｄ１／Ｒ１／Ｓｌ＃１，Ｄ１／Ｒ１／Ｓｌ＃ｎ＿ｄ１ｒ１）が２となる。２となる理由は、データがスレーブノードＳｌ＃１からスレーブノードＤ１／Ｒ１／Ｓｌ＃ｎ＿ｄ１ｒ１に送信される際、データが到達するスイッチやノードがスイッチＳｗ＿ｄ１ｒ１とスレーブノードＤ１／Ｒ１／Ｓｌ＃ｎ＿ｄ１ｒ１とであるためである。
【００９３】
距離関数テーブルｄｔ＿ｔは、マスタノードＭｓの記憶領域に記憶される。距離関数テーブルｄｔ＿ｔは、Ｈａｄｏｏｐクラスタ４００に含まれるマスタノードＭｓが変更した場合や、スレーブノードＳｌが追加、削除された際に更新される。距離関数テーブルｄｔ＿ｔは、分散処理システム２００の管理者によって更新されてもよい。または、スレーブノードＳｌが追加された場合等に、マスタノードＭｓが、追加したスレーブノードＳｌ以外のスレーブノードＳｌと、追加したスレーブノードＳｌとの相対的な位置関係を取得して、距離関数テーブルｄｔ＿ｔを更新してもよい。
【００９４】
図９は、距離係数の設定例を示す説明図である。図９では、分散処理システム２００に含まれるデータセンタとして、データセンタＤ１〜Ｄ４があるとして説明を行う。さらに、データセンタＤ１〜Ｄ４は各地に点在する。具体的に、データセンタＤ１は東京にあり、データセンタＤ２は横浜にあり、データセンタＤ３は名古屋にあり、データセンタＤ４は大阪にあるものとする。
【００９５】
このとき、データセンタＤ１とデータセンタＤ２との間と、データセンタＤ１とデータセンタＤ３との間と、を比較すると、データセンタＤ１とデータセンタＤ３の方が伝送路が長くなる。伝送路が長くなるにつれて、データ転送にかかる時間が増大することになる。本実施の形態では、データセンタ同士の距離を示す情報を距離係数テーブルｄα＿ｔとして予め設定しておき、ｄα（ｘ，ｙ）は、距離係数テーブルｄα＿ｔを参照して求められる。
【００９６】
データセンタ同士の距離を示す情報は、データセンタ間の実際の距離の値が格納されてもよいし、計算し易いように、データセンタ間の距離を表す相対的な係数でもよい。たとえば、データセンタＤ１とデータセンタＤ２との間の距離を表す相対的な係数αが１である際、データセンタＤ１とデータセンタＤ３との間との距離を表す相対的な係数αが５であると設定される。データセンタ同士の距離を示す情報は、分散処理システム２００の管理者により設定されてもよいし、または、マスタノードＭｓが、データセンタ間においてデータを送信して、送信にかかる遅延を計測して、データセンタ間の距離を算出してもよい。
【００９７】
図１０は、距離係数テーブルの記憶内容の一例を示す説明図である。距離係数テーブルｄα＿ｔは、データセンタの組み合わせごとに、データセンタ同士の距離を示す情報を記憶する。図１０に示す距離係数テーブルｄα＿ｔは、レコード１０００−１〜レコード１０００−４を含む。たとえば、レコード１０００−１は、データセンタＤ１と、分散処理システム２００に含まれるデータセンタそれぞれとの距離を示す情報を記憶する。たとえば、データセンタＤ１とデータセンタＤ２との距離ｄα（Ｄ１，Ｄ２）は、１となる。
【００９８】
距離係数テーブルｄα＿ｔは、マスタノードＭｓの記憶領域に記憶される。距離係数テーブルｄα＿ｔは、Ｈａｄｏｏｐクラスタ４００に含まれるデータセンタが変更した場合や、データセンタが増減した際に更新される。距離係数テーブルｄα＿ｔは、分散処理システム２００の管理者によって更新されてもよい。または、マスタノードＭｓが、データセンタ間においてデータを送信して、送信にかかる遅延を計測して、データセンタ間の距離を算出して、距離係数テーブルｄα＿ｔを更新してもよい。
【００９９】
次に、図１１と図１２を用いて、Ｒｅｄｕｃｅタスク４２５の割当先ノードの決定例について説明する。図１１と図１２において、点線で示すブロックは、Ｒｅｄｕｃｅタスク４２５が割当可能な空きスロットを示す。
【０１００】
図１１は、Ｒｅｄｕｃｅタスクの割当先ノード決定の第１の例を示す説明図である。図１１に示す分散処理システム２００において、マスタノードＭｓが、Ｍａｐタスク４２４をスレーブノードＤ１／Ｒ２／Ｓｌ＃１に割り当てた状態である。また、図１１に示す分散処理システム２００において、スレーブノードＤ１／Ｒ２／Ｓｌ＃１、Ｄ１／Ｒ２／Ｓｌ＃２、Ｄ２／Ｒ２／Ｓｌ＃１は、Ｒｅｄｕｃｅタスク４２５の空きスロットを１つ有する状態である。さらに、図１１に示す分散処理システム２００において、マスタノードＭｓが、スレーブノードＤ１／Ｒ２／Ｓｌ＃１、Ｄ１／Ｒ２／Ｓｌ＃２、Ｄ２／Ｒ２／Ｓｌ＃１から、ハートビートによるＲｅｄｕｃｅタスク割当要求を受信した状態である。マスタノードＭｓは、受信したＲｅｄｕｃｅタスク割当要求をリクエストバッファ１１０１に格納する。
【０１０１】
リクエストバッファ１１０１は、Ｒｅｄｕｃｅタスク割当要求を記憶する記憶領域である。リクエストバッファ１１０１は、マスタノードＭｓ内のＲＡＭ３０３、磁気ディスク３０５といった記憶装置に格納される。リクエストバッファ１１０１の記憶内容は、ハートビートに含まれる全ての情報でもよいし、タスクトラッカーＩＤと、割当可能なＲｅｄｕｃｅタスク４２５の最大数とでもよい。
【０１０２】
マスタノードＭｓは、リクエストバッファ１１０１に格納されたＲｅｄｕｃｅタスク割当要求を発行したスレーブノードＳｌのうち、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌがあるか否かを判断する。
【０１０３】
図１１の例では、スレーブノードＤ１／Ｒ２／Ｓｌ＃１にＭａｐタスク４２４が割り当てられたため、続けて、マスタノードＭｓは、スレーブノードＤ１／Ｒ２／Ｓｌ＃１に最大数のＲｅｄｕｃｅタスク４２５が割り当てられているかを判断する。図１１の例では、スレーブノードＤ１／Ｒ２／Ｓｌ＃１にＲｅｄｕｃｅタスク４２５の空きスロットが１つあり、最大数のＲｅｄｕｃｅタスク４２５が割り当てられていないため、マスタノードＭｓは、Ｒｅｄｕｃｅタスク４２５をスレーブノードＤ１／Ｒ２／Ｓｌ＃１に割り当てる。
【０１０４】
図１２は、Ｒｅｄｕｃｅタスクの割当先ノード決定の第２の例を示す説明図である。図１２に示す分散処理システム２００において、マスタノードＭｓが、Ｍａｐタスク４２４をスレーブノードＤ１／Ｒ２／Ｓｌ＃１に割り当てた状態である。また、図１２に示す分散処理システム２００において、スレーブノードＤ１／Ｒ２／Ｓｌ＃２、Ｄ２／Ｒ２／Ｓｌ＃１は、Ｒｅｄｕｃｅタスク４２５の空きスロットを１つ有する状態である。さらに、図１２に示す分散処理システム２００において、マスタノードＭｓが、スレーブノードＤ１／Ｒ２／Ｓｌ＃２、Ｄ２／Ｒ２／Ｓｌ＃１から、ハートビートによるＲｅｄｕｃｅタスク割当要求を受信した状態である。マスタノードＭｓは、受信したＲｅｄｕｃｅタスク割当要求をリクエストバッファ１１０１に格納する。
【０１０５】
マスタノードＭｓは、リクエストバッファ１１０１に格納されたＲｅｄｕｃｅタスク割当要求を発行したスレーブノードＳｌのうち、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌがあるか否かを判断する。
【０１０６】
図１２の例では、Ｒｅｄｕｃｅタスク割当要求を発行したスレーブノードＳｌのうち、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌがない。そこで、マスタノードＭｓは、距離関数Ｄｔ（ｘ，ｙ）を算出して、スレーブノードＤ１／Ｒ２／Ｓｌ＃１とＲｅｄｕｃｅタスク割当要求を発行したスレーブノードＳｌとの距離を特定する。
【０１０７】
マスタノードＭｓは、以下のように距離関数Ｄｔ（ｘ，ｙ）を算出することにより、スレーブノードＤ１／Ｒ２／Ｓｌ＃１とスレーブノードＤ１／Ｒ２／Ｓｌ＃２との距離を特定する。
【０１０８】
Ｄｔ（Ｄ１／Ｒ２／Ｓｌ＃１，Ｄ１／Ｒ２／Ｓｌ＃２）＝ｄｔ（Ｄ１／Ｒ２／Ｓｌ＃１，Ｄ１／Ｒ２／Ｓｌ＃２）＋ｄα（Ｄ１／Ｒ２／Ｓｌ＃１，Ｄ１／Ｒ２／Ｓｌ＃２）＝２＋０＝２
【０１０９】
さらに、マスタノードＭｓは、以下のように距離関数Ｄｔ（ｘ，ｙ）を算出することにより、スレーブノードＤ１／Ｒ２／Ｓｌ＃１とスレーブノードＤ２／Ｒ２／Ｓｌ＃１との距離を特定する。
【０１１０】
Ｄｔ（Ｄ１／Ｒ２／Ｓｌ＃１，Ｄ２／Ｒ２／Ｓｌ＃１）＝ｄｔ（Ｄ１／Ｒ２／Ｓｌ＃１，Ｄ２／Ｒ２／Ｓｌ＃１）＋ｄα（Ｄ１／Ｒ２／Ｓｌ＃１，Ｄ２／Ｒ２／Ｓｌ＃１）＝６＋１＝７
【０１１１】
したがって、マスタノードＭｓは、スレーブノードＤ１／Ｒ２／Ｓｌ＃１との距離が短いスレーブノードＤ１／Ｒ２／Ｓｌ＃２にＲｅｄｕｃｅタスク４２５を割り当てる。次に、図１３と図１４を用いて、分散処理システム２００が実行するフローチャートについて説明する。
【０１１２】
図１３は、ＭａｐＲｅｄｕｃｅ処理手順の一例を示すフローチャートである。ＭａｐＲｅｄｕｃｅ処理は、ジョブの実行要求を受け付けた場合に実行する処理である。図１３では、ＭａｐＲｅｄｕｃｅ処理を実行するスレーブノードＳｌがスレーブノードＳｌ＃１、＃２の２台である場合を想定して説明する。また、マスタノードＭｓでは、ジョブトラッカー４１１とジョブスケジューラ４１２が連携して、ＭａｐＲｅｄｕｃｅ処理を実行する。また、スレーブノードＳｌ＃１、２では、タスクトラッカー４２１と、Ｍａｐタスク４２４と、Ｒｅｄｕｃｅタスク４２５が連携して、ＭａｐＲｅｄｕｃｅ処理を実行する。また、図１３のフローチャートでは、スレーブノードＳｌ＃１にＭａｐタスク４２４が割り当てられ、スレーブノードＳｌ＃２にＲｅｄｕｃｅタスク４２５が割り当てられるものとする。
【０１１３】
マスタノードＭｓは、準備処理を実行する（ステップＳ１３０１）。準備処理は、ジョブを実行する前に実行しておく処理である。また、準備処理は、マスタノードＭｓのジョブトラッカー４１１が実行する。準備処理として、ジョブクライアント４０１は、“プログラム名＋入力ファイル名”となるジョブ実行要求を受け付けた場合に、ジョブＩＤを生成するとともに、入力ファイルからスプリットを算出して、ＭａｐＲｅｄｕｃｅプログラム４３１を開始する。
【０１１４】
ステップＳ１３０１の処理終了後、マスタノードＭｓは、初期化処理を実行する（ステップＳ１３０２）。初期化処理は、ジョブの初期化を行う処理である。また、初期化処理は、マスタノードＭｓのジョブトラッカー４１１と、ジョブスケジューラ４１２とが連携して実行する。初期化処理として、ジョブトラッカー４１１は、ジョブクライアント４０１から、ジョブの初期化要求を受け付けた場合、初期化したジョブを内部キューに格納する。ジョブスケジューラ４１２は、内部キューにジョブがあるか否かを一定周期で判断する。ジョブスケジューラ４１２は、内部キューからジョブを取り出して、スプリットごとにＭａｐタスク４２４を生成する。
【０１１５】
ステップＳ１３０２の処理終了後、マスタノードＭｓは、タスク割当処理を実行する（ステップＳ１３０３）。タスク割当処理は、スレーブノードＳｌにＭａｐタスク４２４を割り当てる処理である。また、タスク割当処理は、ジョブスケジューラ４１２によるＭａｐタスク４２４の生成後、ジョブトラッカー４１１が実行する。タスク割当処理として、ジョブトラッカー４１１は、タスクトラッカー４２１から受け付けたハートビート通信を参照して、Ｍａｐタスク４２４、Ｒｅｄｕｃｅタスク４２５それぞれを割り当てるスレーブノードＳｌを決定する。
【０１１６】
ハートビート通信は、各スレーブノードＳｌが新たに実行可能なタスク数を含む。たとえば、あるスレーブノードＳｌが、実行可能なタスク数の最大が５であり、Ｍａｐタスク４２４およびＲｅｄｕｃｅタスク４２５が計３つ実行中であるとする。この場合、あるスレーブノードＳｌは、ハートビート通信に、新たに実行可能なタスク数が２であるという情報を含めてマスタノードＭｓに通知する。ジョブトラッカー４１１は、スレーブノードＳｌ＃１〜＃ｎのうち、スプリットがあるスレーブノードＳｌをＭａｐタスク４２４の割当先に決定する。Ｒｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌの決定処理手順については、図１４で後述する。
【０１１７】
Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌ＃１は、Ｍａｐ処理を実行する（ステップＳ１３０４）。Ｍａｐ処理は、処理対象となるスプリットから、（Ｋｅｙ，Ｖａｌｕｅ）を生成する処理である。また、Ｍａｐ処理は、タスクトラッカー４２１＃１と、スレーブノードＳｌ＃１に割り当てられたＭａｐタスク４２４＃１とが連携して実行する。Ｍａｐ処理として、タスクトラッカー４２１＃１は、ＭａｐＲｅｄｕｃｅプログラム４３１をＨＤＦＳからスレーブノードＳｌ＃１のローカル記憶領域にコピーする。そして、タスクトラッカー４２１＃１は、スプリットをＨＤＦＳから、スレーブノードＳｌ＃１のローカル記憶領域にコピーする。Ｍａｐタスク４２４＃１は、スプリットを処理対象として、ＭａｐＲｅｄｕｃｅプログラム４３１内のＭａｐ処理を実行する。
【０１１８】
ステップＳ１３０４の処理終了後、スレーブノードＳｌ＃１とスレーブノードＳｌ＃２は、シャッフル＆ソート処理を実行する（ステップＳ１３０５）。シャッフル＆ソート処理は、Ｍａｐ処理の処理結果を処理対象として、１つ以上の処理結果に集約する処理である。
【０１１９】
具体的に、スレーブノードＳｌ＃１は、Ｍａｐ処理の処理結果を並び替えておき、Ｍａｐ処理が完了したことをマスタノードＭｓに通知する。通知を受け付けたマスタノードＭｓは、Ｍａｐ処理が完了したスレーブノードＳｌ＃１に対して、Ｍａｐ処理の処理結果を送信するように指示をする。指示を受けたスレーブノードＳｌ＃１は、並び替えておいたＭａｐ処理の処理結果を、Ｒｅｄｕｃｅタスク４２５が割り当てられたスレーブノードＳｌ＃２に送信する。並び替えておいたＭａｐ処理の処理結果を受け付けたスレーブノードＳｌ＃２は、Ｍａｐ処理の処理結果をＫｅｙごとにマージして、Ｒｅｄｕｃｅタスク４２５へ入力する。
【０１２０】
ステップＳ１３０５の処理終了後、スレーブノードＳｌ＃２は、Ｒｅｄｕｃｅ処理を実行する（ステップＳ１３０６）。Ｒｅｄｕｃｅ処理は、集約された処理結果を処理対象として、ジョブの処理結果を出力する処理である。また、Ｒｅｄｕｃｅ処理は、Ｒｅｄｕｃｅタスク４２５が実行する。Ｒｅｄｕｃｅ処理として、スレーブノードＳｌ＃２のＲｅｄｕｃｅタスク４２５＃２は、Ｋｅｙフィールドの値が同一となるレコード群を処理対象として、ＭａｐＲｅｄｕｃｅプログラム４３１内のＲｅｄｕｃｅ処理を実行する。
【０１２１】
ステップＳ１３０６の処理終了後、分散処理システム２００は、ＭａｐＲｅｄｕｃｅ処理を終了する。ＭａｐＲｅｄｕｃｅ処理を実行することにより、分散処理システム２００は、ジョブクライアント４０１にジョブの実行を要求した装置に出力結果を提示することができる。
【０１２２】
図１４は、Ｒｅｄｕｃｅタスク割当ノード決定処理手順の一例を示すフローチャートである。Ｒｅｄｕｃｅタスク割当ノード決定処理は、Ｒｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌを決定する処理である。
【０１２３】
マスタノードＭｓは、スレーブノードＳｌの各タスクトラッカー４２１から、Ｒｅｄｕｃｅタスク割当要求として、ハートビートを受信する（ステップＳ１４０１）。次に、マスタノードＭｓは、Ｒｅｄｕｃｅタスク割当要求をリクエストバッファ１１０１に格納する（ステップＳ１４０２）。続けて、マスタノードＭｓは、全てのスレーブノードＳｌからＲｅｄｕｃｅタスク割当要求を受信したか否かを判断する（ステップＳ１４０３）。まだ受信していないスレーブノードＳｌがある場合（ステップＳ１４０３：Ｎｏ）、マスタノードＭｓは、ステップＳ１４０１の処理に移行する。
【０１２４】
全てのスレーブノードＳｌからＲｅｄｕｃｅタスク割当要求を受信した場合（ステップＳ１４０３：Ｙｅｓ）、マスタノードＭｓは、Ｒｅｄｕｃｅタスク割当要求の要求元スレーブノードＳｌのうち、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌがあるか否かを判断する（ステップＳ１４０４）。Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌがある場合（ステップＳ１４０４：Ｙｅｓ）、マスタノードＭｓは、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌに、最大数のＲｅｄｕｃｅタスク４２５が割り当てられているか否かを判断する（ステップＳ１４０５）。最大数のＲｅｄｕｃｅタスク４２５が割り当てられていない場合（ステップＳ１４０５：Ｎｏ）、マスタノードＭｓは、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌを、Ｒｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌに決定する（ステップＳ１４０６）。
【０１２５】
ステップＳ１４０６の処理において、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌが複数あるとする。このとき、マスタノードＭｓは、Ｍａｐタスク４２４が割り当てられた複数のスレーブノードＳｌのうちのいずれかをＲｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌに決定してもよい。
【０１２６】
また、マスタノードＭｓは、Ｒｅｄｕｃｅタスク割当要求の要求元スレーブノードＳｌとＭａｐタスク４２４が割り当てられた複数のスレーブノードＳｌの組ごとに、要求元スレーブノードＳｌとＭａｐタスク４２４が割り当てられたスレーブノードＳｌとの間の距離Ｄｔを特定してもよい。そして、マスタノードＭｓは、要求元スレーブノードＳｌごとに、該当の要求元スレーブノードＳｌとＭａｐタスク４２４が割り当てられたスレーブノードＳｌとの間の距離Ｄｔを合計する。続けて、マスタノードＭｓは、合計した距離が最小の要求元スレーブノードＳｌをＲｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌに決定する。
【０１２７】
たとえば、Ｍａｐタスクが割り当てられたスレーブノードＳｌが、スレーブノードＤ１／Ｒ１／Ｓｌ＃１と、スレーブノードＤ１／Ｒ１／Ｓｌ＃２と、スレーブノードＤ２／Ｒ１／Ｓｌ＃１とであるとする。さらに、Ｒｅｄｕｃｅタスク割当要求の要求元スレーブノードＳｌが、スレーブノードＤ１／Ｒ１／Ｓｌ＃１と、スレーブノードＤ２／Ｒ１／Ｓｌ＃１とであるとする。このとき、マスタノードＭｓは、以下の６つのＤｔ（）を算出する。
【０１２８】
Ｄｔ（Ｄ１／Ｒ１／Ｓｌ＃１、Ｄ１／Ｒ１／Ｓｌ＃１）＝０＋０＝０
Ｄｔ（Ｄ１／Ｒ１／Ｓｌ＃２、Ｄ１／Ｒ１／Ｓｌ＃１）＝２＋０＝２
Ｄｔ（Ｄ２／Ｒ１／Ｓｌ＃１、Ｄ１／Ｒ１／Ｓｌ＃１）＝６＋１＝７
Ｄｔ（Ｄ１／Ｒ１／Ｓｌ＃１、Ｄ２／Ｒ１／Ｓｌ＃１）＝６＋１＝７
Ｄｔ（Ｄ１／Ｒ１／Ｓｌ＃２、Ｄ２／Ｒ１／Ｓｌ＃１）＝６＋１＝７
Ｄｔ（Ｄ２／Ｒ１／Ｓｌ＃１、Ｄ２／Ｒ１／Ｓｌ＃１）＝０＋０＝０
【０１２９】
そして、マスタノードＭｓは、要求元スレーブノードＳｌとして、スレーブノードＤ１／Ｒ１／Ｓｌ＃１についての距離Ｄｔの合計を、０＋２＋７＝９と算出する。同様に、マスタノードＭｓは、要求元スレーブノードＳｌとして、スレーブノードＤ２／Ｒ１／Ｓｌ＃１についての距離Ｄｔの合計を、７＋７＋０＝１４と算出する。続けて、マスタノードＭｓは、距離Ｄｔの合計が小さいスレーブノードＤ１／Ｒ１／Ｓｌ＃１を、Ｒｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌに決定する。
【０１３０】
Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌがない場合（ステップＳ１４０４：Ｎｏ）、または、最大数のＲｅｄｕｃｅタスク４２５が割り当てられている場合（ステップＳ１４０５：Ｙｅｓ）、マスタノードＭｓは、Ｒｅｄｕｃｅタスク割当要求の要求元スレーブノードＳｌのうち、先頭のスレーブノードＳｌを選択する（ステップＳ１４０７）。次に、マスタノードＭｓは、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌと、選択したスレーブノードＳｌとの間の距離Ｄｔを特定する（ステップＳ１４０８）。
【０１３１】
続けて、マスタノードＭｓは、要求元スレーブノードＳｌの全てを選択したか否かを判断する（ステップＳ１４０９）。選択していない要求元スレーブノードＳｌがある場合（ステップＳ１４０９：Ｎｏ）、マスタノードＭｓは、要求元スレーブノードＳｌのうちの次のスレーブノードＳｌを選択する（ステップＳ１４１０）。そして、マスタノードＭｓは、ステップＳ１４０８の処理に移行する。
【０１３２】
要求元スレーブノードＳｌの全てを選択した場合（ステップＳ１４０９：Ｙｅｓ）、マスタノードＭｓは、Ｄｔが最小のスレーブノードＳｌに、Ｒｅｄｕｃｅタスク４２５を割り当てる（ステップＳ１４１１）。ステップＳ１４１１の処理において、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌが複数ある場合、マスタノードＭｓは、ステップＳ１４０６の処理においてＤｔを用いた処理と同様の処理を行ってもよい。
【０１３３】
ステップＳ１４０６またはステップＳ１４１１の処理終了後、マスタノードＭｓは、Ｒｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌに、Ｒｅｄｕｃｅタスク４２５を割り当てる（ステップＳ１４１２）。ステップＳ１４１２の処理終了後、マスタノードＭｓは、Ｒｅｄｕｃｅタスク割当ノード決定処理を終了する。Ｒｅｄｕｃｅタスク割当ノード決定処理を実行することにより、マスタノードＭｓは、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌに物理的に近いスレーブノードＳｌにＲｅｄｕｃｅタスク４２５を割り当てることができる。
【０１３４】
ステップＳ１４０３の処理について、全てのスレーブノードＳｌからＲｅｄｕｃｅタスク割当要求を受信したか否かを判断したが、マスタノードＭｓは、以下に示す第１〜第３の判断手順のいずれかに従ってもよい。第１の判断手順として、マスタノードＭｓは、最初にＲｅｄｕｃｅタスク割当要求を受信してから所定時間経過したか否かを判断してもよい。
【０１３５】
第２の判断基準として、マスタノードＭｓは、Ｍａｐタスク４２４が割り当てられたスレーブノードＳｌとＲｅｄｕｃｅタスク割当要求を発行したスレーブノードＳｌとのＤｔを特定し、Ｄｔが所定の閾値以下かを判断してもよい。第２の判断手順が採用された場合、マスタノードＭｓは、Ｄｔが所定の閾値以下となったスレーブノードＳｌにＲｅｄｕｃｅタスク４２５を割り当てる。
【０１３６】
第３の判断基準として、マスタノードＭｓは、リクエストバッファ１１０１の記憶量が所定量となったか否かを判断してもよい。たとえば、リクエストバッファ１１０１に記憶可能なＲｅｄｕｃｅタスク割当要求の個数が１０であり、リクエストバッファ１１０１が記憶するＲｅｄｕｃｅタスク割当要求の個数が８となった場合、マスタノードＭｓは、ステップＳ１４０３：Ｙｅｓと判断する。
【０１３７】
以上説明したように、マスタノードＭｓによれば、スレーブノード群Ｓｌｎの各々のスレーブノードＳｌ間の距離に基づいて、Ｒｅｄｕｃｅタスク４２５を割当可能なノードからＲｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌを決定する。マスタノードＭｓは、スレーブノードＳｌ間の伝送路に含まれるスイッチの数に基づくよりもＭａｐタスク４２４の処理結果の転送にかかる時間を短縮することができる。短縮できる理由として、スレーブノードＳｌ間の伝送路に含まれるスイッチの数では、スレーブノードＳｌ間の距離を表すには不十分であるためである。Ｍａｐタスク４２４の処理結果の転送にかかる時間が短縮された結果、分散処理システム２００は、ＭａｐＲｅｄｕｃｅ処理にかかる時間を短縮することができる。
【０１３８】
本実施の形態では、分散処理システム２００が複数のデータセンタにより構築された場合を想定したが、１つのデータセンタ内により構築されていても、本実施の形態にかかる割当方法を適用することができる。分散処理システム２００が１つのデータセンタ内により構築されていても、スイッチからスレーブノードＳｌまでの距離がスレーブノードＳｌごとで異なる場合もある。この場合、スレーブノードＳｌ間の伝送路に含まれるスイッチの数に基づきＲｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌを決定するより本実施の形態における割当方法の方がＭａｐタスク４２４の処理結果の転送にかかる時間を短縮することができる。
【０１３９】
また、マスタノードＭｓによれば、各データセンタ間の距離を表す情報とスレーブノード群Ｓｌｎの各々が属するデータセンタを特定する情報を用いて、Ｒｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌを決定してもよい。各データセンタ間の距離を表す情報とスレーブノード群Ｓｌｎの各々が属するデータセンタを特定する情報との情報量は、スレーブノード群Ｓｌｎの各々のスレーブノードＳｌ間の距離を特定する情報の情報量より少なくなる。また、スレーブノードＳｌ間の距離は、データセンタ間の距離に大きく依存する。したがって、マスタノードＭｓは、スレーブノードＳｌ間の距離を特定する情報の情報量より少ない情報量で、スレーブノードＳｌ間の距離を特定するとともに、Ｍａｐタスク４２４の処理結果の転送にかかる時間を短縮することができる。
【０１４０】
また、マスタノードＭｓによれば、スレーブノードＳｌが属するデータセンタ間の距離と、スレーブノードＳｌ間の伝送路に含まれるスイッチの数とに基づいて、Ｒｅｄｕｃｅタスク４２５を割り当てるノードを決定してもよい。これにより、マスタノードＭｓは、スレーブノードＳｌが属するデータセンタ間の距離のみを用いる場合と比較してスレーブノードＳｌ間の距離をより正確に特定することができ、Ｍａｐタスク４２４の処理結果の転送にかかる時間を短縮することができる。
【０１４１】
また、マスタノードＭｓによれば、Ｒｅｄｕｃｅタスク４２５を割当可能な複数のスレーブノードＳｌがあれば、複数のスレーブノードＳｌのうち、特定した距離が相対的に短いスレーブノードＳｌにＲｅｄｕｃｅタスク４２５を割り当てることを決定してもよい。これにより、マスタノードＭｓは、伝送路が短いスレーブノードＳｌにＲｅｄｕｃｅタスク４２５を割り当てることになるため、Ｍａｐタスク４２４の処理結果の転送にかかる時間を短縮することができる。
【０１４２】
また、マスタノードＭｓによれば、Ｍａｐタスク４２４が割り当てられた複数のスレーブノードＳｌがあれば、複数のスレーブノードＳｌの各々に対応して特定した距離の合計に基づきＲｅｄｕｃｅタスク４２５を割り当てるスレーブノードＳｌを決定してもよい。これにより、マスタノードＭｓは、Ｍａｐタスク４２４が割り当てられた複数のスレーブノードＳｌが送信するＭａｐ処理の処理結果の転送にかかる時間を短縮することができる。
【０１４３】
なお、本実施の形態で説明した割当方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本割当プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本割当プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１４４】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１４５】
（付記１）コンピュータに、
通信可能なノード群の各々のノード間の距離を特定する距離情報を参照して、前記ノード群のうちの第１の処理が割り当てられたノードと、前記ノード群のうちの前記第１の処理の処理結果を処理対象とする第２の処理を割当可能なノードと、の間の距離を特定し、
特定した前記距離に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定する、
処理を実行させることを特徴とする割当プログラム。
【０１４６】
（付記２）前記距離情報は、前記ノード群が属する複数のデータセンタの各々のデータセンタ間の距離を表す情報と、前記複数のデータセンタのうちの前記ノード群の各々のノードが属するデータセンタを特定する情報とを含み、
前記特定する処理は、
前記距離情報を参照して、前記複数のデータセンタのうちの前記第１の処理が割り当てられたノードが属するデータセンタと、前記複数のデータセンタのうちの前記第２の処理を割当可能なノードが属するデータセンタと、の間の距離を特定することにより、前記第１の処理が割り当てられたノードと前記第２の処理を割当可能なノードとの間の距離を特定することを特徴とする付記１に記載の割当プログラム。
【０１４７】
（付記３）前記距離情報は、さらに、前記各々のノード間の通信路に含まれるスイッチ装置の数を含み、
前記特定する処理は、
前記距離情報を参照して、前記第１の処理が割り当てられたノードが属するデータセンタと前記第２の処理を割当可能なノードが属するデータセンタとの間の距離と、前記第１の処理が割り当てられたノードと前記第２の処理を割当可能なノードとの間の通信路に含まれるスイッチ装置の数と、に基づいて、前記第１の処理が割り当てられたノードと前記第２の処理を割当可能なノードとの間の距離を特定することを特徴とする付記２に記載の割当プログラム。
【０１４８】
（付記４）前記特定する処理は、
前記第２の処理を割当可能な複数のノードがある場合、前記距離情報を参照して、前記第１の処理が割り当てられたノードと前記第２の処理を割当可能な複数のノードの各々のノードとの間の距離を特定し、
前記決定する処理は、
前記第２の処理を割当可能な複数のノードのうちの、特定した前記距離が相対的に短いノードに前記第２の処理を割り当てることを決定することを特徴とする付記１〜３のいずれか一つに記載の割当プログラム。
【０１４９】
（付記５）前記特定する処理は、
前記第１の処理が割り当てられた複数のノードがある場合、前記距離情報を参照して、前記第１の処理が割り当てられたノードの各々のノードと前記第２の処理を割当可能なノードと間の距離を特定し、
前記決定する処理は、
前記第１の処理が割り当てられた複数のノードの各々のノードに対応して特定した前記距離の合計に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定することを特徴とする付記１〜４のいずれか一つに記載の割当プログラム。
【０１５０】
（付記６）通信可能なノード群の各々のノード間の距離を特定する距離情報を参照して、前記ノード群のうちの第１の処理が割り当てられたノードと、前記ノード群のうちの前記第１の処理の処理結果を処理対象とする第２の処理を割当可能なノードと、の間の距離を特定し、
特定した前記距離に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定する、
処理をコンピュータに実行させる割当プログラムを記録したことを特徴とする記録媒体。
【０１５１】
（付記７）通信可能なノード群の各々のノード間の距離を特定する距離情報を参照して、前記ノード群のうちの第１の処理が割り当てられたノードと、前記ノード群のうちの前記第１の処理の処理結果を処理対象とする第２の処理を割当可能なノードと、の間の距離を特定する特定部と、
前記特定部が特定した前記距離に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定する決定部と、
を有することを特徴とする割当装置。
【０１５２】
（付記８）通信可能なノード群の各々のノード間の距離を特定する距離情報を参照して、前記ノード群のうちの第１の処理が割り当てられたノードと、前記ノード群のうちの前記第１の処理の処理結果を処理対象とする第２の処理を割当可能なノードと、の間の距離を特定する特定部と、
前記特定部が特定した前記距離に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定する決定部と、
を有するコンピュータを含むことを特徴とする割当装置。
【０１５３】
（付記９）コンピュータが、
通信可能なノード群の各々のノード間の距離を特定する距離情報を参照して、前記ノード群のうちの第１の処理が割り当てられたノードと、前記ノード群のうちの前記第１の処理の処理結果を処理対象とする第２の処理を割当可能なノードと、の間の距離を特定し、
特定した前記距離に基づいて、前記第２の処理を割当可能なノードから前記第２の処理を割り当てるノードを決定する、
処理を実行することを特徴とする割当方法。
【符号の説明】
【０１５４】
Ｍｓ  マスタノード
Ｓｌ  スレーブノード
１００  システム
１０１  割当装置
１０２  ノード
１１０  距離情報
１１１、４２４  Ｍａｐタスク
２００  分散処理システム
４２５  Ｒｅｄｕｃｅタスク
５０１  特定部
５０２  決定部
【図１】
2015001828.tif 000003
【図２】
2015001828.tif 000004
【図３】
2015001828.tif 000005
【図４】
2015001828.tif 000006
【図５】
2015001828.tif 000007
【図６】
2015001828.tif 000008
【図７】
2015001828.tif 000009
【図８】
2015001828.tif 000010
【図９】
2015001828.tif 000011
【図１０】
2015001828.tif 000012
【図１１】
2015001828.tif 000013
【図１２】
2015001828.tif 000014
【図１３】
2015001828.tif 000015
【図１４】
2015001828.tif 000016