(57)【要約】【課題】処理効率を向上させることを課題とする。【解決手段】マスタサーバは、第１の分散処理を実行する複数のスレーブサーバのいずれかから、第１の分散処理において入力データの一部が処理された処理結果のサイズに関するサイズ情報を取得する。マスタサーバは、第１の分散処理により生成されて複数のスレーブサーバそれぞれに記憶されるデータを用いる第２の分散処理におけるデータ配置情報を取得する。マスタサーバは、サイズ情報およびデータ配置情報に基づき、複数のスレーブサーバそれぞれが第１の分散処理で生成するデータの、配置パターンを規定するデータの配置指示を複数のスレーブサーバに送信する。【選択図】図３
2017191387.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
第１の分散処理を実行する複数のノードのいずれかから、前記第１の分散処理において入力データの一部が処理された処理結果のサイズに関するサイズ情報を取得する処理と、
前記第１の分散処理により生成されて前記複数のノードそれぞれに記憶されるデータを用いる第２の分散処理におけるデータ配置情報を取得する処理と、
前記サイズ情報および前記データ配置情報に基づき、前記複数のノードそれぞれが前記第１の分散処理で生成するデータの、配置パターンを規定するデータの配置指示を前記複数のノードに送信する処理と
を実行させることを特徴とするデータ処理プログラム。
【請求項２】
前記送信する処理は、前記サイズ情報および前記データ配置情報に基づき規定される、前記複数のノードそれぞれが前記第１の分散処理で生成するデータを前記複数のノードに配置する配置パターンを含む前記データの配置指示を、前記複数のノードに送信することを特徴とする請求項１に記載のデータ処理プログラム。
【請求項３】
前記送信する処理は、前記入力データの所定領域が割当てられる前記第２の分散処理を実行するノードに、前記複数のノードによる各第１の分散処理のうち前記所定領域のデータに対する処理結果を格納することを規定する前記データの配置指示を、前記複数のノードに送信することを特徴とする請求項１に記載のデータ処理プログラム。
【請求項４】
前記取得する処理は、前記入力データの一部の処理前のサイズと処理後のサイズとから、前記第１の分散処理によるデータ増減の比率を算出して、前記比率と前記入力データのサイズとから、前記第１の分散処理で得られる処理結果のサイズを算出し、
前記送信する処理は、前記処理結果のサイズおよび前記データ配置情報に基づいて規定される前記配置パターンを規定するデータの配置指示を前記複数のノードに送信することを特徴とする請求項１に記載のデータ処理プログラム。
【請求項５】
前記送信する処理は、前記処理結果のサイズを前記複数のノードの数で分割し、分割された各領域のデータが当該データに対して前記第２の分散処理を実行するノードに配置されることを規定する前記データの配置指示を前記複数のノードに送信することを特徴とする請求項４に記載のデータ処理プログラム。
【請求項６】
コンピュータが、
第１の分散処理を実行する複数のノードのいずれかから、前記第１の分散処理において入力データの一部が処理された処理結果のサイズに関するサイズ情報を取得する処理と、
前記第１の分散処理により生成されて前記複数のノードそれぞれに記憶されるデータを用いる第２の分散処理におけるデータ配置情報を取得する処理と、
前記サイズ情報および前記データ配置情報に基づき、前記複数のノードそれぞれが前記第１の分散処理で生成するデータの、配置パターンを規定するデータの配置指示を前記複数のノードに送信する処理と
を実行することを特徴とするデータ処理方法。
【請求項７】
第１の分散処理を実行する複数のノードのいずれかから、前記第１の分散処理において入力データの一部が処理された処理結果のサイズに関するサイズ情報を取得する取得部と、
前記第１の分散処理により生成されて前記複数のノードそれぞれに記憶されるデータを用いる第２の分散処理におけるデータ配置情報を取得する取得部と、
前記サイズ情報および前記データ配置情報に基づき、前記複数のノードそれぞれが前記第１の分散処理で生成するデータの、配置パターンを規定するデータの配置指示を前記複数のノードに送信する送信部と
を有することを特徴とするデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理プログラム、データ処理方法およびデータ処理装置に関する。
【背景技術】
【０００２】
クラウドコンピューティングの普及に伴い、クラウド上に保存される大量のデータであるビッグデータを複数のサーバで分散して処理を実行する分散処理システムが利用されている。また、ビッグデータを分析して各種サービスに役立てることも行われる。例えば、ポイントカードの属性情報やPOS（Point  of  sale  system）データを分析する事で、どのようなお客様がどのような商品を購入するかを分析することが行われる。
【０００３】
このような分散処理システムとしては、HDFS（Hadoop  Distributed  File  System）とMapReduceとを基盤技術とするHadoop（登録商標）が知られている。HDFSは、複数のサーバにデータを分散格納するファイルシステムである。MapReduceは、HDFS上のデータをタスクと呼ばれる単位で分散処理する仕組みであり、Map処理、Shuffleソート処理、Reduce処理を実行する。また、分析処理としては、並列計算用の通信ライブラリであるMPI（Message  Passing  Interface）などが知られている。
【０００４】
例えば、MapReduce処理とMPI処理とを実行する分散処理システムは、ネームノードやジョブトラッカーとして動作するマスタサーバと、タスクトラッカーやデータノードと動作するとともにMPI処理を実行するスレーブサーバとを有する。そして、各スレーブサーバは、MapReduce処理において、ＣＳＶ形式の入力ファイルに対してMap処理、Shuffleソート処理、Reduce処理を実行し、バイナリ形式に変換して、各スレーブサーバのローカルファイルに書き込む。続いて、各ローカルファイルに書き込まれたデータがHDFS上で結合される。その後、各スレーブサーバは、MPI処理において、HDFS上からバイナリデータを読み込んで、主成分分析を実行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１３−５４５１６９号公報
【特許文献２】特開２０１１−１５０５０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記技術では、MPI処理においてデータを読み出す際の通信量が多く、全体として処理効率がよくない。
【０００７】
例えば、上記分散処理システムの各スレーブサーバは、ネームノードの指示にしたがって、MapReduce処理の実行結果をローカルのデータノードに書き込む。その後、各スレーブサーバは、各スレーブサーバのローカルファイルに書き込まれたデータをHDFS上で結合する。このため、スレーブサーバがMPI処理を実行する時、ネットワークを経由して処理対象のデータを取得する事象が発生する。ネットワークを経由するデータ取得は、ネットワークの帯域や負荷による影響が大きく、処理遅延に繋がる。
【０００８】
１つの側面では、処理効率を向上させることができるデータ処理プログラム、データ処理方法およびデータ処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
第１の案では、データ処理プログラムは、コンピュータに、第１の分散処理を実行する複数のノードのいずれかから、前記第１の分散処理において入力データの一部が処理された処理結果のサイズに関するサイズ情報を取得する処理を実行させる。データ処理プログラムは、コンピュータに、前記第１の分散処理により生成されて前記複数のノードそれぞれに記憶されるデータを用いる第２の分散処理におけるデータ配置情報を取得する処理を実行させる。データ処理プログラムは、コンピュータに、前記サイズ情報および前記データ配置情報に基づき、前記複数のノードそれぞれが前記第１の分散処理で生成するデータの、配置パターンを規定するデータの配置指示を前記複数のノードに送信する処理を実行させる。
【発明の効果】
【００１０】
一実施形態によれば、処理効率を向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１にかかるシステムの全体構成例を示す図である。
【図２】図２は、実施例１にかかるチャンク割当てを説明する図である。
【図３】図３は、実施例１にかかるシステムの機能構成例を示す機能ブロック図である。
【図４】図４は、データ配置を説明する図である。
【図５】図５は、システム全体の処理の流れを示すフローチャートである。
【図６】図６は、従来処理を説明する図である。
【図７】図７は、実施例１による配置結果を説明する図である。
【図８】図８は、実施例２にかかる処理の流れを示すフローチャートである。
【図９】図９は、ハードウェア構成例を説明する図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するデータ処理プログラム、データ処理方法およびデータ処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１３】
［全体構成］
図１は、実施例１にかかるシステムの全体構成例を示す図である。図１に示すように、この分散処理システムは、マスタサーバ１０と、スレーブサーバ２０やスレーブサーバ３０などの複数のスレーブサーバとがインターネットなどのネットワークを介して相互に通信可能に接続される。
【００１４】
一例として、この分散処理システムは、入力データに対してMapReduce処理を分散処理した後、MapReduce処理の処理結果に対してMPI処理を分散処理する。また、ここでは、入力データの一例として、ＣＳＶ形式の文字列で記述された行列データを用いる。入力データは、MapReduce処理によって、浮動小数点のバイナリ形式の行列データに変換される。その後、バイナリ形式の行列データに対して、MPI処理などの主成分分析アルゴリズムが実行される。
【００１５】
この分散処理システムでは、Hadoop（登録商標）などの分散処理フレームワークを使用した分散処理アプリケーションが各サーバで実行されており、データ基盤としてＨＤＦＳなどを使用する。Hadoop（登録商標）では、巨大なファイルである入力データを例えば６４ＭＢなどの単位（以下、チャンクと記載する場合がある）に分割して、HDFSのデータノードに保存する。
【００１６】
MPI処理においては、スレーブサーバ毎にランク（rank）と呼ばれるIDが割当てられている。例えば、ｎ並列で計算する場合は、ランク０からランク（ｎ−１）がスレーブサーバに割当てられる。本実施例では、特異値分解関数を使って、主成分分析を実行する例で説明する。また、行列データの持ち方は、行単位でｎ個の均等分割とし、ランク０が１個目のブロック、ランク（ｎ−１）が最後のブロックを担当することとする。
【００１７】
マスタサーバ１０は、分散処理システムを統括的に管理するサーバであり、MapReduce処理におけるジョブトラッカーやネームノードとして機能する。例えば、マスタサーバ１０は、メタ情報などを用いて、どのデータがいずれのスレーブサーバに格納されているのかを特定する。また、マスタサーバ１０は、各スレーブサーバに割当てるタスクやジョブなどを管理し、Map処理やReduce処理などのタスクを各スレーブサーバに割当てる。また、マスタサーバ１０は、各スレーブサーバに対して、MapReduce処理の結果をどのデータノードに格納するかを指示する。
【００１８】
スレーブサーバ２０、スレーブサーバ３０は、Map処理およびReduce処理を実行するサーバであり、MapReduce処理におけるデータノードやタスクトラッカー、ジョブクライアントとして機能する。また、各スレーブサーバは、マスタサーバ１０によって割り当てられたMapタスクを実行し、Mapタスクの中でキーのハッシュ値を計算し、その計算で得られた値によって振分先のReduceタスクを決定する。
【００１９】
その後、各スレーブサーバは、マスタサーバ１０に割り当てられたReduceタスクを実行し、マスタサーバ１０から指示されたHDFS上のデータノードに処理結果を格納する。そして、各スレーブサーバは、自サーバに割当てられたランクにしたがって、該当するデータをHDFSから読み出して、MPI処理を実行する。
【００２０】
［チャンク割当て］
次に、実施例１にかかるチャンク割当ての例について説明する。図２は、実施例１にかかるチャンク割当てを説明する図である。図２に示すように、マスタサーバ１０のジョブトラッカーは、管理者等から予め指定された分散数等にしたがって、MapタスクやReduceタスクの割当てを決定し、各スレーブサーバのタスクトラッカーにMapタスクを割当てる。
【００２１】
各スレーブサーバは、Mapタスクを実行すると、Mapタスクの中でキーのハッシュ値を計算し、その計算で得られた値によって振分先のReduceタスクを決定し、Reduceタスクを実行する。そして、各スレーブサーバは、マスタサーバ１０のネームノードから指定されたデータノードに、Reduce処理結果すなわちチャンクを格納する。
【００２２】
ここで、マスタサーバ１０は、第１の分散処理であるMapReduce処理を実行する複数のスレーブサーバのいずれかから、MapReduce処理において入力データの一部が処理された処理結果のサイズに関するサイズ情報を取得する。そして、マスタサーバ１０は、MapReduce処理により生成されて複数のスレーブサーバに記憶されるデータを用いるMPI処理におけるデータ配置情報を取得する。その後、マスタサーバ１０は、サイズ情報およびデータ配置情報に基づき、複数のスレーブサーバそれぞれがMapReduce処理で生成するデータの、配置パターンを規定するデータの配置指示を複数のスレーブサーバに送信する。
【００２３】
例えば、マスタサーバ１０は、各スレーブサーバがローカルファイルに書き込んだデータ量を取得し、各データ量の合計を算出して、MapReduce処理後に得られるデータサイズを算出する。その後、マスタサーバ１０は、MapReduce処理後に得られるデータサイズをスレーブサーバの数で分割し、各スレーブサーバ（ランク）にデータ領域を割当てる。例えば、スレーブサーバが１６台とした場合、マスタサーバ１０は、MapReduce処理後に得られるデータファイルの先頭から１／１６に含まれるチャンクをスレーブサーバ２０（データノード）へ配置し、次の１／１６に含まれるチャンクをスレーブサーバ３０へ配置するように、各スレーブサーバに指示する。
【００２４】
具体的には、マスタサーバ１０は、入力データに対するMapReduce処理をカウントし、入力データの所定％（例えば１％）のデータに対してスレーブサーバ２０がMapReduce処理した結果を取得する。続いて、マスタサーバ１０は、処理前のデータサイズと処理後のデータサイズとを比較して、MapReduce処理におけるデータ変換率を算出する。そして、マスタサーバ１０は、入力データ全体のサイズにデータ変換率を乗算して、MapReduce処理後に得られるデータサイズを算出する。
【００２５】
その後、マスタサーバ１０は、MapReduce処理後に得られるデータサイズをスレーブサーバの数で分割し、各スレーブサーバ（ランク）にデータ領域を割当てる。例えば、スレーブサーバが１６台とした場合、マスタサーバ１０は、MapReduce処理後に得られるデータファイルの先頭から１／１６に含まれるチャンクをスレーブサーバ２０（データノード）へ配置し、次の１／１６に含まれるチャンクをスレーブサーバ３０へ配置するように、各スレーブサーバに指示する。
【００２６】
このように、マスタサーバ１０は、MapReduce処理後のデータサイズを取得し、MPI処理のランクと読込みチャンクが同じノードになるようにMapReduce処理後のデータを配置する。したがって、マスタサーバ１０は、MPI処理におけるデータ読み込みを高速化し、処理効率を向上させることができる。
【００２７】
［機能構成］
次に、図３を用いて、マスタサーバ１０と各スレーブサーバの機能構成について説明する。図３は、実施例１にかかるシステムの機能構成例を示す機能ブロック図である。なお、各スレーブサーバは、同様の構成を有するので、ここでは、スレーブサーバ２０を例にして説明する。
【００２８】
（マスタサーバ１０の機能構成）
図３に示すように、マスタサーバ１０は、通信部１１、記憶部１２、制御部１５を有する。通信部１１は、有線や無線を問わず、他の装置との通信を制御する処理部である。例えば、通信部１１は、各スレーブサーバにタスクの割当情報やデータの配置情報、各種指示などを送信し、各スレーブサーバからタスクの処理結果などを受信する。
【００２９】
記憶部１２は、制御部１５が実行するプログラムや制御部１５が処理に利用するデータなどを記憶する記憶装置であり、例えばメモリやハードディスクなどである。この記憶部１２は、ジョブＤＢ１２ａとMPI設定情報ＤＢ１２ｂとを記憶する。
【００３０】
ジョブＤＢ１２ａは、分散処理対象のジョブ情報を記憶するデータベースである。例えば、ジョブＤＢ１２ａは、ジョブを識別する識別子である「JobID」、ジョブに含まれるMap処理タスクの総数である「総Mapタスク数」、ジョブに含まれるReduce処理タスクの総数である「総Reduceタスク数」などを記憶する。
【００３１】
また、ジョブＤＢ１２ａは、Map処理タスクやReduce処理タスクに関する情報を記憶する。例えば、ジョブＤＢ１２ａは、どのスレーブサーバにどのMapタスクやReduceタスクが割当てられたかを特定する情報、どのスレーブサーバにどのようなデータが記憶されているかを示す情報などを記憶する。
【００３２】
MPI設定情報ＤＢ１２ｂは、MPI処理におけるデータ配置情報であり、MPI処理におけるデータ配置に関するデータ構造に関する情報を記憶するデータベースである。具体的には、MPI設定情報ＤＢ１２ｂは、ネームノードがMPIプログラムから受け取るデータ配置の情報を記憶する。
【００３３】
例えば、MPI設定情報ＤＢ１２ｂは、「対象ファイル名、分割数、担当ランク表」などを記憶する。ここで記憶される「対象ファイル名」は、どのファイルがMapReduce処理からMPIへ渡されるかを示す。「分割数」は、MPIへの入力ファイルの分割数を示す。「担当ランク表」は、各分割とランク値の対応表であり、例えばランク０が入力データのどの領域を担当するかなどを示す情報であり、「ランク０、先頭から１／６」などを記憶する。なお、担当ランク表が省略された場合は、先頭から順に、ランク０、ランク１、ランク２・・・と割当てることとする。
【００３４】
また、MPI設定情報ＤＢ１２ｂは、MPIにおけるデータの配置に関してより詳細な情報を記憶することもできる。具体的には、MPI設定情報ＤＢ１２ｂは、MPIの行列計算パッケージがプログラム内部で行列の配置を表現する「Array  Descriptor（実態は長さ9の整数配列）に関する情報を記憶することもできる。
【００３５】
例えば、MPI設定情報ＤＢ１２ｂは、「DTYPE_A、CTXT_R、M_A、N_A、MB_A、NB_A、RSRC_A、CSRC_A、LLD_A」などを記憶する。「DTYPE_A」は、行列を宣言する記載であり、例えば１の場合は蜜行列を示す。「CTXT_R」は、BLACSのコンテキストハンドルであり、行ノード数や列ノード数が含まれる。「M_A」は、行列全体の行数を示し、「N_A」は、行列全体の列数を示す。「MB_A」は、行を分散させるBlocking  Factorであり、「NB_A」は、列を分散させるBlocking  Factorである。「RSRC_A」は、ローカルメモリ上の最初の要素の行座標であり、「CSRC_A」は、ローカルメモリ上の最初の要素の列座標である。「LLD_A」は、ローカルに持つ行方向のサイズであり、例えば「LLD_A≧MAX（１，LOCr（M_A））」である。
【００３６】
なお、ScaLapackなどの行列計算パッケージでは、各ノードのArray  Descriptorの情報を集めると行列の要素をどこへ送れば良いかが分かる。また、行列計算パッケージでは、ノード毎にデータの持ち方が異なる為、ノード番号やBLACSコンテキストハンドル内でのノード位置等のそのノードを表す情報と上記Array  Descriptorとを組で全ノードから収集する。
【００３７】
制御部１５は、マスタサーバ１０全体を司る処理部であり、例えばプロセッサなどである。この制御部１５は、タスク割当部１６、データ取得部１７、配置指示部１８を有する。なお、タスク割当部１６、データ取得部１７、配置指示部１８は、プロセッサが有する電子回路の一例やプロセッサが実行するプロセスの一例である。
【００３８】
タスク割当部１６は、各スレーブサーバにMapタスクやReduceタスクを割当て、各スレーブサーバに各タスクの実行を指示する処理部である。具体的には、タスク割当部１６は、スレーブサーバ２０からMapタスクの割当要求を受信すると、未処理のMapタスクをスレーブサーバ２０に割当てる。同様に、タスク割当部１６は、スレーブサーバ２０からReduceタスクの割当要求を受信すると、未処理のReduceタスクをスレーブサーバ２０に割当てる。なお、MapタスクやReduceタスクの割当ては、一般的なMapReduce処理と同様なので、ここでは詳細な説明は省略する。
【００３９】
データ取得部１７は、MapReduce処理で得られるデータ量を取得する処理部である。具体的には、データ取得部１７は、各スレーブサーバがローカルファイルに書き込んだデータ量を取得する。つまり、データ取得部１７は、各スレーブサーバのMapReduce処理によって得られたデータ量を取得する。そして、データ取得部１７は、各スレーブノードから取得したデータ量の合計をファイルサイズとして算出して、配置指示部１８に出力する。
【００４０】
配置指示部１８は、データ取得部１７から通知したファイルサイズの情報と、MPI設定情報ＤＢ１２ｂに記憶される情報に基づき、HDFS上に格納するデータの配置パターンを規定するデータの配置指示を複数のスレーブサーバに送信する処理部である。具体的には、配置指示部１８は、MPI処理のランクと読込みチャンクが同じノードになるようにMapReduce処理後のデータを配置する。
【００４１】
例えば、配置指示部１８は、データ取得部１７から、ファイルサイズが「０．８ＴＢ」であることを取得する。また、配置指示部１８は、MPI設定情報ＤＢ１２ｂに記憶される情報にしたがって、ランク数がｎ個、スレーブサーバ２０から順にランク０が割当てられていること、入力ファイルの先頭から順にランク０以降を割当てることを特定する。そして、配置指示部１８は、スレーブサーバへのランクの割当情報や入力ファイルの各分割領域とランクの対応関係などを含む配置指示を各スレーブサーバに送信する。
【００４２】
例えば、配置指示部１８は、０．８ＴＢのファイルサイズをｎ個に分割し、先頭から順に、１／ｎずつ各ランクに割当てることを示す指示を各スレーブサーバに送信する。この指示内容の例としては、MapReduce処理で生成するファイルの１／ｎ内のデータをランク０であるスレーブサーバ２０に割当て、次の１／ｎ内のデータをランク１であるスレーブサーバ３０に割当てるなどが含まれる。つまり、各ランクには入力ファイルの「０．８／ｎ」が割当てられる。また、配置指示部１８は、各スレーブサーバの処理結果を監視して処理結果のデータサイズを特定し、データが１チャンクに収まるように、各ランクに割当てるチャンクに含める処理結果を決定することもできる。
【００４３】
また、制御部１５は、各スレーブサーバからMapReduce処理の結果を受信し、全MapReduce処理が完了すると、各スレーブサーバにMPI処理の開始を指示する。このとき、制御部１５は、各スレーブサーバのランク割当情報や各ランクの該当データの格納先情報などをあわせて、各スレーブサーバに送信する。例えば、ランク割当情報としては、「スレーブサーバ、割当ランク」として「スレーブサーバ２０、ランク０」のようにどのスレーブサーバにどのランクが割当てられているかを示す情報が含まれる。また、格納先情報としては、「スレーブサーバ、格納ランク」として「スレーブサーバ３０、ランク１」のようにどのスレーブサーバにどのランクのデータ（チャンク）が格納されているかを示す情報が含まれる。
【００４４】
（スレーブサーバ２０の機能構成）
図３に示すように、スレーブサーバ２０は、通信部２１、記憶部２２、制御部２５を有する。通信部２１は、有線や無線を問わず、他の装置との通信を制御する処理部である。例えば、通信部２１は、マスタサーバ１０からタスクの割当情報やデータの配置指示などを受信し、マスタサーバ１０にタスクの処理結果などを送信する。
【００４５】
記憶部２２は、制御部２５が実行するプログラムや制御部２５が処理に利用するデータなどを記憶する記憶装置であり、例えばメモリやハードディスクなどである。この記憶部２２は、データＤＢ２２ａを記憶する。データＤＢ２２ａは、MapReduce処理結果やMPIへの入力データであるチャンクを記憶するデータベースである。つまり、データＤＢ２２ａは、各スレーブサーバのデータノードの機能に該当する。
【００４６】
制御部２５は、スレーブサーバ２０全体を司る処理部であり、例えばプロセッサなどである。この制御部２５は、タスク実行部２６、結果配置部２７、MPI実行部２８を有する。なお、タスク実行部２６、結果配置部２７、MPI実行部２８は、プロセッサが有する電子回路の一例やプロセッサが実行するプロセスの一例である。
【００４７】
タスク実行部２６は、マスタサーバ１０に割当てられるMapタスクやReduceタスクを実行する処理部である。なお、タスク実行部２６が実行するMap処理、Shuffle処理、Reduce処理は、一般的なMapReduce処理と同様なので、詳細な説明は省略する。
【００４８】
例えば、タスク実行部２６は、MapタスクおよびReduceタスクが終了すると、ローカルファイルであるデータＤＢ２２ａに処理結果を格納する。そして、タスク実行部２６は、格納したデータ量を抽出して、マスタサーバ１０に通知する。
【００４９】
結果配置部２７は、マスタサーバ１０からのデータ配置指示にしたがって、ローカルファイルのデータＤＢ２２ａに記憶されるMapReduce処理の結果をHDFSに配置する処理部である。具体的には、結果配置部２７は、マスタサーバ１０から受信した配置指示から、どのスレーブサーバにどのランクが割当てられているか、入力ファイルのどの領域をどのランク（スレーブサーバ）に割当てるかなどを特定する。
【００５０】
そして、結果配置部２７は、MPI処理のランクと読込みチャンクが同じノードになるようにMapReduce処理後のデータを配置する。例えば、結果配置部２７は、ランク０に該当するスレーブサーバには、ランク０に割当てられるデータが格納されるように、MapReduce処理の結果の格納を制御する。なお、配置の詳細な例については後述する。
【００５１】
MPI実行部２８は、MapReduce処理後にMPI処理を実行する処理部である。具体的には、MPI実行部２８は、マスタサーバ１０から取得したランク割当情報にしたがって、自装置のランクを特定する。そして、MPI実行部２８は、マスタサーバ１０から取得したランク割当情報にしたがって、自装置のランクに対応するチャンクを読み出して、MPI処理を実行する。また、MPI実行部２８は、MPI処理の結果をマスタサーバ１０に送信することもでき、ディスプレイ等に表示させることもできる。
【００５２】
［データ配置］
次に、MapReduce処理後のデータ配置の例について説明する。つまり、MPI処理におけるチャンクの格納について説明する。図４は、データ配置を説明する図である。なお、ここでは入力ファイルの先頭から順にランク０、ランク１、ランク２が割当てられているものとする。また、マスタサーバ１０は、入力データの一部から、MPI処理の対象となるファイルのサイズを推定済みであり、当該ファイルのどの領域をどのランク（スレーブサーバ）に割当てるかを決定済みとする。
【００５３】
図４に示すように、マスタサーバ１０によるタスク割当の結果、スレーブサーバ２０は、入力データの１と４に対してMapReduce処理を実行する。同様に、スレーブサーバ３０は、入力データの３と６に対してMapReduce処理を実行し、スレーブサーバ４０は、入力データの２と５と７に対してMapReduce処理を実行する。
【００５４】
そして、各スレーブサーバは、MapReduce処理を入力データの先頭から順にHDFS上に格納する。このとき、各スレーブサーバまたはマスタサーバ１０は、各処理結果のデータサイズを監視することができる。
【００５５】
その後、各スレーブサーバおよびマスタサーバ１０は、処理結果であるデータ１、２、３が約６４ＭＢである１チャンクに該当することを特定する。また、各スレーブサーバ等は、データ４、５、６とデータ７の一部が１チャンクに該当し、データ７の一部とデータ８、９、１０が１チャンクに該当することを特定する。
【００５６】
この結果、スレーブサーバ２０は、データ１をランク０に該当するスレーブサーバ２０に格納し、スレーブサーバ３０は、データ３をランク０に該当するスレーブサーバ２０に格納し、スレーブサーバ４０は、データ２をランク０に該当するスレーブサーバ２０に格納する。
【００５７】
また、スレーブサーバ２０は、データ４をランク１に該当するスレーブサーバ３０に格納し、スレーブサーバ３０は、データ６をランク１に該当するスレーブサーバ３０に格納し、スレーブサーバ４０は、データ５とデータ７の一部とをランク１に該当するスレーブサーバ３０に格納する。
【００５８】
この結果、ランク０のスレーブサーバ２０は、MPI処理時に、自ノードからデータを読み出すことができる。また、ランク１のスレーブサーバ３０は、MPI処理時に、ほとんどのデータを自ノードから読み出し、一部のデータを他のノード（スレーブサーバ４０）から読み出すことができる。
【００５９】
［処理の流れ］
図５は、システム全体の処理の流れを示すフローチャートである。図５に示すように、マスタサーバ１０のタスク割当部１６は、処理が開始されると（Ｓ１０１：Ｙｅｓ）、タスク割当を実行して各スレーブサーバにMapタスクやReduceタスクを割当てる（Ｓ１０２）。そして、タスク割当部１６は、タスクの割当てが完了すると、タスクの実行を各スレーブサーバに通知する（Ｓ１０３）。
【００６０】
その後、スレーブサーバ２０のタスク実行部２６は、MapタスクやReduceタスクを実行し、全タスクが完了すると（Ｓ１０４：Ｙｅｓ）、処理結果をローカルファイルに保存する（Ｓ１０５）。そして、タスク実行部２６は、マスタサーバ１０に対して、タスク処理結果で得られたデータ量を入力ファイルのデータ量として通知する（Ｓ１０６）。
【００６１】
そして、マスタサーバ１０の配置指示部１８は、MPI処理のデータ配置情報をMPI設定情報ＤＢ１２ｂから読み込み（Ｓ１０７）、データ配置情報とMPI処理への入力ファイルのデータ量とを用いて、データ配置指示を生成して、各スレーブサーバに通知する（Ｓ１０８）。
【００６２】
その後、各スレーブサーバの結果配置部２７は、マスタサーバ１０から通知されたデータ配置指示にしたがって、ローカルファイルに保存したデータ（MapReduceの処理結果）をHDFS上に配置する（Ｓ１０９）。例えば、結果配置部２７は、HDFSを構成する各スレーブサーバに、MPI処理のランクと読込みチャンクが同じノードになるようにMapReduce処理後のデータを配置する。
【００６３】
そして、データの配置が完了すると（Ｓ１１０：Ｙｅｓ）、マスタサーバ１０の制御部１５等は、MPI処理の開始を各スレーブサーバに指示する（Ｓ１１１）。なお、マスタサーバ１０の制御部１５等は、「スレーブサーバとランクとデータの記憶先」を対応付けた情報を各スレーブサーバに送信する。
【００６４】
この指示を受付けた各スレーブサーバのMPI実行部２８は、マスタサーバ１０から通知された「スレーブサーバとランクとデータの記憶先」とを示す情報にしたがって、割り当てられたランクに該当するデータを読み出してMPI処理を実行する（Ｓ１１２）。その後、各スレーブサーバのMPI実行部２８は、MPI処理結果を格納する（Ｓ１１３）。
【００６５】
［効果］
上述したように、分散処理システムは、MPI側の都合に合わせてデータノードを決定するので、遠隔書込みとなる確率が高くなる。なお、遠隔書込みはバッファが十分あれば突き放しにする事が可能で、アプリを待たせることがない。また、分散処理システムは、MPI側の都合に合わせてデータノードを決定するため、従来技術では遠隔読み込みであったのが、ローカル読み込みとなる。また、データの読み込みは、データが届くまでアプリケーションの実行が停止するため影響が大きいので、そのコストが大きく削減される事は、アプリケーションの性能向上に直結する。したがって、マスタサーバ１０は、MPI処理におけるデータ読み込みを高速化し、処理効率を向上させることができる。
【００６６】
ここで、従来技術と実施例１とを比較する。図６は、従来処理を説明する図である。図７は、実施例１による配置結果を説明する図である。ここでは上記比率を１とする。つまり、分散処理対象の入力ファイルのサイズ＝MPI処理の入力ファイルのサイズとする。また、４台のスレーブサーバで分散処理することとし、ランク数を４とする。
【００６７】
図６に示すように、従来であれば、MPI処理に依存することなく、MapReduce処理に依存して、MapReduce処理結果が各スレーブサーバのローカルファイルに保存された後、HDFS上で結合される。このため、お客様のビッグデータをランク数である４で分割してMapReduce処理を実行した場合、どの処理結果をどのデータノードに格納するかは、ネームノードがMPI処理に関係なく決定する。つまり、ランク０の処理対象データが、スレーブサーバ２０とスレーブサーバ３０に跨って格納されたり、ランク１の処理対象データが、スレーブサーバ３０、４０、５０に跨って格納されたりする。
【００６８】
したがって、各ランクのスレーブサーバは、MPI処理を実行するときに、該当するチャンクを他のスレーブサーバから読み出す処理を実行する。つまり、HDFSからの読み込み時に遠隔読み込みによるチャンクの整列が多発する場合がある。遠隔読み込みは、チャンクが届かないと完了できないので、MPIを実行するアプリケーションは、チャンクの読み込みが完了しないと次に進めない。この結果、１チャンクずつ読み込むことになるので、処理時間への影響が大きく、処理遅延が発生する。
【００６９】
これに対して、図７に示すように、実施例１では、各スレーブサーバのローカルファイルに書き込まれたMapReduce処理結果が、MPI処理に依存してHDFSに再配置される。このため、お客様のビッグデータをランク数である４で分割してMapReduce処理を実行した場合、どの処理結果をどのデータノードに格納するかを、ネームノードがMPI処理のランクにしたがって決定できる。つまり、各ランクのデータが同一ノードに格納できる。例えば、ランク０の処理対象データが、スレーブサーバ２０に格納され、ランク１の処理対象データが、スレーブサーバ３０に格納される。
【００７０】
したがって、各ランクのスレーブサーバは、MPI処理を実行するときに、該当するチャンクを自ノードから読み出すことができ、遠隔読み込みを削減できる。つまり、MPI処理の前に、HDFS上でチャンクを整列させるので、各スレーブサーバは、途中のバッファが足りる限り、チャンクの遠隔書き込みを突き放しで行える。このため、アプリケーションは、チャンクの書込み完了を待たずに、次のチャンクの書き込みを実行できるので、処理時間への影響が小さく、全体の処理時間を短縮できる。
【実施例２】
【００７１】
ところで、実施例１では、各スレーブサーバがMapReduce処理結果をローカルファイルに書き込んだ後、HDFS上に再配置する例を説明したが、分散処理の種別等によっては、各スレーブサーバがMapReduce処理結果をHDFS上にそのまま書き込む場合もある。
【００７２】
この場合、各スレーブノードのMapReduce処理結果のデータ量がHDFSに書き込まれるまで特定できないことから、マスタサーバ１０は、HDFS上に格納するデータの配置パターンを規定するデータの配置指示を決定することができない。
【００７３】
そこで、実施例２では、マスタサーバ１０が、スレーブノードのMapReduce処理結果で得られるデータ量を予測して、HDFS上のデータの配置パターンを決定する例を説明する。
【００７４】
例えば、マスタサーバ１０のデータ取得部１７は、MapReduce処理において入力データの一部が処理された処理結果のサイズに関するサイズ情報を取得する。具体的には、データ取得部１７は、MapReduce処理での、例えば最初の１％の入力ファイルの処理で出力ファイルがどれだけ生成されたかを記録して入力量と出力量の比率を測定する。
【００７５】
例えば、データ取得部１７は、ファイルシステム等を用いて、入力ファイルのデータサイズが１ＴＢであることを特定する。続いて、データ取得部１７は、入力ファイルの約１％に当たる１０ＧＢの入力データに対してMapReduce処理を実行するスレーブサーバ２０に、処理結果の送信を要求する。つまり、データ取得部１７は、データ予測に使用するデータを処理するスレーブサーバに、処理結果の送信要求を送信する。このとき、データ取得部１７は、データサイズなどの該当データに関する情報もあわせて、スレーブサーバ２０に送信することができる。
【００７６】
ここで、データ取得部１７は、MapReduce処理結果のデータサイズが８ＧＢであった場合、入力量と出力量の比率を０．８と算出する。この結果、データ取得部１７は、１ＴＢの入力ファイルがMapReduce後に、MPI処理に入力されるファイルサイズを、「１ＴＢ×０．８＝０．８ＴＢ」と算出する。そして、データ取得部１７は、算出したMPI処理に対する入力ファイルのファイルサイズを、配置指示部１８に出力する。
【００７７】
配置指示部１８は、実施例１と同様、データ取得部１７から通知されたファイルサイズの情報と、MPI設定情報ＤＢ１２ｂに記憶される情報に基づき、HDFS上に格納するデータの配置パターンを規定するデータの配置指示を複数のスレーブサーバに送信する。
【００７８】
また、スレーブサーバ２０のタスク実行部２６は、マスタサーバ１０から、データ予測に使用する処理結果の要求を受信した場合、該当するMapReduce処理の結果をマスタサーバ１０に送信する。例えば、タスク実行部２６は、入力ファイルの先頭から、入力ファイル全体の１％に該当する領域にあるデータに対してMapReduce処理を実行すると、その処理結果をマスタサーバ１０に送信する。
【００７９】
なお、タスク実行部２６は、データ予測に使用するために、一部のMapReduce処理の結果を送信した後は、後続のMPI処理の種別や入力ファイルの種別等により、最初から実行し直すこともでき、続きから実行し直すこともできる。また、マスタサーバ１０のデータ取得部１７が、MPI処理の種別や入力ファイルの種別等により、最初からやり直すかどうかなどを決定して、該当するスレーブサーバに送信することもできる。
【００８０】
なお、実施例２では、MPI処理への入力ファイルのサイズが予め特定できない例を説明したが、MPI処理への入力ファイルのサイズが予め特定できる場合には、比率算出を省略することもできる。また、比率が約１の場合は、MapReduce処理の入力ファイルを用いてデータ配置を制御することもできる。
【００８１】
続いて、実施例２にかかるデータ予測の処理を説明する。図８は、実施例２にかかる処理の流れを示すフローチャートである。図８に示すように、マスタサーバ１０のタスク割当部１６は、処理が開始されると（Ｓ２０１：Ｙｅｓ）、タスク割当を実行して各スレーブサーバにMapタスクやReduceタスクを割当てる（Ｓ２０２）。
【００８２】
続いて、マスタサーバ１０のデータ取得部１７は、データ推定のためのサイズ（初期サイズ）を決定し（Ｓ２０３）、該当するスレーブサーバ２０に、初期サイズを通知する（Ｓ２０４）。
【００８３】
その後、スレーブサーバ２０のタスク実行部２６は、MapタスクやReduceタスクを実行し、初期サイズのタスクを実行すると、タスクの実行を一時停止する（Ｓ２０５）。そして、タスク実行部２６は、マスタサーバ１０に対して、初期サイズのタスク処理結果を通知する（Ｓ２０６）。
【００８４】
そして、マスタサーバ１０のデータ取得部１７は、初期サイズの処理前のデータサイズと処理後のデータサイズとから、データ変換の比率を算出する（Ｓ２０７）。続いて、データ取得部１７は、データ変換の比率と入力ファイルのサイズを用いて、MPI処理への入力ファイルのデータ量を推定する（Ｓ２０８）。
【００８５】
その後、マスタサーバ１０の配置指示部１８は、MPI処理のデータ配置情報をMPI設定情報ＤＢ１２ｂから読み込み（Ｓ２０９）、データ配置情報とMPI処理への入力ファイルのデータ量とを用いて、データ配置指示を生成して、各スレーブサーバに通知する（Ｓ２１０）。続いて、マスタサーバ１０の制御部１５等は、MapReduce処理のタスクの実行を、Ｓ２０５でタスクを停止させたスレーブサーバ２０に通知する（Ｓ２１１）。
【００８６】
その後、各スレーブサーバの結果配置部２７は、Reduceタスクが完了すると（Ｓ２１２：Ｙｅｓ）、データ配置指示にしたがって、データノード（スレーブサーバ）にタスク結果を格納する（Ｓ２１３）。
【００８７】
そして、マスタサーバ１０の制御部１５等は、各スレーブサーバに割当てられたMapReduce処理の全タスクが完了すると（Ｓ２１４：Ｙｅｓ）、MPI処理の開始を各スレーブサーバに指示する（Ｓ２１５）。なお、マスタサーバ１０の制御部１５等は、「スレーブサーバとランクとデータの記憶先」を対応付けた情報を各スレーブサーバに送信する。
【００８８】
この指示を受付けた各スレーブサーバのMPI実行部２８は、マスタサーバ１０から通知された「スレーブサーバとランクとデータの記憶先」とを示す情報にしたがって、割り当てられたランクに該当するデータを読み出してMPI処理を実行する（Ｓ２１６）。その後、各スレーブサーバのMPI実行部２８は、MPI処理結果を格納する（Ｓ２１７）。
【００８９】
上述したように、分散処理システムは、最初の１％分を取得後捨てるとすると、処理する量が１０１％になり、処理コストがかかる。また、分散処理システムは、MapReduce処理結果のデータ量が特定できないシステム環境であっても、データ量を予測した上で、HDFS上へのデータ配置を制御することができる。したがって、分散処理システムは、システム環境やアプリケーションに依存することなく、処理効率を向上させることができる。
【実施例３】
【００９０】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【００９１】
［主成分分析］
上記実施例では、MPI処理を例に説明したが、これに限定されるものではなく、他の主成分分析を用いることもできる。また、行列データに限定するものではなく、他の形式のデータでも同様に処理することができる。
【００９２】
［複数アプリによる共有］
例えば、MapReduce処理のアプリで生成したファイルを複数のMPIアプリで入力する場合があり得る。その場合、MPIアプリでのメモリレイアウトが異なり、それぞれに適したチャンクのデータノードへの割り付けが異なる事があり得る。一方、HDFSはデータの安全性の為に、チャンクのコピーを複数持つように設定する事ができる。その機能を利用し、複数のコピー各々を複数のMPIアプリに都合が良いように配置する。ただし、複数のコピーは単一サーバ故障により失われることが無いように、異なるサーバに割り付ける。
【００９３】
これは特に複数アプリで行列の先頭を持つランク０が同じサーバとなる場合に特に問題となり得る。そこで、ランク０が異なるサーバとなるように、ネームノードでランクのまとまりを考えるときに、できるだけ異なるチャンク配置となるようにランクの配置を決めることもできる。例えば、MPIアプリＡの時は、スレーブサーバ２０をランク０、スレーブサーバ３０をランク１、スレーブサーバ４０をランク２に決定し、MPIアプリＢの時は、スレーブサーバ２０をランク２、スレーブサーバ３０をランク０、スレーブサーバ４０をランク１に決定する。このようにして、単一サーバ故障による影響範囲を限定的にすることができる。
【００９４】
なお、上記実施例では、各スレーブサーバ上では各ランクのデータが格納される例を説明したが、これに限定されるものではなく、データの配置を制御したとしても、データの大きさによっては、同じランクのデータが複数のスレーブサーバに跨って格納される場合もある。例えば、スレーブサーバ２０は、ランク０のデータの一部が格納できない場合、ランク１に対応するスレーブサーバ２０に、その一部を格納するデータを格納する。このような場合であっても、従来技術より遠隔書込みを削減することができるので、処理効率を向上させることができる。
【００９５】
［入力ファイル］
上記実施例では、データ変換の比率が１以外を例にして説明したが、MPI処理への入力ファイルのサイズが予め特定できる場合には、データ予測の処理を省略することもできる。また、データ変換の比率が１の場合には、データ予測の処理を省略することもできる。この場合、マスタサーバ１０は、MapReduce処理への入力ファイルをランク数で分割して、データ配置を制御することができる。したがって、上記実施例では、MapReduce処理後に、一度データを組み立ててからデータ配置を実行していたが、このデータ組み立てを省略することができるので、より処理効率を向上させることができる。
【００９６】
［システム］
また、図３に示した各装置の各構成は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、任意の単位で分散または統合して構成することができる。例えば、データ取得部１７と配置指示部１８を統合するなどすることができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００９７】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００９８】
［ハードウェア］
上記の実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することで実現できる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。なお、マスタサーバ１０と各スレーブサーバは、同一の構成を有するので、ここではノード１００として説明する。図９は、ハードウェア構成例を説明する図である。
【００９９】
図９が示すように、ノード１００、通信インタフェース１００ａ、ＨＤＤ（Hard  Disk  Drive）１００ｂ、メモリ１００ｃ、ＣＰＵ（Central  Processing  Unit）などのプロセッサ１００ｄを有する。なお、各部は、バスを介して接続される。
【０１００】
通信インタフェース１００ａは、各機能部の説明時に示した通信制御部に該当し、例えばネットワークインタフェースカードなどである。ＨＤＤ１００ｂは、各機能部の説明時に示した処理部を動作させるプログラムや図３等で説明したＤＢ等を記憶する。
【０１０１】
プロセッサ１００ｄは、各機能部の説明時に示した各処理部と同様の処理を実行するプログラムをＨＤＤ１００ｂ等から読み出してメモリ１００ｃに展開することで、図３等で説明した各機能を実行するプロセスを動作させる。すなわち、このプロセスは、マスタサーバ１０が有するタスク割当部１６、データ取得部１７、配置指示部１８と同様の機能を実行する。また、このプロセスは、スレーブサーバ２０が有するタスク実行部２６、結果配置部２７、MPI実行部２８と同様の機能を実行する。
【０１０２】
このようにノード１００は、プログラムを読み出して実行することで、データ処理方法を実行する情報処理装置として動作する。また、ノード１００は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、ノード１００によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【符号の説明】
【０１０３】
１０  マスタサーバ
１１  通信部
１２  記憶部
１２ａ  ジョブＤＢ
１２ｂ  MPI設定情報ＤＢ
１５  制御部
１６  タスク割当部
１７  データ取得部
１８  配置指示部
２０  スレーブサーバ
２１  通信部
２２  記憶部
２２ａ  データＤＢ
２５  制御部
２６  タスク実行部
２７  結果配置部
２８  MPI実行部
【図１】
2017191387.tif 000003
【図２】
2017191387.tif 000004
【図３】
2017191387.tif 000005
【図４】
2017191387.tif 000006
【図５】
2017191387.tif 000007
【図６】
2017191387.tif 000008
【図７】
2017191387.tif 000009
【図８】
2017191387.tif 000010
【図９】
2017191387.tif 000011