(57)【要約】【課題】データの並列処理システムの利用者に負担をかけることなく目的の処理を実現でき、かつ、並列処理に割り当てられるデータを効率よく平滑化すること。【解決手段】この負荷分散処理システム１は、データの総データサイズを予め保持する記憶部１９と、入力データに対して中間キーを付加するように加工するデータ加工部１２と、同一の中間キーを有するグループ毎に複数のデータ群のいずれかに振り分ける振分処理部１３と、グループ毎の総データサイズとグループ数とを検出する検出部１４，１５と、グループあたりの総データサイズの平均値を算出する算出部２４と、グループ毎の総データサイズの平均値に対する超過度合いを判断する判断部２５とを備え、再振分部１６は、判断部２５によって判断された超過度合いに応じて、該当グループに属するデータを２以上のデータ群に再度振り分ける。【選択図】図１
2012118669.tif 000002
【特許請求の範囲】
【請求項１】
入力されたデータを並列処理の対象である複数のデータ群に振り分ける負荷分散処理システムであって、
前記データの総データサイズを予め保持する記憶手段と、
入力された前記データに対して該データを識別するための識別キー情報を付加するように加工するデータ加工手段と、
データ加工手段によって加工された前記データに含まれる前記識別キー情報に応じて、同一の前記識別キー情報を有する前記データのグループ毎に、前記複数のデータ群のうちのいずれかに振り分ける振分処理手段と、
前記データの前記グループ毎の振り分け済みの総データサイズと、前記データの前記グループの群数とを検出するグループ毎データサイズ検出手段と、
前記総データサイズと前記群数とに基づいて、前記グループあたりの最終的な総データサイズの平均値を算出する平均値算出手段と、
前記グループ毎の前記振り分け済みの総データサイズの前記総データサイズの平均値に対する超過度合いを判断する判断手段とを備え、
前記振分処理手段は、前記判断手段によって判断された前記超過度合いに応じて、該当するグループに属する前記データを、２以上のデータ群に再度振り分ける、
ことを特徴とする負荷分散処理システム。
【請求項２】
入力された前記データのデータサイズと、前記データ加工手段から出力されるデータのデータサイズから、前記データの膨張率を算出する膨張率算出手段と、
前記総データサイズと前記膨張率から前記データ加工手段による加工後の総データサイズを予測するデータサイズ予測手段と、
をさらに備え、
前記平均値算出手段は、前記データサイズ予測手段によって予測された前記総データサイズの予測値を基に前記総データサイズの平均値を算出する、
ことを特徴とする請求項１記載の負荷分散処理システム。
【請求項３】
前記総データサイズと入力された前記データのデータサイズとから振り分け処理の進捗率を計算する進捗率算出手段をさらに備え、
前記平均値算出手段は、前記グループ毎データサイズ検出手段によって検出された前記グループ毎の振り分け済みの総データサイズを基に前記グループ毎の平均データサイズを算出し、前記平均データサイズを進捗率で除算することにより、前記総データサイズの平均値を算出する、
ことを特徴とする請求項１又は２記載の負荷分散処理システム。
【請求項４】
前記平均値算出手段は、前記グループ毎の振り分け済みの総データサイズから外れ値を検出し、前記外れ値が検出されたグループは前記平均データサイズの算出対象から除外する、
ことを特徴とする請求項３記載の負荷分散処理システム。
【請求項５】
前記振分処理手段は、前記進捗率が所定値に達したことを条件に、前記データに対する再振り分け処理を実行する、
ことを特徴とする請求項３記載の負荷分散処理システム。
【請求項６】
前記振分処理手段は、前記超過度合いが大きくなるに従って、該当するグループに属する前記データを、より多くのデータ群に再度振り分ける、
ことを特徴とする請求項１〜５のいずれか１項に記載の負荷分散処理システム。
【請求項７】
前記記憶手段は、並列処理のタスク数をさらに保持し、
前記平均値算出手段は、前記総データサイズと前記タスク数とを基に算出した値、及び前記総データサイズと前記群数とに基づいて算出した値のうちで小さいほうを、前記総データサイズの平均値とする、
ことを特徴とする請求項１〜６のいずれか１項に記載の負荷分散処理システム。
【請求項８】
前記振分処理手段は、前記データ加工手段に入力されたデータ量が所定量に達する毎に、前記データに対する再振り分け処理を起動する、
ことを特徴とする請求項１〜７のいずれか１項に記載の負荷分散処理システム。
【請求項９】
入力されたデータを並列処理の対象である複数のデータ群に振り分ける負荷分散処理方法であって、
負荷分散処理システムが、前記データの総データサイズを予め保持する記憶ステップと、
前記負荷分散処理システムが、入力された前記データに対して該データを識別するための識別キー情報を付加するように加工するデータ加工ステップと、
前記負荷分散処理システムが、データ加工ステップによって加工された前記データに含まれる前記識別キー情報に応じて、同一の前記識別キー情報を有する前記データのグループ毎に、前記複数のデータ群のうちのいずれかに振り分ける振分処理ステップと、
前記負荷分散処理システムが、前記データの前記グループ毎の振り分け済みの総データサイズと、前記データの前記グループの群数とを検出するグループ毎データサイズ検出ステップと、
前記負荷分散処理システムが、前記総データサイズと前記群数とに基づいて、前記グループあたりの最終的な総データサイズの平均値を算出する平均値算出ステップと、
前記負荷分散処理システムが、前記グループ毎の前記振り分け済みの総データサイズの前記総データサイズの平均値に対する超過度合いを判断する判断ステップとを備え、
前記振分処理ステップでは、前記判断手段によって判断された前記超過度合いに応じて、該当するグループに属する前記データを、２以上のデータ群に再度振り分ける、
ことを特徴とする負荷分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力されたデータを並列処理の対象である複数のデータ群に振り分ける負荷分散処理システム及び負荷分散処理方法に関するものである。
【背景技術】
【０００２】
近年、データマイニングや各種の科学技術計算の分野では、膨大な数のレコードから成る大量データを分析処理する要求が増している。これまでは、このような要求に応えるために、スーパーコンピュータ等の高性能な計算機が用いられていた。一方で、近年では、ネットワークを介して接続された多数の安価な計算機を用いて、大量データを並列処理する方法が主流になってきている。このように大量データを並列処理するためのデータ処理技術の１つとして、下記非特許文献１に記載のＭａｐＲｅｄｕｃｅと呼ばれる技術が知られている。
【０００３】
上記のＭａｐＲｅｄｕｃｅでは、大量データを対象にした処理（以下、「ジョブ」と言う。）が２つのフェーズに分けられている。まず、「Ｍａｐ」と呼ばれるフェーズでは、入力データをレコード単位で受け取り、レコードを識別する中間キーと中間バリューからなる中間出力レコードを出力する。なお、このＭａｐフェーズにおいて各計算機上で実行されるプログラムのプロセスは「Ｍａｐタスク」と呼ばれる。また、「Ｒｅｄｕｃｅ」と呼ばれるフェーズでは、Ｍａｐフェーズで出力された中間出力レコードを受け取り、最終的なキー及びバリューからなる最終レコードを出力する。なお、このＲｅｄｕｃｅフェーズにおいて各計算機上で実行されるプログラムのプロセスは「Ｒｅｄｕｃｅタスク」と呼ばれる。
【０００４】
ところで、Ｍａｐフェーズで出力された中間出力レコードは、そのレコードに含まれる中間キーの値によってどのＲｅｄｕｃｅタスクに送られるかが決定される。このようなレコード振り分けの処理を「パーティショニング」あるいは「パーティション計算」と呼ぶ。同じ中間キーを持つ中間出力レコード群は「グループ」と呼ばれ、代表的なパーティショニングのためのアルゴリズムでは、一グループ内の中間出力レコード群は、同じＲｅｄｕｃｅタスクに割り振られる。つまり、パーティショニングでは、中間キーによって識別されるグループの割り当て先となるＲｅｄｕｃｅタスク番号を決定する。従って、同じ中間キーを持つ中間出力レコード数が多い場合は、その中間キーを持つグループはレコード数が多くなる。
【０００５】
ここで、図１２に示すように、多数のグループや相対的に大きなグループが特定のＲｅｄｕｃｅタスクに集中した場合、当該Ｒｅｄｕｃｅタスクは他のＲｅｄｕｃｅタスクより多くの計算処理を課されることになり、処理終了までに長時間を要することになる。ＭａｐＲｅｄｕｃｅの一つの特徴として、ジョブの完了は全てのＲｅｄｕｃｅタスクが完了した時点である、ということがあるため、一部でも長時間を要するＲｅｄｕｃｅタスクが存在すると、それだけジョブ完了までの時間が長引く傾向にある。従来のＭａｐＲｅｄｕｃｅでは、このような事態を回避するために、多数のグループが特定のＲｅｄｕｃｅタスクに集中しないようなパーティション計算の方法を採用したり、相対的に大きなグループが発生しないように中間キーの粒度を細分化したりするなどの工夫を、ＭａｐＲｅｄｕｃｅの利用者自らが手作業で行う必要がある。特に、中間キーの粒度の細分化については、本来のデータの処理内容に関して非直感的な中間キーを採用せざるを得ないような場合も発生し、利用者にとって不都合である。例えば、入力データを都道府県別に処理したい場合において都道府県名を中間キーに設定された場合において、特定の都道府県（例えば、東京都）のデータ量、すなわち、特定グループのサイズが著しく大きくなることが想定される。このような場合には、中間キーを市町村名に設定して一旦処理した後に処理後のグループを都道府県別に集約する余計な処理が必要になる。
【０００６】
このような問題に関して、例えば、下記非特許文献２には、Ｒｅｄｕｃｅタスクに割り当てられようとしている中間出力レコード数を検出し、中間キーの粒度を動的に変更して、実際に各Ｒｅｄｕｃｅタスクに割り当てられる中間出力レコード数を平滑化するように制御するという処理方針が示されている。また、下記非特許文献３には、中間キーの内容を動的に変更する具体的な方法が提案されている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】“MapReduce: Simplified Data Processing on Large Clusters”、Jeffrey Dean and SanjayGhemawat、Proceedingof the 6th Symposium on Operating Systems Design and Implementation (OSDI '04)、２００４年１２月６日−８日
【非特許文献２】“ＭａｐＲｅｄｕｃｅを利用した決定木生成処理の負荷分散”、福本佳史  他、DEIM Forum 2010 C2-4、２０１０年２月２８日
【非特許文献３】“Skew-Resistant ParallelProcessing of Feature-Extracting Scientific User-Defined Functions”、YongChul Kwon et al.、University of Washington、ACM SoCC’10、２０１０年６月１０日−１１日
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した非特許文献２に記載された中間キーの粒度を動的に変更する方法では、中間キーの内容を動的に変更することを意味する。ここで、ＭａｐＲｅｄｕｃｅにおけるＲｅｄｕｃｅプログラムを記述する利用者は、中間キーの内容に依存した処理を行うように記述する場合がある。例えば、ＳＱＬ（Structured Query Language）を使用する場合には、主テーブルと従属テーブルのレコード同士を内部結合（Inner Join）するという処理をＭａｐＲｅｄｕｃｅで実現できる。この場合、主テーブルの主キー及び従属テーブルの参照キーを中間キーとし、対応する主テーブルのレコードと従属テーブルのレコードを同じＲｅｄｕｃｅタスクに集めるというのが一般的な方法（「Ｒｅｄｕｃｅ−ｓｉｄｅ  Ｉｎｎｅｒ−Ｊｏｉｎ」と呼ばれる）である。しかし、このとき中間キーの内容を脈略なく動的に変更してしまうと、目的の処理を完遂できなくなる恐れがある。
【０００９】
また、上述した非特許文献３に記載された方法では、中間キーの内容が脈略なく変更されることを回避するため、中間キーの内容の変更方法を、中間出力レコードの処理内容に応じて利用者が詳細に指定しなければならない。より具体的には、どのような条件が揃った場合に中間キーの変更が可能で、中間キーをどのように変更し、どの中間出力レコードをどの（動的に分割された）グループに割り当てるかを、詳細に指定する必要がある。しなしながら、ＭａｐＲｅｄｕｃｅは汎用的なプログラミングモデルであり、その上では様々なデータ処理（アプリケーションプログラム）を実行することができるため、処理に応じて中間キーの内容の変更方法を詳細に指定することは、利用者にとって大きな手間となる。
【００１０】
一方で、中間キーの内容を変更することなく中間出力レコード数を平滑化するための方法としては、何らかの方法で各グループの大きさを検出し、各Ｒｅｄｕｃｅタスクへの割り当てが平滑化されるようにパーティショニングを工夫するという方法も考えられる（図１３）。しかしながら、この方法では、例えば、図１４のような特定グループのサイズが極端に大きい場合にはうまく平滑化することができない。
【００１１】
そこで、本発明は、かかる課題に鑑みて為されたものであり、データの並列処理システムの利用者に負担をかけることなく目的の処理を実現でき、かつ、並列処理に割り当てられるデータを効率よく平滑化することが可能な負荷分散処理システム及び負荷分散処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するため、本発明の負荷分散処理システムは、入力されたデータを並列処理の対象である複数のデータ群に振り分ける負荷分散処理システムであって、データの総データサイズを予め保持する記憶手段と、入力されたデータに対して該データを識別するための識別キー情報を付加するように加工するデータ加工手段と、データ加工手段によって加工されたデータに含まれる識別キー情報に応じて、同一の識別キー情報を有するデータのグループ毎に、複数のデータ群のうちのいずれかに振り分ける振分処理手段と、データのグループ毎の振り分け済みの総データサイズと、データのグループの群数とを検出するグループ毎データサイズ検出手段と、総データサイズと群数とに基づいて、グループあたりの最終的な総データサイズの平均値を算出する平均値算出手段と、グループ毎の振り分け済みの総データサイズの総データサイズの平均値に対する超過度合いを判断する判断手段とを備え、振分処理手段は、判断手段によって判断された超過度合いに応じて、該当するグループに属するデータを、２以上のデータ群に再度振り分ける、ことを特徴とする。
【００１３】
或いは、本発明の負荷分散処理方法は、入力されたデータを並列処理の対象である複数のデータ群に振り分ける負荷分散処理方法であって、負荷分散処理システムが、データの総データサイズを予め保持する記憶ステップと、負荷分散処理システムが、入力されたデータに対して該データを識別するための識別キー情報を付加するように加工するデータ加工ステップと、負荷分散処理システムが、データ加工ステップによって加工されたデータに含まれる識別キー情報に応じて、同一の識別キー情報を有するデータのグループ毎に、複数のデータ群のうちのいずれかに振り分ける振分処理ステップと、負荷分散処理システムが、データのグループ毎の振り分け済みの総データサイズと、データのグループの群数とを検出するグループ毎データサイズ検出ステップと、負荷分散処理システムが、総データサイズと群数とに基づいて、グループあたりの最終的な総データサイズの平均値を算出する平均値算出ステップと、負荷分散処理システムが、グループ毎の振り分け済みの総データサイズの総データサイズの平均値に対する超過度合いを判断する判断ステップとを備え、振分処理ステップでは、判断手段によって判断された超過度合いに応じて、該当するグループに属するデータを、２以上のデータ群に再度振り分ける、ことを特徴とする。
【００１４】
このような負荷分散処理システム或いは負荷分散処理方法によれば、入力されるデータに関する総データサイズが予め記憶され、同一の識別キー情報を有するデータのグループ毎に、並列処理に課される複数のデータ群に振り分けられる。それに伴い、データのグループ毎の総データサイズと、それらのグループに関する群数が検出され、それらの総データサイズ及び群数によってグループあたりの総データサイズの平均値が算出され、複数のグループ毎の総データサイズの平均値に対する超過度合いが判断される。そして、判断された超過度合いに応じて、該当するグループに属するデータが、２以上のデータ群に再度振り分けられる。これにより、データに付加された識別キー情報を利用してデータの振り分けが行われる場合に一部のグループに属するデータが集中したときでも、識別キー情報を変更することなしにデータを他のデータ群に再度振り分けることができる。その結果、負荷分散処理システムの利用者に条件設定作業等の負担をかけることなく、識別キー情報を変更しないことで容易に目的の処理を実現できる。なおかつ、同一の識別キー情報を有するデータ数が多い場合であっても、並列処理に割り当てられるデータを効率よく平滑化することができる。
【００１５】
入力されたデータのデータサイズと、データ加工手段から出力されるデータのデータサイズから、データの膨張率を算出する膨張率算出手段と、総データサイズと膨張率からデータ加工手段による加工後の総データサイズを予測するデータサイズ予測手段と、をさらに備え、平均値算出手段は、データサイズ予測手段によって予測された総データサイズの予測値を基に総データサイズの平均値を算出する、ことが好ましい。この場合、入力されたデータが加工によってデータサイズが増加する場合であっても、複数のグループ毎の総データサイズの平均値が正しく算出される。
【００１６】
また、総データサイズと入力されたデータのデータサイズとから振り分け処理の進捗率を計算する進捗率算出手段をさらに備え、平均値算出手段は、グループ毎データサイズ検出手段によって検出されたグループ毎の振り分け済みの総データサイズを基にグループ毎の平均データサイズを算出し、平均データサイズを進捗率で除算することにより、総データサイズの平均値を算出する、ことも好ましい。かかる構成を採れば、データ入力の進捗率に応じてグループ毎の最終的な総データサイズの平均値が正しく算出される。
【００１７】
さらに、平均値算出手段は、グループ毎の振り分け済みの総データサイズから外れ値を検出し、外れ値が検出されたグループは平均データサイズの算出対象から除外する、ことも好ましい。この場合、データの偏りが大きい場合にその偏りを早期に検出してデータ群への再振り分けを効率的に実行することができる。
【００１８】
またさらに、振分処理手段は、進捗率が所定値に達したことを条件に、データに対する再振り分け処理を実行する、ことも好ましい。こうすれば、初期のデータの振り分けのばらつきを無視することで余計なデータの再振り分け処理を防ぐことができる。
【００１９】
さらにまた、振分処理手段は、超過度合いが大きくなるに従って、該当するグループに属するデータを、より多くのデータ群に再度振り分ける、ことも好ましい。この場合、１つのグループに属するデータの偏りが大きい場合に、そのデータの偏りに起因するデータ振り分けの不均衡を効果的に解消することができる。
【００２０】
また、記憶手段は、並列処理のタスク数をさらに保持し、平均値算出手段は、総データサイズとタスク数とを基に算出した値、及び総データサイズと群数とに基づいて算出した値のうちで小さいほうを、総データサイズの平均値とする、ことも好ましい。かかる構成を採れば、グループ数が極端に少ない場合も、タスク数に応じた適切なデータ振り分けが可能にされる。
【００２１】
さらに、振分処理手段は、データ加工手段に入力されたデータ量が所定量に達する毎に、データに対する再振り分け処理を起動する、ことも好ましい。こうすれば、データ再振り分けに関する演算処理の負荷を適度に低減することができる。
【発明の効果】
【００２２】
本発明によれば、データの並列処理システムの利用者に負担をかけることなく目的の処理を実現でき、かつ、並列処理に割り当てられるデータを効率よく平滑化することができる。
【図面の簡単な説明】
【００２３】
【図１】本発明の好適な実施形態にかかる負荷分散処理システム１の概略構成図である。
【図２】図１の負荷分散処理システム１を構成する計算機のハードウェア構成を示すブロック図である。
【図３】図１の負荷分散処理システム１のデータ振り分け時の動作を示すフローチャートである。
【図４】ジョブの対象となる主テーブルの内容を示すデータ構成図である。
【図５】ジョブの対象となる従属テーブルの内容を示すデータ構成図である。
【図６】図１の負荷分散処理システム１によって生成および記憶される各種データの内容を示すデータ構成図である。
【図７】図１の負荷分散処理システム１によって生成および記憶される各種データの内容を示すデータ構成図である。
【図８】図１の負荷分散処理システム１によって生成および記憶される各種データの内容を示すデータ構成図である。
【図９】図１の負荷分散処理システム１によって生成および記憶される各種データの内容を示すデータ構成図である。
【図１０】本実施形態のＭａｐタスクによる中間出力レコードの振り分け状態を示す概念図である。
【図１１】従来のＭａｐタスクによる中間出力レコードの振り分け状態を示す概念図である。
【図１２】従来のＭａｐタスクによる中間出力レコードの振り分け状態を示す概念図である。
【図１３】本発明と異なる手法によるＭａｐタスクによる中間出力レコードの振り分け状態を示す概念図である。
【図１４】本発明と異なる手法によるＭａｐタスクによる中間出力レコードの振り分け状態を示す概念図である。
【発明を実施するための形態】
【００２４】
以下、図面とともに本発明による負荷分散処理システム及び負荷分散処理方法の好適な実施形態について詳細に説明する。なお、図面の説明においては同一要素には同一符号を付し、重複する説明を省略する。
【００２５】
図１は、本発明の好適な実施形態にかかる負荷分散処理システム１の概略構成図である。同図に示す負荷分散処理システム１は、ＬＡＮ、ＷＡＮ、公衆通信網等のデータ通信ネットワークに接続されており、データ通信ネットワーク経由で入力されたデータを、データマイニングや科学技術計算の目的で並列処理させるために、通信ネットワークに接続された複数の計算機に振り分ける振分処理を実行する情報処理システムである。なお、本発明にかかる負荷分散処理システム１は、単一のサーバ装置等の計算機によって実現されてもよいし、後述する複数の機能部が、通信ネットワークを介して接続された複数の計算機上に実装されていてもよいことは言うまでもない。
【００２６】
図２は、図１の負荷分散処理システム１を構成する計算機のハードウェア構成を示すブロック図である。負荷分散処理システム１を構成する計算機１００は、物理的には、ＣＰＵ３１と、主記憶装置であるＲＡＭ３２及びＲＯＭ３３と、ハードディスク装置等の補助記憶装置３６と、入力デバイスである入力キー、タッチパネル、マウス等の入力装置３５と、ディスプレイ、スピーカ等の出力装置３７と、他の端末装置やサーバ装置との間での通信ネットワークを介したデータの送受信を司る通信モジュール３４とを含む情報処理装置として構成されている。負荷分散処理システム１によって実現される機能は、図２に示すＣＰＵ３１、ＲＡＭ３２等のハードウェア上に所定のプログラムを読み込ませることにより、ＣＰＵ３１の制御のもとで通信モジュール３４、入力装置３５、出力装置３７を動作させるとともに、ＲＡＭ３２や補助記憶装置３６におけるデータの読み出し及び書き込みを行うことで実現される。
【００２７】
図１に戻って、この負荷分散処理システム１は、機能的な構成要素として、Ｍａｐタスク実行部１１を有している。このＭａｐタスク実行部１１は、ＭａｐＲｅｄｕｃｅジョブが施されるデータがレコード単位で入力されて、このデータをＲｅｄｕｃｅタスクを実行する複数の計算機に向けてグループ毎に振り分けて中間出力レコードとして出力する。このＭａｐタスク実行部１１は、通信ネットワークを介して接続された複数の計算機上に複数独立して実装されていてもよい。このＭａｐタスク実行部１１は、入力レコードデータサイズ検出部１７及び中間出力レコードデータサイズ検出部１８を含むデータ加工部（データ加工手段）１２と、振分処理部（振分処理手段）１３と、グループ数検出部（グループ毎データサイズ検出手段）１４と、グループ毎総データサイズ検出部（グループ毎データサイズ検出手段）１５と再振分部（振分処理手段）１６とを備えている。
【００２８】
さらに、負荷分散処理システム１は、総データサイズ記憶部（記憶手段）１９と、総タスク数記憶部（記憶手段）２０と、ジョブ進捗率算出部（進捗率算出手段）２１と、膨張率算出部（膨張率算出手段）２２と、予測最終サイズ算出部（データサイズ予測手段）２３と、平均最終サイズ算出部（平均値算出手段）２４と、グループ分割方法判断部（判断手段）２５とを備えている。
【００２９】
以下に、負荷分散処理システム１の各構成要素について詳細に説明する。
【００３０】
Ｍａｐタスク実行部１１のデータ加工部１２は、ジョブ対象の入力データをレコード単位で受け取り、このレコードを加工して中間キーと中間バリューからなる中間出力レコードを出力する。例えば、データ加工部１２は、レコードの内容を解析し、そのレコードに対して、解析結果に応じた都道府県別、男女別、年齢別等のデータ種別ごとに中間キーを付加する。すなわち、この中間キーは、レコードの内容を識別するための識別キーとなる。また、このデータ加工部１２に含まれる入力レコードデータサイズ検出部１７及び中間出力レコードデータサイズ検出部１８は、それぞれ、入力済みのレコードの総入力データサイズ及び出力済みの中間出力レコードの総出力データサイズをカウントする。
【００３１】
総データサイズ記憶部１９及び総タスク数記憶部２０には、それぞれ、負荷分散処理システム１に入力されるデータに関する「総データサイズ」、及び並列処理の「Ｒｅｄｕｃｅタスク数」が予め保持されている。ジョブ進捗率算出部２１は、ジョブ開始時に総データサイズ記憶部１９に保持された「総データサイズ」を読み出し、この「総データサイズ」及び入力レコードデータサイズ検出部１７によって検出された「総入力データサイズ」を基に、中間出力レコードのグループの振分処理（Ｍａｐタスク）の進捗率を計算する。
【００３２】
膨張率算出部２２は、入力レコードデータサイズ検出部１７によって検出された「総入力データサイズ」と、中間出力レコードデータサイズ検出部１８によって検出された「総出力データサイズ」から、Ｍａｐタスクにおけるデータの「膨張率」を計算する。なお、膨張率算出部２２は、データの縮小率を計算するようにしてもよい。
【００３３】
予測最終サイズ算出部２３は、ジョブ開始時に総データサイズ記憶部１９に保持された「総データサイズ」と、膨張率算出部２２によって計算された「膨張率」から、その時点におけるデータ加工部１２によって加工された後の中間出力レコードの最終的な総データサイズの予測値（予測最終サイズ）を計算する。
【００３４】
Ｍａｐタスク実行部１１の振分処理部１３は、中間出力レコードに付加された中間キーに基づいて、この中間出力レコードを複数のＲｅｄｕｃｅタスクに対応するデータ群のうちのいずれかに振り分けて、そのデータ群毎に「Ｒｅｄｕｃｅタスク番号」を付与する。詳細には、中間キーに対してパーティション計算を施してＲｅｄｕｃｅタスク番号を計算することで、振り分け先のＲｅｄｕｃｅタスクを決定する。このパーティション計算は、下記式（１）；
“Reduceタスク番号”＝“中間キーのハッシュ値”mod“Reduceタスク数”…（１）
によって行われる。なお、各Ｒｅｄｕｃｅタスクには、“０”から“Reduceタスク数”−１までのユニークな番号が予め割り当てられている。これにより、同一の中間キーを有する中間出力レコード群（グループ）は、同一のＲｅｄｕｃｅタスクに振り分けられる。
【００３５】
Ｍａｐタスク実行部１１のグループ数検出部１４は、振分処理部１３のパーティション計算と並行して、出現した中間キーの種類の数、すなわち、グループ数を検出する。また、Ｍａｐタスク実行部１１のグループ毎総データサイズ検出部１５は、パーティション計算と並行して、グループ毎の中間出力レコードの振分処理済みの総データサイズを検出する。
【００３６】
平均最終サイズ算出部２４は、予測最終サイズ算出部２３によって計算された「予測最終サイズ」をグループ数検出部１４によって検出された「グループ数」で除算することによって、中間出力レコードのグループあたりの最終的な総データサイズの平均値（平均最終サイズ）を算出する。また、平均最終サイズ算出部２４は、グループ毎総データサイズ検出部１５によって検出されたグループ毎の「総データサイズ」およびジョブ進捗率算出部２１によって計算された「進捗率」を基にして、グループあたりの平均データサイズを算出した後に、その平均データサイズを進捗率で除算することによって、平均最終サイズを算出することもできる。このとき、平均最終サイズ算出部２４は、グループ毎の総データサイズの外れ値を「簡便法」、「スミルノフ・グラブス検定」、或いは「トンプソン検定」によって検出し、外れ値として検出されたグループを除外して平均最終サイズを算出する。さらに、平均最終サイズ算出部２４は、上記のようにして算出された平均最終サイズの値と、予測最終サイズ算出部２３によって計算された「予測最終サイズ」を総タスク数記憶部２０に記憶された「Ｒｅｄｕｃｅタスク数」によって除算した値とのうち小さいほうの値を、最終的な平均最終サイズとして選択する機能も有する。また、平均最終サイズ算出部２４、算出された平均値に対して所定の倍率を乗じたものを、有効な平均最終サイズとして採用することもできる。この場合は、設定する倍率を１よりも大きく、または、１よりも小さくすることで、中間出力レコードの再振り分けが行われる機会の大小を制御できる。
【００３７】
グループ分割方法判断部２５は、複数のグループ毎に、グループ毎総データサイズ検出部１５によって検出された「総データサイズ」に関する「平均最終サイズ」に対する超過度合いを判断する。具体的には、グループ分割方法判断部２５は、「総データサイズ」の「平均最終サイズ」に対する割合を検出し、その割合が大きくなるに従ってグループの分割数を大きくするようにグループの分割方法を決定し再振分部１６に通知する。例えば、グループ分割方法判断部２５は、検出した割合が“２倍”、“３倍”等の所定値に達しているかに応じて、所定値に対して予め設定されたグループの分割数“２分割”、“３分割”を決定する。ここで、グループ分割方法判断部２５は、ジョブ進捗率算出部２１によって計算された「進捗率」が予め設定された値に達するまでは、グループの分割処理を実行しないように動作することが可能にされている。また、グループ分割方法判断部２５の分割方法の決定は、所定値との比較演算を用いる方法以外に、所定の計算式を用いてグループ分割数を算出してもよい。
【００３８】
再振分部１６は、グループ分割方法判断部２５から通知されたグループの分割方法に従って、該当のグループを複数のＲｅｄｕｃｅタスクに再度振り分ける。ここで、再振分部１６は、グループ分割方法判断部２５によって“分割不要”と判断されたグループに関しては、振分処理部１３の「パーティション計算」によって処理された中間出力レコードを、そのまま各Ｒｅｄｕｃｅタスクに振り分けるように出力する。これに対して、グループ分割方法判断部２５によって“２分割”と判断されたグループに関しては、振分処理部１３の「パーティション計算」によって処理された中間出力レコードを対象にして、該当するグループに属する中間出力レコードを２つのＲｅｄｕｃｅタスクに再度振り分けるように「Ｒｅｄｕｃｅタスク番号」を修正した後に、修正後の中間出力レコードを出力する。同様に、グループ分割方法判断部２５によって“３分割”と判断されたグループに関しては、振分処理部１３によって処理された中間出力レコードを対象にして、該当するグループに属する中間出力レコードを３つのＲｅｄｕｃｅタスクに再度振り分けるように「Ｒｅｄｕｃｅタスク番号」を修正する。
【００３９】
次に、図３〜図１０を参照して、負荷分散処理システム１のＲｅｄｕｃｅタスクへのデータの振り分けの動作について説明するとともに、本実施形態の負荷分散処理方法について詳述する。図３は、負荷分散処理システム１のデータ振り分け時の動作を示すフローチャート、図４及び図５は、それぞれ、ジョブの対象となる主テーブルおよび従属テーブルの内容を示すデータ構成図、図６〜９は、負荷分散処理システム１によって生成および記憶される各種データの内容を示すデータ構成図、図１０は、負荷分散処理システム１のＭａｐタスクによる中間出力レコードの振り分け状態を示す概念図である。
【００４０】
なお、ここでは、負荷分散処理システム１によって実現されるＭａｐＲｅｄｕｃｅを利用して振り分けられたデータを対象にした内部結合（Inner Join）処理を含む並列処理を想定し、並列処理対象のデータとして、図４に示すような“主キー”及び“データ”によって構成されたレコードを有する主テーブルＴ１と、図５に示すような“参照キー”及び“データ”によって構成される従属テーブルＴ２を対象とするものとする。また、この主テーブルＴ１の内容を収めたファイルは事前に各Ｒｅｄｕｃｅタスクに配布済みであり、負荷分散処理システム１に入力されるのは従属テーブルＴ２のみであるとする。すなわち、負荷分散処理システム１には、データサイズ“３Ｂｙｔｅ”の“参照キー”及びデータサイズ“９７Ｂｙｔｅ”の“データ”を含む計１００Ｂｙｔｅのレコードがレコード数“４０”で入力されるものとする。
【００４１】
まず、負荷分散処理システム１に対するデータ入力の前に、負荷分散処理システム１において、本実施形態によるグループの再振分処理を適用するか否かが設定される。この設定内容は、ＭａｐＲｅｄｕｃｅを利用するアプリケーションのカテゴリに応じて利用者によって決定される。そして、データ加工部１２への従属テーブルＴ２の入力が開始されると、負荷分散処理システム１によってグループの再振分処理を適用するか否かが設定内容により判断される（ステップＳ１０１）。判断の結果、再振分処理が適用されない場合には（ステップＳ１０１；ＮＯ）、データ加工部１２によって従来のＭａｐタスクが実行された後に、振分処理部１３によって中間出力レコードが各Ｒｅｄｕｃｅタスクに出力される（ステップＳ１０２）。
【００４２】
一方、再振分処理が適用される場合には（ステップＳ１０１；ＹＥＳ）、負荷分散処理システム１の利用者によって設定された「判断間隔」の入力が受け付けられる（ステップＳ１０３）。以降の処理では、入力される従属テーブルＴ２のレコード数がこの「判断間隔」に達する毎に、後述する従属テーブルＴ２の再振分処理を起動するように制御される。また、ジョブ開始後に、総データサイズ記憶部１９及び総タスク数記憶部２０に、利用者から入力された「総データサイズ」及び「Ｒｅｄｕｃｅタスク数」が記憶される（ステップＳ１０４）。例えば、図５に示すような従属テーブルＴ２が４つのＲｅｄｕｃｅタスクに振り分けられる場合には、「総データサイズ」＝“4000Byte”、「Ｒｅｄｕｃｅタスク数」＝“4”と記憶される。また、負荷分散処理システム１において、上記の「判断間隔」を判定するためのパラメータ「カウント」が“0”に設定される（ステップＳ１０５）。
【００４３】
次に、入力される従属テーブルＴ２のレコードが残っているか否かが、データ加工部１２によって判断される（ステップＳ１０６）。判断の結果、入力レコードが残っていない場合には（ステップＳ１０６；ＮＯ）、中間出力レコードの振り分け処理を終了する。一方、入力レコードが残っている場合には（ステップＳ１０６；ＹＥＳ）、データ加工部１２によってパラメータ「カウント」に“1”が加算される（ステップＳ１０７）。その後、入力された従属テーブルＴ２がデータ加工部１２によって中間出力レコードに加工される（ステップＳ１０８、Ｍａｐ処理）。このＭａｐ処理によって従属テーブルＴ２に含まれるデータが加工されることにより、データサイズが“10Byte”増加した中間バリューを含む中間出力レコードが生成される。さらに、Ｍａｐ処理においては、入力レコードデータサイズ検出部１７によって「総入力データサイズ」がカウントされると同時に、中間出力レコードデータサイズ検出部１８によって「総出力データサイズ」がカウントされる。
【００４４】
次に、データ加工部１２によって「カウント」の値が「判断間隔」に達したか否かが判断される（ステップＳ１０９）。この判断の結果、未だ「判断間隔」に達していない場合には（ステップＳ１０９；ＮＯ）、振分処理部１３によって中間出力レコードに含まれる「参照キー」を対象に上記式（１）を適用したパーティション計算がなされることによって、中間出力レコードにＲｅｄｕｃｅタスク番号が付与される（ステップＳ１１３）。そして、振分処理部１３によってＲｅｄｕｃｅタスク番号が付与された中間出力レコードが、再振分部１６を経由して対応するＲｅｄｕｃｅタスクに出力される（ステップＳ１１４）。ここで、図４には主テーブルＴ１の主キーに対応するハッシュ値Ｖｈが示されており、Ｒｅｄｕｃｅタスクの総数が“4”である場合には、この主キーと同一の従属キーを有する従属テーブルＴ２は、４つのＲｅｄｕｃｅタスク番号“#0”〜“#3”が割り振られることになる。
【００４５】
その一方で、「カウント」の値が「判断間隔」に達した場合には（ステップＳ１０９；ＹＥＳ）、データ加工部１２によって「カウント」の値が“0”にリセットされる（ステップＳ１１０）。さらに、グループ分割方法判断部２５により、同一の中間キーを有する中間出力レコードの各グループに関して、再振分処理の必要があるか否かが判断される（ステップＳ１１１）。その後、グループ分割方法判断部２５による判断結果が記憶された後に、再振分部１６に通知される（ステップＳ１１２）。次に、再振分部１６により、上記判断結果に含まれるグループの分割数に基づいて中間出力レコードのパーティション計算が再度行われることによって、同一のグループに属する中間出力レコードに対して複数のＲｅｄｕｃｅタスク番号を再度割り振る（ステップＳ１１３）。そして、再振分部１６によってＲｅｄｕｃｅタスク番号が修正された中間処理レコードが、対応するＲｅｄｕｃｅタスクに対して出力された後に（ステップＳ１１４）、処理がステップＳ１０６に戻される。入力レコードが無くなった時点で（ステップＳ１０６；ＮＯ）、負荷分散処理システム１のデータ振分処理が終了される。Ｒｅｄｕｃｅタスクでは、事前に配布されている主テーブルＴ１と振り分けられた中間出力レコードを対象にして、主テーブルＴ１の主キーと従属テーブルＴ２の参照キー、言い換えると中間出力レコードの中間キーに基づいて、内部結合（Inner Join）することにより、最終出力レコードを生成および出力する。
【００４６】
ここで、図６〜９を参照しながら、図５に示す従属テーブルＴ２が入力された際の負荷分散処理システム１に保持される各種パラメータの変化状態について、具体的に説明する。これらの図には、図５に示す８レコードの従属テーブルＴ２が繰り返し５回入力された場合の各種パラメータの内容の変化を時系列に示している。
【００４７】
まず、図６（ａ）に示すように、負荷分散処理システム１に最初の８レコードが入力されたとき、中間キーで識別されるグループ毎の総データサイズがグループ毎総データサイズ検出部１５によって検出されて保持される。また、図６（ｂ）に示すように、入力レコードデータサイズ検出部１７によって総入力データサイズ“800Byte”が、中間出力レコードデータサイズ検出部１８によって総出力データサイズ“880Byte”が、それぞれ検出および保持され、それらを基に膨張率算出部２２によって膨張率“1.1”が計算および保持され、予測最終サイズ算出部２３によって予測最終サイズ“4,400Byte”が計算および保持される。また、この予測最終サイズおよびグループ数検出部１４で検出されたグループ数“5”を基にして、平均最終サイズ算出部２４によって平均最終サイズ“880Byte”が算出および保持される。さらに、平均最終サイズ算出部２４は、ジョブ進捗率算出部２１によって算出された進捗率およびグループ毎の総データサイズから、外れ値を考慮した平均最終サイズ“550Byte”を算出することもできる。そして、平均最終サイズ算出部２４によって、上記の平均最終サイズの値と、予測最終サイズ算出部２３によって計算された予測最終サイズをＲｅｄｕｃｅタスク数によって除算した値とのうち小さいほうの値“550Byte”が、最終的な平均最終サイズとして選択される。
【００４８】
なお、判断間隔が“8”に設定されていたとすると、最初の８レコードが入力されると、グループ分割方法判断部２５により、中間出力レコードの各レコードの再振分処理の必要性が判断され、いずれのグループの総データサイズも平均最終サイズを超過していないので再振り分けの必要はないと判断される。そして、次のグループ分割の判断が行われるまで、最新の再振分処理の必要性の判断結果に基づいて、入力レコードに対して再振分部１６による再振分処理を行わないで従来のパーティション計算が施される。
【００４９】
次に、９〜１６レコード目が入力されると、図７（ａ），（ｂ）に示すように、グループ“ＣＣＣ”の総データサイズ“880Byte”が平均最終サイズ“550Byte”を超過しているので、グループ分割方法判断部２５により、グループ“ＣＣＣ”の中間出力レコードの再振り分けの必要があると判断される。そして、次のグループ分割の判断が行われるまで、再振分部１６によって既に振分処理部１３によって計算されたハッシュ値に対して“1”を加算するように修正される。すると、これまでＲｅｄｕｃｅタスク“#1”に割り当てられていたグループ“ＣＣＣ”は、以降Ｒｅｄｕｃｅタスク“#2”に割り当てられることになる。その後、次回のグループ分割判断が行われるまで、最新の再振分処理の必要性の判断結果に基づいて、入力レコードに対して再振分部１６によって修正されたパーティション計算が施される。
【００５０】
さらに、１７〜２４レコード目が入力されると、図８（ａ），（ｂ）に示すように、グループ“ＣＣＣ”の総データサイズ“1,320Byte”が平均最終サイズ“550Byte”の２倍を超過しているので、グループ分割方法判断部２５により、グループ“ＣＣＣ”の中間出力レコードの２回目の再振り分けの必要があると判断される。そして、再振分部１６によって既に振分処理部１３によって計算されたハッシュ値に対して更に“1”を加算するように修正される。すると、これまでＲｅｄｕｃｅタスク“#2”に割り当てられていたグループ“ＣＣＣ”は、以降Ｒｅｄｕｃｅタスク“#3”に割り当てられることになる。その後、次回のグループ分割判断が行われるまで、最新の再振分処理の必要性の判断結果に基づいて、入力レコードに対して再振分部１６によって修正されたパーティション計算が施される。
【００５１】
さらに、２５〜３２レコード目が入力されると、図９（ａ），（ｂ）に示すように、グループ“ＣＣＣ”の総データサイズ“1,760Byte”が平均最終サイズ“550Byte”の３倍を超過しているので、グループ分割方法判断部２５により、グループ“ＣＣＣ”の中間出力レコードの３回目の再振り分けの必要があると判断される。そして、再振分部１６によって既に振分処理部１３によって計算されたハッシュ値に対して更に“1”を加算するように修正される。すると、これまでＲｅｄｕｃｅタスク“#3”に割り当てられていたグループ“ＣＣＣ”は、以降Ｒｅｄｕｃｅタスク“#0”に割り当てられることになる。その後、次回のグループ分割判断が行われるまで、最新の再振分処理の必要性の判断結果に基づいて、入力レコードに対して再振分部１６によって修正されたパーティション計算が施される。
【００５２】
図１０には、負荷分散処理システム１による中間出力レコードの振り分け状態を、図１１には、従来のパーティション計算による中間出力レコードの振り分け状態を、それぞれ示している。各Ｒｅｄｕｃｅタスクに割り振られた中間出力レコードのデータサイズの標準偏差は、図１０の場合は約257.97、図１１の場合は約673.61となり、本実施形態の負荷分散処理システム１のほうが各Ｒｅｄｕｃｅタスク間のばらつきが小さくされており、各Ｒｅｄｕｃｅタスク間の負荷の平滑化が実現されていることが分かる。
【００５３】
以上説明した負荷分散処理システム１およびそれを用いた負荷分散処理方法によれば、入力されるデータに関する総データサイズが予め記憶され、同一の中間キーを有する中間出力レコードのグループ毎に、並列処理に課される複数のデータ群に振り分けられる。それに伴い、中間出力レコードのグループ毎の総データサイズと、それらのグループに関するグループ数が検出され、それらの総データサイズ及びグループ数によってグループあたりの総データサイズの平均値（平均最終サイズ）が算出され、複数のグループ毎の総データサイズの平均値に対する超過度合いが判断される。そして、判断された超過度合いに応じて、該当するグループに属するデータが、２以上のデータ群に再度振り分けられる。これにより、データに付加された中間キーを利用してデータの振り分けが行われる場合に一部のグループに属するデータが集中したときでも、中間キーを変更することなしにデータを他のデータ群に再度振り分けることができる。その結果、負荷分散処理システム１の利用者に中間キーの動的な変更のための条件設定作業等の負担をかけることなく、中間キーを変更しないことで容易に目的の処理を実現できる。つまり、利用者は中間キーの内容に依存したＲｅｄｕｃｅプログラムを従来通り記述することができる。なおかつ、同一の中間キーを有するグループのデータ数が相対的に多い場合であっても、そのグループを複数のＲｅｄｕｃｅタスクに分割して割り振ることで、並列処理に割り当てられる中間出力レコードを効率よく平滑化することができる。
【００５４】
また、アプリケーションの実行開始の際に、本実施形態によるグループの再振分処理を適用する設定がなされていた場合、負荷分散処理システム１では、アプリケーションの実行の最中において、グループ分割を行うかどうかの判断が自動的に行われるため、グループ分割を行うかどうかを判断するための条件をアプリケーションプログラム毎に指定する手間が省ける。また、グループを分割する判断が下された場合にグループを何分割するかも利用者が指定することが可能であるため、グループ分割方法を必要に応じてカスタマイズすることが可能である。
【００５５】
また、入力データに関する総データサイズと膨張率から中間出力レコードの総データサイズを予測し、総データサイズの予測値を基にグループあたりの総データサイズの平均値を算出するので、入力されたデータが加工によってデータサイズが増加する場合であっても、複数のグループ毎の総データサイズの平均値が正しく算出される。
【００５６】
また、中間出力レコードの振り分け処理の進捗率を計算し、グループ毎の平均データサイズを進捗率で除算することにより、グループ毎の総データサイズの平均値を算出するので、データ入力の進捗率に応じてグループ毎の最終的な総データサイズの平均値が正しく算出される。
【００５７】
さらに、外れ値が検出されたグループはグループ毎の平均データサイズの算出対象から除外されるので、データの偏りが大きい場合に極端に大きなグループの平均データサイズへの影響を防ぐことで、その偏りを早期に検出してＲｅｄｕｃｅタスクへの中間出力レコードのグループの再振り分けを効率的に実行することができる。
【００５８】
また、データ入力の進捗率が所定値に達したことを条件に、グループの再振り分け処理を実行するので、初期のデータの振り分けのばらつきを無視することで余計なデータの再振り分け処理を防ぐことができる。
【００５９】
さらに、グループのデータサイズの平均値に対する超過度合いが大きくなるに従って、該当するデータ群に振り分けられるデータを、より多くのデータ群に再度振り分けるので、１つのグループに属するデータの偏りが大きい場合に、そのデータの偏りに起因するデータ振り分けの不均衡を効果的に解消することができる。
【００６０】
また、入力データの総データサイズをＲｅｄｕｃｅタスク数で除算して算出した値、及び総データサイズと中間出力レコードのグループ数とに基づいて算出した値のうちで小さいほうを、総データサイズの平均値とするので、グループ数が極端に少ない場合も、総Ｒｅｄｕｃｅタスク数に応じた適切なデータ配分が可能にされる。
【００６１】
さらに、入力データのレコード数が所定数に達する毎に、中間出力レコードに対する再振り分け処理を起動するので、中間出力レコードの再振り分けに関する演算処理の負荷を適度に低減することができる。
【符号の説明】
【００６２】
１…負荷分散処理システム、１２…データ加工部（データ加工手段）、１３…振分処理部（振分処理手段）、１４…グループ数検出部（グループ毎データサイズ検出手段）、１５…グループ毎総データサイズ検出部（グループ毎データサイズ検出手段）、１６…再振分部（振分処理手段）、１９…総データサイズ記憶部（記憶手段）、２０…総タスク数記憶部（記憶手段）、２１…ジョブ進捗率算出部（進捗率算出手段）、２２…膨張率算出部（膨張率算出手段）、２３…予測最終サイズ算出部（データサイズ予測手段）、２４…          平均最終サイズ算出部（平均値算出手段）、２５…グループ分割方法判断部（判断手段）。
【図１】
2012118669.tif 000003
【図２】
2012118669.tif 000004
【図３】
2012118669.tif 000005
【図４】
2012118669.tif 000006
【図５】
2012118669.tif 000007
【図６】
2012118669.tif 000008
【図７】
2012118669.tif 000009
【図８】
2012118669.tif 000010
【図９】
2012118669.tif 000011
【図１０】
2012118669.tif 000012
【図１１】
2012118669.tif 000013
【図１２】
2012118669.tif 000014
【図１３】
2012118669.tif 000015
【図１４】
2012118669.tif 000016