(57)【要約】【課題】分散処理を適切に実行することを課題とする。【解決手段】管理サーバと複数の分散処理サーバとを含む分散処理システムにおいて、複数の分散処理サーバが入力データの分散処理を実行する際に、管理サーバは、ヘッダ情報とデータとを含む行列形式データより、ヘッダ情報を抽出する。そして、管理サーバは、行列形式データを行単位で分割した複数の分割行列形式データを生成する。その後、管理サーバは、複数の分割行列形式データが割り当てられる複数の分散処理サーバそれぞれに対し、ヘッダ情報の参照に関するヘッダ参照情報を送信する。【選択図】図１
2016206757.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
ヘッダ情報とデータとを含む行列形式データより、前記ヘッダ情報を抽出し、
前記行列形式データを行単位で分割した複数の分割行列形式データを生成し、
前記複数の分割行列形式データが割り当てられる複数の指示対象サーバそれぞれに対し、前記ヘッダ情報の参照に関するヘッダ参照情報を送信する、
処理を実行させることを特徴とする分散処理プログラム。
【請求項２】
前記送信する処理は、前記複数の指示対象サーバそれぞれで実行される、入力データの１行目を前記ヘッダ情報とみなして統計処理を実行するアプリケーション宛に、前記ヘッダ参照情報を送信することを特徴とする請求項１に記載の分散処理プログラム。
【請求項３】
前記抽出する処理は、前記複数の指示対象サーバそれぞれがアクセス可能な領域に前記ヘッダ情報を格納し、
前記ヘッダ参照情報は、前記領域に関するパス情報を含むことを特徴とする請求項１または２に記載の分散処理プログラム。
【請求項４】
前記抽出する処理は、前記複数の指示対象サーバそれぞれがアクセス可能な領域に、前記行列形式データを識別する識別子と前記ヘッダ情報とを対応付けて格納し、
前記ヘッダ参照情報は、前記識別子を含むことを特徴とする請求項１または２に記載の分散処理プログラム。
【請求項５】
コンピュータが、
ヘッダ情報とデータとを含む行列形式データより、前記ヘッダ情報を抽出し、
前記行列形式データを行単位で分割した複数の分割行列形式データを生成し、
前記複数の分割行列形式データが割り当てられる複数の指示対象サーバそれぞれに対し、前記ヘッダ情報の参照に関するヘッダ参照情報を送信する、
処理を含むことを特徴とする分散処理方法。
【請求項６】
ヘッダ情報とデータとを含む行列形式データより、前記ヘッダ情報を抽出する抽出部と、
前記行列形式データを行単位で分割した複数の分割行列形式データを生成する生成部と、
前記生成部によって生成された分割行列形式データが割り当てられる複数の指示対象サーバそれぞれに対し、前記ヘッダ情報の参照に関するヘッダ参照情報を送信する送信部と
を有することを特徴とする情報処理装置。
【請求項７】
コンピュータに、
ヘッダ情報とデータとを含む行列形式データの前記ヘッダ情報の参照に関するヘッダ参照情報を受信し、
前記行列形式データが行単位で分割された分割行列形式データを受信し、
前記分割行列形式データに前記ヘッダ情報が含まれている場合は、前記分割行列形式データに対して所定の処理を実行し、前記分割行列形式データに前記ヘッダ情報が含まれていない場合は、前記ヘッダ参照情報を用いて前記ヘッダ情報を取得して前記所定の処理を実行する
処理を実行させることを特徴とする分散処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理プログラム、分散処理方法および情報処理装置に関する。
【背景技術】
【０００２】
Ｈａｄｏｏｐ（登録商標）を代表とするビッグデータ処理向けの汎用並列処理フレームワークが普及し、大規模データを分析する手法として、データ分析の並列化が広がっている。実際にデータを分析するデータアナリストは、統計解析向けのプログラミング言語としてＲ言語を始めとするデータ分析に向いたプログラミング言語を使用することがある。
【０００３】
一般的に、分析に用いられるデータはＣＳＶフォーマットなどのファイルとして用意され、データの種類を示す一行目のデータにはヘッダが設定される。Ｒ言語で開発されるＲアプリケーションが、一行目を実際のデータとして扱うのか、ヘッダとして扱うのかはＲアプリケーションの開発者が事前に決めた上で、対応した実行コードを記述したＲアプリケーションを用意する。
【０００４】
並列処理フレームワークを用いて複数のサーバ上でＲアプリケーションを並列実行する場合、大規模データを各サーバに分散させて並列処理が実行される。このため、分散先の各サーバに、ヘッダを扱えるＲアプリケーションやヘッダを扱えないＲアプリケーションを適切に配備した上で、データ分析の並列処理が実行される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２４３１９３号公報
【特許文献２】特開平０７−１６８８９０号公報
【特許文献３】特開平０９−１６６９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記技術では、大規模データが自動的に分割されたデータが各サーバに入力されるので、サーバ毎にヘッダを持つデータとヘッダを持たないデータが混在して入力として与えられ、Ｒアプリケーションが正しく実行されない場合がある。すなわち、ヘッダの有無によってデータのアクセス方法が異なるというＲ言語の制約によって、処理が適切に実行できずにエラーが発生する。
【０００７】
なお、並列化と分散処理との両方の知識を有する開発者であったとしても、どのサーバにヘッダ有りのデータが割り振られるかまでは予測できず、Ｒアプリケーションのエラーを回避することは難しい。また、ヘッダを別の場所に置いておき、分散先のサーバがそこからヘッダを取得する手法も考えられる。この場合、入力データに対応するヘッダを検索するためには、ヘッダのメタデータを用いることになる。しかし、ヘッダのメタデータはヘッダを実際に保存したサーバにしか保存されないので、他のサーバは保存先を特定することができず、ヘッダを取得することができない。
【０００８】
１つの側面では、分散処理を適切に実行することができる分散処理プログラム、分散処理方法および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
第１の案では、分散処理プログラムは、コンピュータに、ヘッダ情報とデータとを含む行列形式データより、前記ヘッダ情報を抽出する処理と、前記行列形式データを行単位で分割した複数の分割行列形式データを生成する処理を実行させる。分散処理プログラムは、コンピュータに、前記複数の分割行列形式データが割り当てられる複数の指示対象サーバそれぞれに対し、前記ヘッダ情報の参照に関するヘッダ参照情報を送信する処理を実行させる。
【発明の効果】
【００１０】
一実施形態によれば、分散処理を適切に実行することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１に係るシステムの全体構成例を示す図である。
【図２】図２は、実施例１に係る各装置の機能構成を示す機能ブロック図である。
【図３】図３は、入力データのデータ例を示す図である。
【図４】図４は、パス情報の例を示す図である。
【図５】図５は、ヘッダ有の判定手法を説明する図である。
【図６】図６は、ヘッダ無の判定手法を説明する図である。
【図７】図７は、管理サーバの処理の流れを示すフローチャートである。
【図８】図８は、分散処理サーバの処理の流れを示すフローチャートである。
【図９】図９は、MapReduce処理を実行する分散処理サーバのシステムスタックの例を説明する図である。
【図１０】図１０は、MapReduce処理への適用例を説明する図である。
【図１１】図１１は、実施例２に係る分散処理サーバのMap処理の流れを示すフローチャートである。
【図１２】図１２は、各サーバのハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示する分散処理プログラム、分散処理方法および情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１３】
［全体構成］
図１は、実施例１に係るシステムの全体構成例を示す図である。図１に示すように、このシステムは、管理サーバ１０、複数の分散処理サーバ２０、分散ファイルシステム３０、共有アクセス基盤４０が、ネットワーク５を介して相互に通信可能に接続される分散処理システムである。なお、ここで示したシステム構成は一例であり、サーバの数や構成などは任意に変更することができる。
【００１４】
この分散処理システムでは、Hadoop（登録商標）などの分散処理フレームワークを使用した分散処理アプリケーションが各サーバで実行されており、データ基盤としてＨＤＦＳ（Hadoop  Distributed  File  System）などを使用する。
【００１５】
管理サーバ１０は、分散処理を管理するサーバの一例である。この管理サーバ１０は、分散処理対象のデータを分散ファイルシステム３０に格納して管理し、データを行単位で分割して各分散処理サーバ２０に振り分ける。
【００１６】
各分散処理サーバ２０は、統計解析向けのプログラミング言語であるＲ言語で開発されたＲアプリケーションを実行する指示対象サーバの一例である。これらの分散処理サーバ２０は、管理サーバ１０から入力されるデータに対して各種処理を実行する。なお、分散処理サーバ２０が実行するＲアプリケーションは、データにヘッダがあるものとして処理するように開発されている。
【００１７】
分散ファイルシステム３０は、分散処理対象のデータを記憶するデータベースサーバの一例である。なお、ここでは、分散ファイルシステム３０がネットワーク５に接続される例で説明するが、これに限定されるものではなく、管理サーバ１０や各分散処理サーバ２０が有していてもよい。すなわち、各サーバが、データ基盤としてＨＤＦＳを利用したデータ管理を実行していればよい。また、共有アクセス基盤４０は、各サーバがアクセス可能なサーバやデータベースなどの一例である。
【００１８】
このようなシステム構成において、管理サーバ１０は、ヘッダ情報とデータとを含む行列形式データより、ヘッダ情報を抽出する。そして、管理サーバ１０は、行列形式データを行単位で分割した複数の分割行列形式データを生成する。管理サーバ１０は、複数の分割行列形式データが割り当てられ複数の分散処理サーバ２０それぞれに対し、ヘッダ情報の参照に関するヘッダ参照情報を送信する。
【００１９】
そして、各分散処理サーバ２０は、ヘッダ情報とデータとを含む行列形式データのヘッダ情報の参照に関するヘッダ参照情報を受信する。続いて、各分散処理サーバ２０は、行列形式データが行単位で分割された分割行列形式データを受信する。そして、各分散処理サーバ２０は、分割行列形式データにヘッダ情報が含まれている場合は、分割行列形式データに対して所定の処理を実行する。また、各分散処理サーバ２０は、分割行列形式データに前記ヘッダ情報が含まれていない場合は、ヘッダ参照情報を用いて前記ヘッダ情報を取得して所定の処理を実行する。
【００２０】
つまり、管理サーバ１０は、行列形式データのヘッダの格納先を示すパス情報を、行列形式データと共に各分散処理サーバ２０に送信する。この結果、ヘッダ有りを前提とするＲアプリケーションを各分散処理サーバ２０に配置しても、各分散処理サーバ２０は、ヘッダ無しのデータが入力されても適切に処理することができる。
【００２１】
［機能構成］
次に、図１に示した各装置の機能構成について説明する。なお、分散ファイルシステム３０や共有アクセス基盤４０は、一般的なサーバやＤＢ等と同様の構成を有するので、ここでは詳細な説明は省略する。図２は、実施例１に係る各装置の機能構成を示す機能ブロック図である。
【００２２】
（管理サーバ１０の構成）
図２に示すように、管理サーバ１０は、通信部１１、抽出部１２、格納部１３、通知部１４、分割部１５を有する。なお、抽出部１２、格納部１３、通知部１４、分割部１５は、プロセッサなどの電子回路が有する回路の一例やプロセッサなどが実行するプロセスの一例である。
【００２３】
通信部１１は、他の装置の通信を制御する処理部であり、例えば通信インタフェースなどである。例えば、通信部１１は、行列形式データを分散ファイルシステム３０に送信し、行列形式データのヘッダを共有アクセス基盤４０に送信し、行列形式データが分割された分割行列形式データを各分散処理サーバ２０に送信する。
【００２４】
抽出部１２は、分散処理の対象である、ヘッダとデータとから構成される行列形式データのヘッダを抽出する処理部である。具体的には、抽出部１２は、行列形式データの１行目をヘッダとして抽出し、格納部１３に通知する。
【００２５】
図３は、入力データのデータ例を説明する図である。図３に示すように、行列形式データは、ヘッダとして「data、store_id、customers、・・・、sales」を有し、データとして「2014/11/1、001、9023、・・・、4900000」などを有する。そして、抽出部１２は、図３に示す行列形式データが入力された場合、１行目の「data、store_id、customers、・・・、sales」を抽出する。
【００２６】
格納部１３は、入力データである行列形式データのヘッダ情報を格納する処理部である。例えば、格納部１３は、抽出部１２から通知されたヘッダ「data、store_id、customers、・・・、sales」と行列形式データを特定する識別子「Ａ０１」とを対応付けて、共有アクセス基盤４０の指定領域に格納する。そして、格納部１３は、格納先を特定するアクセスパスの情報「/header/user/user1/data1」を特定する。その後、格納部１３は、行列形式データを特定する識別子「Ａ０１」と、パス情報「/header/user/user1/data1」を通知部１４に通知する。
【００２７】
通知部１４は、分割された分割行列形式データを割り当てる各分散処理サーバ２０に対し、ヘッダ情報の参照に関するヘッダ参照情報を送信する処理部である。例えば、通知部１４は、行列形式データを特定する識別子「Ａ０１」と、パス情報「/header/user/user1/data1」を格納部１３から取得する。そして、通知部１４は、パス情報「/header/user/user1/data1」や識別子「Ａ０１」などの情報を各分散処理サーバ２０に送信する。なお、通知部１４は、複数の分散処理が並行して実行されている場合、識別子とパス情報をあわせて各分散処理サーバ２０に送信する。
【００２８】
分割部１５は、入力された行列形式データを行単位で分割した複数の分割行列形式データを生成して、各分散処理サーバ２０に送信する処理部である。例えば、分割部１５は、抽出部１２から行列形式データを取得し、分割処理の開始時を受け付けると、行列形式データを行単位で分割して各分散処理サーバ２０に送信する。
【００２９】
一例を挙げると、分割部１５は、図３に示す行列形式データの１行目（ヘッダ）と２行目の組と、３行目から５行目までの組の２組に分割する。そして、分割部１５は、１組目を第１の分散処理サーバ２０に送信し、２組目を第２の分散処理サーバ２０に送信する。なお、どのように分割してどのように振り分けるかは任意に設定することができ、分散処理フレームワークの規約等に沿って実行することもできる。
【００３０】
（分散処理サーバ２０の機能構成）
図２に示すように、分散処理サーバ２０は、通信部２１、パス情報ＤＢ２２、情報受信部２３、データ受信部２４、判定部２５、処理実行部２６を有する。なお、パス情報ＤＢ２２は、ハードディスクやメモリなどの記憶装置に記憶される。情報受信部２３、データ受信部２４、判定部２５、処理実行部２６は、プロセッサなどの電子回路が有する回路の一例やプロセッサなどが実行するプロセスの一例である。
【００３１】
通信部２１は、他の装置の通信を制御する処理部であり、例えば通信インタフェースなどである。例えば、通信部２１は、行列形式データが分割された分割行列形式データやパス情報などを受信する。
【００３２】
パス情報ＤＢ２２は、行列形式データのヘッダ情報の格納先に関する情報を記憶するデータベースである。具体的には、パス情報ＤＢ２２は、行列形式データごとに、管理サーバ１０から通知されたパス情報を記憶する。
【００３３】
図４は、パス情報の例を示す図である。図４に示すように、パス情報ＤＢ２２は、「ＩＤ、パス情報」を対応付けた情報を記憶する。「ＩＤ」は、行列形式データを特定する識別子を示し、「パス情報」は、ヘッダ情報にアクセスするための情報である。このように、「ＩＤ、パス情報」を対応付けて管理することで、分散処理サーバ２０は、ＩＤかパス情報かのいずれかがわかれば、共有アクセス基盤４０からヘッダを取得することができる。なお、ここでは、一例として「ＩＤ、パス情報」を記憶する例を説明したが、これに限定されるものではなく、例えばいずれか一方の情報を格納してもよい。
【００３４】
情報受信部２３は、管理サーバ１０からパス情報を受信する処理部である。例えば、情報受信部２３は、パス情報として「ＩＤ、パス情報」を管理サーバ１０から受信して、パス情報ＤＢ２２に格納する。
【００３５】
データ受信部２４は、分散処理対象のデータを受信する処理部である。具体的には、データ受信部２４は、行列形式データが行単位で分割された分割行列形式データを管理サーバ１０から受信して、判定部２５に出力する。例えば、データ受信部２４は、図３に示した行列形式データの１行目と２行目から構成される分割行列形式データを受信する。
【００３６】
判定部２５は、データ受信部２４によって受信されたデータにヘッダがあるか否かを判定する処理部である。具体的には、判定部２５は、入力データの一行目とそれ以降の列の属性を比較することで判定し、判定結果を処理実行部２６に通知する。属性とは、文字列（String型）や数値（int型、double型）などである。ヘッダは人が読むためのものであるため、文字列であることが多い。そこで、判定部２５は、一行目と二行目の属性が異なる列が含まれている場合、その入力データにはヘッダが含まれていると判定する。
【００３７】
図５は、ヘッダ有の判定手法を説明する図である。図５に示すように、判定部２５は、まず１行目の１列目の「data」と２行目の１列目の「2014/11/1」を比較し、２行目に「/」が入っていることから、両方共が文字列型であると判定し、同属性と判定する。続いて、判定部２５は、１行目の２列目の「store_id」と２行目の２列目の「I01」を比較し、２行目に「I」が入っていることから、両方共が文字列型であると判定し、同属性と判定する。さらに、判定部２５は、１行目の３列目の「customers」と２行目の３列目の「9023」を比較し、属性が文字列と数値であることから、異属性と判定する。この結果、図５の例の場合、判定部２５は、ヘッダ有りのデータであると判定する。
【００３８】
続いて、図６は、ヘッダ無の判定手法を説明する図である。図６に示すように、判定部２５は、まず１行目の１列目の「2014/11/1」と２行目の１列目の「2014/11/2」を比較し、両方に「/」が入っていることから、両方共が文字列型であると判定し、同属性と判定する。続いて、判定部２５は、１行目の２列目の「I02」と２行目の２列目の「I02」を比較し、両方に「I」が入っていることから、両方共が文字列型であると判定し、同属性と判定する。さらに、判定部２５は、１行目の３列目の「5069」と２行目の３列目の「5800」を比較し、両方の属性が数値であることから、同属性と判定する。また、判定部２５は、１行目の４列目の「2500000」と２行目の４列目の「2900000」を比較し、両方の属性が数値であることから、同属性と判定する。この結果、図６の例の場合、判定部２５は、ヘッダ無しのデータであると判定する。
【００３９】
なお、判定部２５は、受信した分割行列形式データの１行目と２行目の各列について、同属性か異属性かの判定を実行することもでき、３０行目までを判定対象とするなど予め決めた行数まで判定対象とすることもできる。
【００４０】
また、判定部２５は、パス情報ＤＢ２２に記憶されるパス情報を用いて、共有アクセス基盤４０からヘッダ情報を取得する。そして、判定部２５は、受信された分割行列形式データの１行目と共有アクセス基盤４０から読み出されたヘッダ情報とが一致する場合に、ヘッダ有りのデータと判定することもできる。
【００４１】
処理実行部２６は、受信された分割行列形式データに該当処理を実行する処理部である。具体的には、処理実行部２６は、受信された分割行列形式データに対して、ヘッダ有りを前提とするＲアプリケーションを用いた統計処理等を実行し、その結果を分散ファイルシステム３０に格納する。
【００４２】
例えば、処理実行部２６は、判定部２５からヘッダ有りの判定結果と分割行列形式データを取得した場合、受信した分割行列形式データの１行目をヘッダ情報として、該当処理を実行する。そして、処理実行部２６は、処理結果を分散ファイルシステム３０に格納する。
【００４３】
一方、処理実行部２６は、判定部２５からヘッダ有りの判定結果と受信データを取得した場合、パス情報ＤＢ２２からパス情報「/header/user/user1/data1」を読み出す。そして、処理実行部２６は、読み出した「/header/user/user1/data1」用いて共有アクセス基盤４０にアクセスしてヘッダ情報を取得し、受信データの１行目とする。その後、処理実行部２６は、受信データに追加された１行目をヘッダ情報として、該当処理を実行する。そして、処理実行部２６は、処理結果からヘッダ情報を削除して分散ファイルシステム３０に格納する。
【００４４】
［管理サーバの処理］
図７は、管理サーバの処理の流れを示すフローチャートである。図７に示すように、抽出部１２は、データ保存のコマンドを管理者等から受け付けると（Ｓ１０１：Ｙｅｓ）、入力された入力データの１行目を読み込む（Ｓ１０２）。
【００４５】
続いて、格納部１３は、抽出部１２によって読み込まれた入力データの１行目をヘッダ情報として、共有アクセス基盤４０に格納する（Ｓ１０３）。そして、格納部１３は、ヘッダ情報を格納した領域へのアクセスパスを生成し（Ｓ１０４）、通知部１４は、生成されたアクセスパスをパス情報として各分散処理サーバ２０に通知する（Ｓ１０５）。
【００４６】
その後、分割部１５は、入力データを分散ファイルシステム３０に格納し、入力データを行単位で分割して（Ｓ１０６）、分割行列形式データを各分散処理サーバ２０に送信する（Ｓ１０７）。
【００４７】
［分散処理サーバの処理］
図８は、分散処理サーバの処理の流れを示すフローチャートである。図８に示すように、情報受信部２３は、パス情報を管理サーバ１０から受信すると（Ｓ２０１：Ｙｅｓ）、受信したパス情報をパス情報ＤＢ２２に格納する（Ｓ２０２）。
【００４８】
そして、データ受信部２４が分割行列形式データを管理サーバ１０から受信すると（Ｓ２０３：Ｙｅｓ）、判定部２５が、受信された分割行列形式データのヘッダ有無を判定する（Ｓ２０４）。
【００４９】
その後、判定部２５によってヘッダ有りと判定された場合（Ｓ２０５：Ｙｅｓ）、処理実行部２６は、受信データの１行目をヘッダ情報として、該当処理を実行する（Ｓ２０６）。
【００５０】
一方、判定部２５によってヘッダ無しと判定された場合（Ｓ２０５：Ｎｏ）、処理実行部２６は、パス情報ＤＢ２２に記憶されるパス情報を用いて、共有アクセス基盤４０からヘッダ情報を取得する（Ｓ２０７）。その後、処理実行部２６は、受信データの１行目に追加したヘッダ情報を追加して、該当処理を実行する（Ｓ２０６）。
【００５１】
上述したように、分散処理サーバ２０は、入力データの項目の順番が入れ替わったり、新しい項目が追加されてこれまでの項目の出現する順番が変わったとしても、入力データやＲアプリケーションを修正することなく並列実行することができる。また、これにより、運用保守に必要なコストを大幅に抑えることができる。
【実施例２】
【００５２】
ところで、実施例１では、一般的な分散処理について説明したが、例えばHadoop（登録商標）のMapReduce処理についても、同様の手法を適用することができる。そこで、実施例２では、MapReduce処理を適用した例を説明する。
【００５３】
［システムスタック］
図９は、MapReduce処理を実行する分散処理サーバのシステムスタックの例を説明する図である。図９に示すように、各分散処理サーバ２０は、分散ファイルシステム（HDFS）、MapReduce、ラッパスクリプト、Ｒアプリケーションを実行する。ここで、Ｒアプリケーションが処理実行部２６に対応し、MapReduceおよびラッパスクリプトがデータ受信部２４と判定部２５に対応する。
【００５４】
Hadoopではデータを処理する前に、HDFSに入力データを保存する。共有アクセス基盤４０へのヘッダの保存は入力データをHDFSに保存するタイミングで行う。
【００５５】
管理サーバ１０は、ユーザからHDFS上に入力データを保存する命令を受け付けると、入力データからヘッダ情報を取り出して、取り出したヘッダ情報を共有アクセス基盤４０に格納し、入力データをHDFS上に格納する。
【００５６】
具体的には、ラッパスクリプトは、MapタスクまたはReduceタスクとして実行される。Ｒアプリケーションは、ラッパスクリプトから入力データを受信する。ラッパスクリプトは、分割された入力データ（分割行列形式データ）中の１行目と２行目を比較し、１行目と２行目のデータの種類が異なる場合は、ヘッダが含まれていると判断する。一方、ラッパスクリプトは、１行目と２行目のデータの種類が同じ場合は、ヘッダが含まれていないと判断する。
【００５７】
ヘッダが含まれていない場合は、ラッパスクリプトは、入力データ（分割行列形式データ）のパスから対応するヘッダを共有アクセス基盤４０から読み取り、分割されたデータよりも先にＲアプリケーションへと送信する。入力データのパスをラッパスクリプトが知る手法は、環境変数を経由して各分散処理サーバ２０へ配布するなどの手段を採用できる。
【００５８】
［データの流れ］
図１０は、MapReduce処理への適用例を説明する図である。なお、図１０に示す「Ｈ」はヘッダを示し、「Ｄ」はデータを示し、「Ｗ」はラッパスクリプトを示す。また、数字は、データの順番であり、１がMap処理前を示し、２がMap処理後を示し、３がReduce処理後を示す。また、図１０の例では、入力データのヘッダ情報「Ｈ１」が共有アクセス基盤４０に格納済みとする。
【００５９】
（Mapフェーズ）
まず、Map処理について説明する。図１０に示すように、分散処理サーバ２０−Ａのラッパスクリプトは、（Ｈ１）＋（Ｄ１−１）の分割行列形式データを受信し、ヘッダが含まれていることから、そのまま処理を実行する。そして、分散処理サーバ２０−Ａのラッパスクリプトは、（Ｈ２）＋（Ｄ２−１）を生成し、Ｈ２を抽出して共有アクセス基盤４０に格納する。なお、分散処理サーバ２０−Ａは、Ｈ２をＨ１と同じアクセスパス上に保存してもよく、別の領域に保存する場合は、保存した領域へのアクセスパスを各分散処理サーバに送信する。
【００６０】
一方、分散処理サーバ２０−Ｂのラッパスクリプトは、（Ｄ１−２）の分割行列形式データを受信し、ヘッダが含まれていないことから、予め通知されたパス情報を用いて共有アクセス基盤４０からヘッダ情報（Ｈ１）を取得する。そして、分散処理サーバ２０−Ｂのラッパスクリプトは、入力データを（Ｈ１）＋（Ｄ１−２）として処理を実行して、（Ｈ２）＋（Ｄ２−２）を生成し、Ｈ２を除去する。
【００６１】
（Reduceフェーズ）
次に、Reduce処理について説明する。図１０に示すように、分散処理サーバ２０−Ａのラッパスクリプトは、自身のMap処理結果「Ｄ２−１」と分散処理サーバ２０−ＢのMap処理結果「Ｄ２−２」を取得する。そして、分散処理サーバ２０−Ａのラッパスクリプトは、処理対象のデータ（Ｄ２−１）＋（Ｄ２−２）にヘッダが含まれていないことから、予め通知されたパス情報を用いて共有アクセス基盤４０からヘッダ情報（Ｈ２）を取得する。そして、分散処理サーバ２０−Ａのラッパスクリプトは、入力データを（Ｈ２）＋（Ｄ２−１）＋（Ｄ２−２）として処理を実行して、（Ｈ３）＋（Ｄ３−１）を生成する。その後、分散処理サーバ２０−Ａのラッパスクリプトは、Ｈ３を共有アクセス基盤４０に保存し、Ｄ３−１を分散ファイルシステム３０に保存する。
【００６２】
一方、分散処理サーバ２０−Ｂのラッパスクリプトは、自身のMap処理結果「Ｄ２−２」と分散処理サーバ２０−ＡのMap処理結果「Ｄ２−１」を取得する。そして、分散処理サーバ２０−Ｂのラッパスクリプトは、処理対象のデータ（Ｄ２−１）＋（Ｄ２−２）にヘッダが含まれていないことから、予め通知されたパス情報を用いて共有アクセス基盤４０からヘッダ情報（Ｈ２）を取得する。そして、分散処理サーバ２０−Ｂのラッパスクリプトは、入力データを（Ｈ２）＋（Ｄ２−１）＋（Ｄ２−２）として処理を実行して、（Ｈ３）＋（Ｄ３−２）を生成する。その後、分散処理サーバ２０−Ｂのラッパスクリプトは、Ｈ２を除去したＤ３−２を分散ファイルシステム３０に保存する。
【００６３】
［処理の流れ］
次に、分散処理サーバ２０が実行するMap処理とReduce処理について説明するが、これらの処理は、入力データが分散ファイルシステム３０から入力されるのか、各分散処理サーバから入力されるかの違いがあるものの、処理の流れは同じなので、ここではMap処理について説明する。
【００６４】
図１１は、実施例２に係る分散処理サーバのMap処理の流れを示すフローチャートである。図１１に示すように、分散処理サーバ２０は、管理者や管理サーバ１０からMapRedue処理の実行が指示されると（Ｓ３０１：Ｙｅｓ）、Map処理を実行し（Ｓ３０２：Ｙｅｓ）、Mapタスクを起動する（Ｓ３０３）。
【００６５】
すると、Mapタスクがラッパスクリプトを起動し（Ｓ３０４）、ラッパスクリプトが１行目と２行目のデータを読み込む（Ｓ３０５）。そして、ラッパスクリプトは、読み込んだデータからヘッダを抽出できた場合（Ｓ３０６：Ｙｅｓ）、入力データをＲアプリケーションに出力する（Ｓ３０７）。その後、分散処理サーバ２０は、ヘッダが有ることを前提としたＲアプリケーションを実行する（Ｓ３０８）。
【００６６】
一方、ラッパスクリプトは、読み込んだデータからヘッダが抽出できない場合（Ｓ３０６：Ｎｏ）、共有アクセス基盤４０からヘッダを取得する（Ｓ３０９）。そして、ラッパスクリプトは、ヘッダ情報、入力データの順に、Ｒアプリケーションに出力する（Ｓ３１０）。その後、分散処理サーバ２０は、ヘッダが有ることを前提としたＲアプリケーションを実行する（Ｓ３０８）。
【００６７】
そして、Map処理が完了すると、分散処理サーバ２０は、Reduce処理を実行し（Ｓ３１１）、Reduce処理が完了すると、Ｒアプリケーションの実行結果のヘッダを共有アクセス基盤４０へと保存し、ヘッダを除去した実行結果をHDFSへと保存する（Ｓ３１２）。なお、Map処理ではなくReduce処理の依頼が受信された場合（Ｓ３０２：Ｎｏ）、Ｓ３０３ではなくＳ３１１が実行される。
【００６８】
上述したように、近年普及が進むMapReduce処理に対して同様に処理することができるので、適切な分散処理を実行して処理の高速化を実現するとともに、汎用性の高いシステム構築を実現できる。
【実施例３】
【００６９】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
【００７０】
［参照情報］
上記実施例では、共有アクセス基盤４０に格納されたヘッダ情報を特定する情報として、パス情報を各分散処理サーバ２０に通知する例を説明したが、これに限定されるものではない。例えば、管理サーバ１０は、入力データを識別する識別子とパス情報とを対応付けて共有アクセス基盤４０に保存し、識別子を各分散処理サーバ２０に通知することもできる。また、パス情報は、管理サーバ１０が毎回生成することもでき、管理者等によって予め指定することもできる。つまり、入力データが定まればヘッダの保存先が一意に定まる手法であれば、どのような手法も採用することができる。
【００７１】
［入力データ］
上記実施例で図示した行列形式の入力データは、図示した行数や列数に限定されるものではなく、適宜変更することができる。
【００７２】
［システム］
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００７３】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００７４】
［ハードウェア］
次に、各サーバのハードウェア構成例を説明するが、各サーバは同様の構成を有するので、ここでは一例を説明する。図１２は、各サーバのハードウェア構成例を示す図である。図１２に示すように、サーバ１００は、通信インタフェース１０１、メモリ１０２、複数のＨＤＤ（ハードディスクドライブ）１０３、プロセッサ装置１０４を有する。
【００７５】
通信インタフェース１０１は、各機能部の説明時に示した通信制御部に該当し、例えばネットワークインタフェースカードなどである。複数のＨＤＤ１０３は、各機能部の説明時に示した処理部を動作させるプログラムやＤＢ等を記憶する。
【００７６】
プロセッサ装置１０４が有する複数のＣＰＵ１０５は、各機能部の説明時に示した各処理部と同様の処理を実行するプログラムをＨＤＤ１０３等から読み出してメモリ１０２に展開することで、図２等で説明した各機能を実行するプロセスを動作させる。すなわち、このプロセスは、管理サーバ１０が有する抽出部１２、格納部１３、通知部１４、分割部１５と同様の機能を実行する。また、このプロセスは、分散処理サーバ２０が有する情報受信部２３、データ受信部２４、判定部２５、処理実行部２６と同様の機能を実行する。
【００７７】
このようにサーバ１００は、プログラムを読み出して実行することで、分散処理方法を実行する情報処理装置として動作する。また、サーバ１００は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、サーバ１００によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【００７８】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７９】
（付記１）コンピュータに、
ヘッダ情報とデータとを含む行列形式データより、前記ヘッダ情報を抽出し、
前記行列形式データを行単位で分割した複数の分割行列形式データを生成し、
前記複数の分割行列形式データが割り当てられる複数の指示対象サーバそれぞれに対し、前記ヘッダ情報の参照に関するヘッダ参照情報を送信する、
処理を実行させることを特徴とする分散処理プログラム。
【００８０】
（付記２）前記送信する処理は、前記複数の指示対象サーバそれぞれで実行される、入力データの１行目を前記ヘッダ情報とみなして統計処理を実行するアプリケーション宛に、前記ヘッダ参照情報を送信することを特徴とする付記１に記載の分散処理プログラム。
【００８１】
（付記３）前記抽出する処理は、前記複数の指示対象サーバそれぞれがアクセス可能な領域に前記ヘッダ情報を格納し、
前記ヘッダ参照情報は、前記領域に関するパス情報を含むことを特徴とする付記１または２に記載の分散処理プログラム。
【００８２】
（付記４）前記抽出する処理は、前記複数の指示対象サーバそれぞれがアクセス可能な領域に、前記行列形式データを識別する識別子と前記ヘッダ情報とを対応付けて格納し、
前記ヘッダ参照情報は、前記識別子を含むことを特徴とする付記１または２に記載の分散処理プログラム。
【００８３】
（付記５）コンピュータが、
ヘッダ情報とデータとを含む行列形式データより、前記ヘッダ情報を抽出し、
前記行列形式データを行単位で分割した複数の分割行列形式データを生成し、
前記複数の分割行列形式データが割り当てられる複数の指示対象サーバそれぞれに対し、前記ヘッダ情報の参照に関するヘッダ参照情報を送信する、
処理を含むことを特徴とする分散処理方法。
【００８４】
（付記６）ヘッダ情報とデータとを含む行列形式データより、前記ヘッダ情報を抽出する抽出部と、
前記行列形式データを行単位で分割した複数の分割行列形式データを生成する生成部と、
前記生成部によって生成された分割行列形式データが割り当てられる複数の指示対象サーバそれぞれに対し、前記ヘッダ情報の参照に関するヘッダ参照情報を送信する送信部と
を有することを特徴とする情報処理装置。
【００８５】
（付記７）コンピュータに、
ヘッダ情報とデータとを含む行列形式データの前記ヘッダ情報の参照に関するヘッダ参照情報を受信し、
前記行列形式データが行単位で分割された分割行列形式データを受信し、
前記分割行列形式データに前記ヘッダ情報が含まれている場合は、前記分割行列形式データに対して所定の処理を実行し、前記分割行列形式データに前記ヘッダ情報が含まれていない場合は、前記ヘッダ参照情報を用いて前記ヘッダ情報を取得して前記所定の処理を実行する
処理を実行させることを特徴とする分散処理プログラム。
【００８６】
（付記８）コンピュータが、
ヘッダ情報とデータとを含む行列形式データの前記ヘッダ情報の参照に関するヘッダ参照情報を受信し、
前記行列形式データが行単位で分割された分割行列形式データを受信し、
前記分割行列形式データに前記ヘッダ情報が含まれている場合は、前記分割行列形式データに対して所定の処理を実行し、前記分割行列形式データに前記ヘッダ情報が含まれていない場合は、前記ヘッダ参照情報を用いて前記ヘッダ情報を取得して前記所定の処理を実行する
処理を含むことを特徴とする分散処理方法。
【００８７】
（付記９）ヘッダ情報とデータとを含む行列形式データの前記ヘッダ情報の参照に関するヘッダ参照情報を受信する第１受信部と、
前記行列形式データが行単位で分割された分割行列形式データを受信する第２受信部と、
前記分割行列形式データに前記ヘッダ情報が含まれている場合は、前記分割行列形式データに対して所定の処理を実行し、前記分割行列形式データに前記ヘッダ情報が含まれていない場合は、前記ヘッダ参照情報を用いて前記ヘッダ情報を取得して前記所定の処理を実行するする実行部と
を有することを特徴とする情報処理装置。
【符号の説明】
【００８８】
１０  管理サーバ
１１  通信部
１２  抽出部
１３  格納部
１４  通知部
１５  分割部
２０  分散処理サーバ
２１  通信部
２２  パス情報ＤＢ
２３  情報受信部
２４  データ受信部
２５  判定部
２６  処理実行部
【図１】
2016206757.tif 000003
【図２】
2016206757.tif 000004
【図３】
2016206757.tif 000005
【図４】
2016206757.tif 000006
【図５】
2016206757.tif 000007
【図６】
2016206757.tif 000008
【図７】
2016206757.tif 000009
【図８】
2016206757.tif 000010
【図９】
2016206757.tif 000011
【図１０】
2016206757.tif 000012
【図１１】
2016206757.tif 000013
【図１２】
2016206757.tif 000014