(57)【要約】【課題】検索処理を高速に実行する検索処理プログラム、検索処理方法及び情報処理装置を提供する。【解決手段】３要素を有するデータのうち２要素を抽出し、抽出した２要素よりも小さいデータサイズの識別子を抽出した２要素に対応付けた第１の表を生成する。３要素の表に対して識別子を付加した第２の表を生成する。第２の表を複数のスレーブサーバ１２に分割して配置する。検索する際に、第１の表を用いて識別子を取り出し、取り出した識別子を用いてそれぞれのスレーブサーバ１２において、各スレーブサーバ１２に配置された第２の表の一部に対して検索を行う。検索により第２の表のうちの抽出される行を出力する。【選択図】図８
2020038610.tif 000002
【特許請求の範囲】
【請求項１】
３要素を有するデータのうち２要素を抽出し、抽出した前記２要素よりも小さいデータサイズの識別子を抽出した前記２要素に対応付けた第１の表を生成し、
前記３要素の表に対して前記識別子を付加した第２の表を生成し、
前記第２の表を複数の処理装置に分割して配置し、
検索する際に、前記第１の表を用いて前記識別子を取り出し、取り出した前記識別子を用いてそれぞれの前記処理装置において、各前記処理装置に配置された前記第２の表の一部に対して検索を行い、
前記検索により前記第２の表のうちの抽出される行を出力する
処理をコンピュータに実行させることを特徴とする検索処理プログラム。  
【請求項２】
前記第２の表は、前記３要素の対応表に前記識別子を付加した表であることを特徴とする請求項１に記載の検索処理プログラム。
【請求項３】
前記３要素の中から１要素ごとに前記識別子とを対応させた対応表を生成することを特徴とする請求項１に記載の検索処理プログラム。
【請求項４】
前記３要素を有するデータはグラフデータであり、
前記検索は、ｋｅｙ＝ｖａｌｕｅ形式のデータを用いた検索である
ことを特徴とする請求項１〜３のいずれか一つに記載の検索処理プログラム。
【請求項５】
前記出力された行を前記３要素のいずれか１つの要素を基準に集約して、基準毎に異なる前記処理装置に配置する処理をコンピュータにさらに実行させることを特徴とする請求項１〜４のいずれか一つに記載の検索処理プログラム。
【請求項６】
各前記処理装置において、集約された行に対して前記基準とした要素を基に予め決められた処理を実行することを特徴とする請求項５に記載の検索処理プログラム。
【請求項７】
前記第１の表を前記２要素の組み合わせ毎に分割し、
検索対象に応じて分割後の前記第１の表のいずれかを選択し、選択した分割後の前記第１の表を用いて分散型のインメモリ処理により前記検索を実行する
処理をコンピュータに実行させることを特徴とする請求項１〜６のいずれか一つに記載の検索処理プログラム。  
【請求項８】
３要素を有するデータのうち２要素を抽出し、抽出した前記２要素よりも小さいデータサイズの識別子を抽出した前記２要素に対応付けた第１の表を生成し、
前記３要素の表に対して前記識別子を付加した第２の表を生成し、
前記第２の表を複数の処理装置に分割して配置し、
検索する際に、前記第１の表を用いて前記識別子を取り出し、取り出した前記識別子を用いてそれぞれの前記処理装置において、各前記処理装置に配置された前記第２の表の一部に対して検索を行い、
前記検索により前記第２の表のうちの抽出される行を出力する
ことを特徴とする検索処理方法。
【請求項９】
３要素を有するデータのうち２要素を抽出し、抽出した前記２要素よりも小さいデータサイズの識別子を抽出した前記２要素に対応付けた第１の表を生成する第１生成部と、
前記３要素の表に対して前記識別子を付加した第２の表を生成する第２生成部と、
前記第２の表を複数の処理装置に分割して配置する配置部と、
検索する際に、前記第１の表を用いて前記識別子を取り出し、取り出した前記識別子を用いてそれぞれの前記処理装置において、各前記処理装置に配置された前記第２の表の一部に対して検索を行う検索部と、
前記検索部による前記検索により前記第２の表のうちの抽出される行を出力する出力部と
を備えたことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索処理プログラム、検索処理方法及び情報処理装置に関する。
【背景技術】
【０００２】
近年、さまざまな知識に関するデータを集め、蓄積し、そして検索することへの関心が高まっている。このようなデータは、何らかのグラフデータモデルで表されると考えられる。このようなグラフデータモデルの一つとして、ＲＤＦ（Resource  Description  Framework）が知られている。現在、ＲＤＦにより記述されたオープンデータは、数多く存在する。ＲＤＦのデータモデルでは、トリプル（triple）と称される主語（subject）、述語（predicate）及び目的語（object）の３つの要素をノードとしてその関係が表される。以下では、ＲＤＦにより記述されたデータをＲＤＦデータと呼ぶ。
【０００３】
ＲＤＦデータを検索したり分析したりするため、ＳＰＡＲＱＬと呼ばれる問い合せ言語が標準化されている。ＳＰＡＲＱＬは、ＳＱＬに似た言語であり、これを用いてクエリを記述することでＲＤＦデータを格納したＲＤＦストアから条件に合うデータを引き出すことができる。
【０００４】
このようなＳＰＡＲＱＬのクエリ処理の効率を改善する方法として、並列化という技術がある。並列化の一手法としてＭａｐＲｅｄｕｃｅに代表される分散フレームワークを使用した手法がある。分散フレームワークを使用した手法とは、簡単に言えば、計算機毎に並列に処理するアプローチである。分散フレームワークでは、計算機の台数を増やすことによってデータ量の増加に対するスケーラビリティを確保し、大規模データを効率良く処理することが可能となる。
【０００５】
このような分散フレームワークを使用したミドルウェアとして、例えばＨａｄｏｏｐ（登録商標）がある。Ｈａｄｏｏｐは、データを複数のサーバに分散し、並列して処理するミドルウェアであり、テラバイト級さらにはペタバイト級の大容量データの分析などを高速処理できるため、ビッグデータ活用における主要技術として利用されている。Ｈａｄｏｏｐでは、１台のマスタサーバと、その配下に繋がる多数のスレーブサーバとが連携し、データの高速処理を行う。データ処理全体の流れをコントロールするのがマスタサーバであり、実際の計算処理は配下のスレーブサーバが手分けして行う。したがって、Ｈａｄｏｏｐは、スレーブサーバの台数が多ければ多いほど処理能力が高まり、増大するデータを高速に計算処理することができる。
【０００６】
さらに、Ｈａｄｏｏｐには、２つの主要な技術が用いられている。１つは、ＨＤＦＳ（Hadoop  Distributed  File  System）である。ＨＤＦＳは、多数のスレーブサーバのハードディスクを取りまとめ、そこに計算すべき膨大なデータを書き込んだり、集計した結果を書き込んだりすることが可能な仮想的なファイルシステムである。
【０００７】
もう１つは、ＭａｐＲｅｄｕｃｅ処理である。ＭａｐＲｅｄｕｃｅ処理は、与えられたデータから欲しいデータを抽出し分解するＭａｐ処理及び抽出されたデータを集計するＲｅｄｕｃｅ処理という２つの手順で計算処理を行う手法である。ＭａｐＲｅｄｕｃｅ処理は、複数台のスレーブサーバで並列処理ができるので、効率的である。ＭａｐＲｅｄｕｃｅ処理が計算処理の対象とするデータはＨＤＦＳ上に分散されているものが利用される。
【０００８】
なお、ＳＰＡＲＱＬ検索クエリにおいて頻繁に比較される値に対応する変数を抽出し、抽出した変数に対応する値を結合して作成した新たなノードをＲＤＦデータに加えて検索処理を行う従来技術がある。また、トリプルのデータにしたがって順序付けられたデータアイテムのセットの中のデータアイテムにトリプルが格納され、そのデータアイテムが格納される分散型の計算機がセット内のデータアイテムの位置に応じて決定される従来技術がある。また、インデックスを作成する場合に、文字列の長さが設定された閾値を超える場合には文字列から決まるハッシュ値とキーの値との組を登録する従来技術がある。また、タグと文字列とを用いて文書管理を行う従来技術がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】国際公開第２０１４／２０７８２７号
【特許文献２】特開２０１３−１７５１８１号公報
【特許文献３】特開２０００−９０１１５号公報
【特許文献４】特開２００８−５２６６２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、例えば、ＲＤＦデータは、主語、述語及び目的語の３要素のそれぞれの関係を表すことで成り立つ。これに対して、ＭａｐＲｅｄｕｃｅ処理を行う場合、入力されたデータはｋｅｙ＝ｖａｌｕｅの形式、つまり２要素として扱われる。そのため、ＲＤＦデータをＭａｐＲｄｄｕｃｅ処理で処理する場合、ＲＤＦデータをｋｅｙ＝ｖａｌｕｅの２要素の形式に分解して全ての組み合わせを予め作成する作業が加わる。例えば、ＲＤＦデータの３要素を（ｓ，ｐ，ｏ）と表した場合、（ｓ，ｐ）、（ｐ，ｏ）又は（ｏ，ｓ）の組み合わせを１つの要素として、全体で２要素となるように分解される。この変換作業には膨大な時間が掛かる。
【００１１】
さらに、ＲＤＦデータの場合、例えば、３要素のうち２要素が決まっている検索を行う場合には、２つの要素のそれぞれを比較して検索することになる。ＲＤＦデータの各要素の値には長い文字列、言い換えればデータ領域が大きい値を格納することもできる。特にこのような長い文字列を決まった２要素として検索を行う場合、膨大な時間が掛かるおそれがある。
【００１２】
また、頻出の変数に対応する値を結合して作成した新たなノードをＲＤＦデータに加える従来技術を用いても、ＲＤＦデータとＭａｐＲｅｄｕｃｅ処理とで取り扱われるデータ形式の違いは解消されず、検索処理を高速に行うことは困難である。また、セット内のデータアイテムの位置に応じて配置する計算機を決定する従来技術を用いても、同様にＲＤＦデータとＭａｐＲｅｄｕｃｅ処理とで取り扱われるデータ形式の違いは解消されず、検索処理を高速に行うことは困難である。また、文字列に基づくハッシュ値とキーの値との組をインデックスとして登録する従来技術では、要素が異ならない場合の検索処理は早くなるが、要素数が異なる場合のデータ形式の違いはやはり解消されず、検索処理を高速に行うことは困難である。さらに、タグと文字列とを用いて文書管理を行う従来技術でも、同様にＲＤＦデータとＭａｐＲｅｄｕｃｅ処理とで取り扱われるデータ形式の違いは解消されず、検索処理を高速に行うことは困難である。
【００１３】
開示の技術は、上記に鑑みてなされたものであって、検索処理を高速に実行する検索処理プログラム、検索処理方法及び情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示する検索処理プログラム、検索処理方法及び情報処理装置の一つの態様において、コンピュータに以下の処理を実行させる。３要素を有するデータのうち２要素を抽出し、抽出した前記２要素よりも小さいサイズの識別子を抽出した前記２要素に対応付けた第１の表を生成する。前記３要素の表に対して前記識別子を付加した第２の表を生成する。前記第２の表を複数の処理装置に分割して配置する。検索する際に、前記第１の表を用いて前記識別子を取り出し、取り出した前記識別子を用いてそれぞれの前記処理装置において、各前記処理装置に配置された前記第２の表の一部に対して検索を行う。前記検索により前記第２の表のうちの抽出される行を出力する。
【発明の効果】
【００１５】
１つの側面では、本発明は、検索処理を高速に実行することができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、情報処理システムのシステム構成図である。
【図２】図２は、マスタサーバ及びスレーブサーバの詳細を表すブロック図である。
【図３】図３は、ＲＤＦデータをツリー形式で表した一例の図である。
【図４】図４は、ＲＤＦデータを表形式で表した一例の図である。
【図５】図５は、識別子対応表の一例を表す図である。
【図６】図６は、識別子付ＲＤＦデータ表の一例を表す図である。
【図７】図７は、ＭａｐＲｅｄｕｃｅ処理の概要を表す図である。
【図８】図８は、実施例１に係るパラメータ識別子を用いた場合のＭａｐＲｅｄｕｃｅ処理の概要を表す図である。
【図９】図９は、実施例１に係る識別子表及び識別子付ＲＤＦデータ表の生成処理のフローチャートである。
【図１０】図１０は、実施例１に係るＭａｐＲｅｄｕｃｅ処理のフローチャートである。
【図１１】図１１は、分割データ表の一例を表す図である。
【図１２】図１２は、実施例２に係るパラメータ識別子を用いた場合のＭａｐＲｅｄｕｃｅ処理の概要を表す図である。
【図１３】図１３は、コンピュータのハードウェア構成の一例を表す図である。
【図１４】図１４は、実施例３に係るマスタサーバ及びスレーブサーバの詳細を表すブロック図である。
【図１５】図１５は、分割前の識別子対応表の一例を表す図である。
【図１６】図１６は、分割識別子対応表の一例を表す図である。
【図１７】図１７は、実施例３に係るパラメータ識別子を用いた場合のＭａｐＲｅｄｕｃｅ処理の概要を表す図である。
【図１８】図１８は、実施例３に係る識別子表及び識別子付ＲＤＦデータ表の生成処理のフローチャートである。
【図１９】図１９は、実施例３に係るＭａｐＲｅｄｕｃｅ処理のフローチャートである。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する検索処理プログラム、検索処理方法及び情報処理装置の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する検索処理プログラム、検索処理方法及び情報処理装置が限定されるものではない。
【実施例１】
【００１８】
図１は、情報処理システムのシステム構成図である。情報処理システム１は、図１に示すように、Ｈａｄｏｏｐクラスタ１０、ＨＤＦＳ（Hadoop  Distributed  File  System）クライアント２０及びジョブクライアント３０を有する。
【００１９】
ＨＤＦＳクライアント２０は、Ｈａｄｏｏｐクラスタ１０に対してデータ管理の指示を行う情報処理端末である。ＨＤＦＳクライアント２０は、ネットワークを介してＨａｄｏｏｐクラスタ１０のマスタサーバ１１と接続される。ＨＤＦＳクライアント２０は、利用者からのデータ管理の指示の入力を入力装置（不図示）から受ける。そして、ＨＤＦＳクライアント２０は、利用者からの入力に応じたデータ管理の処理命令をＨＤＦＳ  ＡＰＩ（Application  Programing  Interface）を介してマスタサーバ１１へ送信する。
【００２０】
ジョブクライアント３０は、Ｈａｄｏｏｐクラスタ１０に対してジョブ管理の指示を行う情報処理端末である。ジョブクライアント３０は、ネットワークを介してＨａｄｏｏｐクラスタ１０のマスタサーバ１１と接続される。ジョブクライアント３０は、ＭａｐＲｅｄｕｃｅプログラムを有する。ジョブクライアント３０は、利用者からのジョブ管理の指示の入力を入力装置（不図示）から受ける。そして、ジョブクライアント３０は、利用者からの入力に応じたジョブ管理の処理命令をマスタサーバ１１へ送信する。
【００２１】
これら、ＨＤＦＳクライアント２０及びジョブクライアント３０は、同じ情報処理装置に配置されてもよいし、異なる情報処理装置に配置されてもよい。また、ＨＤＦＳクライアント２０及びジョブクライアント３０の機能は、Ｈａｄｏｏｐクラスタ１０の中に配置されてもよい。
【００２２】
Ｈａｄｏｏｐクラスタ１０は、マスタサーバ１１及びスレーブサーバ１２を有する。図１では、３台のスレーブサーバ１２を図示したが、スレーブサーバ１２の数に特に制限は無い。マスタサーバ１１は、各スレーブサーバ１２とネットワークで接続される。さらに、マスタサーバ１１は、ＨＤＦＳクライアント２０及びジョブクライアント３０とネットワークで接続される。また、各スレーブサーバ１２は、それぞれ相互にネット―ワークで接続される。
【００２３】
図２は、マスタサーバ及びスレーブサーバの詳細を表すブロック図である。以下では、図２を参照して、マスタサーバ１１及びスレーブサーバ１２について説明する。ここで、図１では構成の概略を図示するため、主要構成に絞りいくつかの構成を省略して記載したが、マスタサーバ１１及びスレーブサーバ１２は、より詳しくは図２に示す構成を有する。
【００２４】
マスタサーバ１１は、ＲＤＦストア１１０、ＨＤＦＳ１１１、ネームノード１１２、メタデータＤＢ（Data  Base）１１３及びジョブトラッカー１１４を有する。さらに、マスタサーバ１１は、第１生成部１１５、第２生成部１１６、ＲＤＦコントローラ１１７、ＳＰＡＲＱＬ処理部１１８及びＭａｐＲｅｄｕｃｅ処理部１１９を有する。
【００２５】
ＨＤＦＳ１１１は、複数のサーバと連携して見た目上１つのファイルシステムと見せる仮想ファイルシステムである。ＨＤＦＳ１１１は、ファイルをブロックサイズと呼ばれる単位で分割することでファイル管理を行う。ブロックサイズはデフォルトで６４ＭＢである。ＨＤＦＳ１１１は、排他制御機能を有さない。また、ＨＤＦＳ１１１では、ファイルの新規作成及び追加は可能であるが、修正は許可されない。ＨＤＦＳ１１１の１つのブロックに対して１つのＭａｐタスクが作成される。
【００２６】
ＲＤＦデータは、例えば、図３に示すようにツリー形式で表すことができる。図３は、ＲＤＦデータをツリー形式で表した一例の図である。図３における、矢印の始点に配置された楕円で囲われたデータが主語にあたる。また、矢印の終点に配置された楕円で囲われたデータが述語にあたる。さらに、矢印上に記載されたデータが述語にあたる。
【００２７】
また、ＲＤＦデータは、図４に示すように表形式で表すこともできる。図４は、ＲＤＦデータを表形式で表した一例の図である。図３に示したツリー形式のＲＤＦデータを表形式で表した図が、図４にあたる。図４における、ｉｄ（Identifier）は各トリプルに与えられた識別子を表す。また、Ｓｕｂｊｅｃｔはトリプルにおける主語を表し、ｐｒｅｄｉｃａｔｅは述語を表し、ｏｂｊｅｃｔは目的語を表す。このようにして各トリプルに割り当てられた識別子に対応させて、そのトリプルの主語、述語及びオブジェクトが表形式における１行（横列）に対応させて登録される。
【００２８】
ＲＤＦストア１１０は、例えば、図４に示すような表形式のＲＤＦデータを保持することができる。このＲＤＦストア１１０に格納されたＲＤＦデータを入力としてＨＤＦＳ１１１へ保存することで、後述するＭａｐＲｅｄｕｃｅ処理でＨＤＦＳ１１１内のデータを操作することが可能となる。
【００２９】
図２に戻って説明を続ける。ＲＤＦコントローラ１１７は、ＲＤＦストア１１０に格納されたＲＤＦデータの管理を行う。例えば、ＲＤＦコントローラ１１７は、読み出し要求や格納要求を受けて、指定されたＲＤＦデータの読み出し又は格納をＲＤＦストア１１０に対して行う。また、ＲＤＦコントローラ１１７は、ＲＤＦストア１１０に格納されたＲＤＦデータのＨＤＦＳ１１１への保存の指示を受けて、ＲＤＦストア１１０に格納されＲＦＤデータを入力としてＨＤＦＳ１１１に保存させる。
【００３０】
第１生成部１１５は、識別子対応表の生成の指示をＨＤＦＳクライアント２０から受ける。そして、第１生成部１１５は、ＲＤＦストア１１０に登録された全てのＲＤＦデータの主語、述語及び目的語の取得をＲＤＦコントローラ１１７に指示する。その後、第１生成部１１５は、ＲＤＦストア１１０に登録された全てのＲＤＦデータの主語、述語及び目的語をＲＤＦコントローラ１１７から取得する。
【００３１】
次に、第１生成部１１５は、取得した主語、述語及び目的語のそれぞれの重複を除いて集計する。そして、第１生成部１１５は、集計した主語、述語及び目的語を用いて、「主語、述語」、「述語、目的語」及び「主語、目的語」の全ての通りの組み合わせを生成する。これらの組を以下では、「ｖａｌｕｅパターン」という。このＲＤＦデータの主語、述語及び目的語が、「３要素」の一例にあたり、ｖａｌｕｅパターンに含まれる２つの値が、「２要素」の一例にあたる。
【００３２】
次に、第１生成部１１５は、生成したｖａｌｕｅパターンの中に、実際の各ＲＤＦデータの主語、述語及び目的語の組の中に含まれないｖａｌｕｅパターンが存在するか否かを判定する。実際の各ＲＤＦデータの主語、述語及び目的語の組の中に含まれないｖａｌｕｅパターンが存在する場合、第１生成部１１５は、各ＲＤＦデータの主語、述語及び目的語の中に含まれないｖａｌｕｅパターン以外のｖａｌｕｅパターンを抽出する。
【００３３】
第１生成部１１５は、抽出したｖａｌｕｅパターンのそれぞれにパターン識別子を割り当てる。この識別子は、ｖａｌｕｅパターンより小さいデータサイズである。データサイズとは、メモリを占有する上でのサイズである。そして、第１生成部１１５は、各ｖａｌｕｅパターンと割り当てたパターン識別子との対応を表す識別子対応表を作成する。このとき、第１生成部１１５は、実際の各ＲＤＦデータの主語、述語及び目的語の組の中に含まれないｖａｌｕｅパターンについては、不存在を表す情報を付加して識別子対応表へ登録する。図５は、識別子対応表の一例を表す図である。
【００３４】
ここでは、図４に示したＲＤＦデータを基に識別子対応表を作成する場合で説明する。また、述語と目的語の組み合わせのｖａｌｕｅパターンを生成する場合を例に説明する。
【００３５】
第１生成部１１５は、図４に示されるＲＤＦデータにおける述語２０１を重複を除いて集計する。この場合、第１生成部１１５は、「ｌｉｋｅｓ」及び「ｌｏｖｅｓ」という２語を述語として取得する。また、第１生成部１１５は、図４に示されるＲＤＦデータにおける目的語２０２を重複を除いて集計する。この場合、第１生成部１１５は、「Ａ」、「Ｃ」、「Ｄ」及び「Ｆ」という４語を述語として取得する。そして、第１生成部１１５は、取得した述語及び目的語の全ての組み合わせを生成する。この場合、第１生成部１１５は、「ｌｉｋｅｓ  Ａ」、「ｌｉｋｅｓ  Ｃ」、「ｌｉｋｅｓ  Ｄ」、「ｌｉｋｅｓ  Ｆ」、「ｌｏｖｅｓ  Ａ」、「ｌｏｖｅｓ  Ｃ」、「ｌｏｖｅｓ  Ｄ」及び「ｌｏｖｅｓ  Ｆ」をｖａｌｕｅバターンとして生成する。そして、第１生成部１１５は、「ｌｉｋｅｓ  Ａ」及び「ｌｏｖｅｓ  Ｄ」が図４に示すＲＤＦデータに含まれないと判定する。その後、第１生成部１１５は、実際に存在するＶａｌｕｅパターンにパターン識別子を割り当て、実際には存在しないｖａｌｕｅパターンに対しては不存在を示す情報を対応させて、図４に示す識別子対応表２１１及び２１２を生成する。図５では、「ｌｉｋｅｓ」を述語として含むｖａｌｕｅパターンを表す識別子対応表２１１と「ｌｏｖｅｓ」を述語として含むｖａｌｕｅパターンを表す識別子対応表２１２とを分けて記載した。さらに、第１生成部１１５は、存在しないｖａｌｕｅパターンである「ｌｉｋｅｓ  Ａ」及び「ｌｏｖｅｓ  Ｄ」に不存在を表すＮＡ（Not  Applicable）を付加して識別子対応表２１１及び２１２にそれぞれ登録する。
【００３６】
その後、第１生成部１１５は、生成した識別子対応表をＲＤＦコントローラ１１７へ送信し、ＲＤＦストア１１０への格納を指示する。さらに、第１生成部１１５は、識別子対応表の生成完了を第２生成部１１６に通知する。この識別子対応表が、「第１の表」の一例にあたる。
【００３７】
第２生成部１１６は、識別子対応表の生成完了の通知を第１生成部１１５から受ける。そして、第２生成部１１６は、識別子対応表の取得要求をＲＤＦコントローラ１１７へ送信する。その後、第２生成部１１６は、第１生成部１１５により作成された全ての識別子対応表をＲＤＦコントローラ１１７から取得する。
【００３８】
次に、第２生成部１１６は、ＲＤＦストア１１０に登録された各ＲＤＦデータの取得要求をＲＤＦコントローラ１１７へ送信する。そして、第２生成部１１６は、ＲＤＦコントローラ１１７から取得した各ＲＤＦデータの主語、述語及び目的語を確認し、それぞれの組み合のｖａｌｕｅパターンに対応するパターン識別子を識別子対応表から取得する。その後、第２生成部１１６は、各ＲＤＦデータのトリプルの対応表に、ＲＤＦデータ毎の取得したパターン識別子を付加した識別子付ＲＤＦデータ表を生成する。
【００３９】
図６は、識別子付ＲＤＦデータ表の一例を表す図である。図６における「ｖｐ−ｉｄ」は、パターン識別子を表す。そして、パターン識別子２２１は、主語と述語との組み合わせのｖａｌｕｅパターンに対応する。パターン識別子２２２は、述語と目的語との組み合わせのｖａｌｕｅパターンに対応する。パターン識別子２２３は、主語と目的語との組み合わせのｖａｌｕｅパターンに対応する。
【００４０】
第２生成部１１６は、例えば、図４の１行目のＲＤＦデータの主語、述語及び目的語として「Ａ」、「ｌｉｋｅｓ」及び「Ｄ」を取得する。そして、第２生成部１１６は、取得した各値から「Ａ  ｌｉｋｅｓ」、「ｌｉｋｅｓ  Ｄ」及び「Ａ  Ｄ」というｖａｌｕｅパターンを取得する。その後、第２生成部１１６は、取得したｖａｌｕｅパターンに対応するパターン識別子を取得する。例えば、第２生成部１１６は、図５の識別子対応表２１１から「ｌｉｋｅｓ  Ｄ」のパターン識別子である「０００２」を取得する。同様に、第２生成部１１６は、「Ａ  ｌｉｋｅｓ」及び「Ａ  Ｄ」のパターン識別子として「２００１」及び「４００１」を取得する。その後、第２生成部１１６は、各パターン識別子を１行目のＲＤＦデータに対応させて登録する。
【００４１】
その後、第２生成部１１６は、生成した識別子付ＲＤＦデータ表をＲＤＦコントローラ１１７へ送信し、ＲＤＦストア１１０に格納させる。この識別子付ＲＤＦデータ表が、「第２の表」の一例にあたる。
【００４２】
ネームノード１１２は、ＲＤＦストア１１０に格納された識別子付ＲＤＦデータ表の取得要求をＲＤＦコントローラ１１７に通知する。そして、ネームノード１１２は、ＲＤＦストア１１０に格納された識別子付ＲＤＦデータ表をＲＤＦコントローラ１１７から取得する。ここで、識別子付ＲＤＦデータ表のデータを分散配置する場合、ネームノード１１２は、ＲＤＦコントローラ１１７と連携してＲＤＦストア１１０に格納されたデータを取り扱うが、他の形式のデータを取り扱う場合にはＲＤＦストア１１０から直接データを取得してもよい。
【００４３】
ネームノード１１２は、識別子付ＲＤＦデータ表の一部の行データを含むブロックの格納先のデータノード１２１を決定する。ここで、図２では、分かり易いように、スレーブサーバ１２を１つ記載したが、実際には図１のように複数のスレーブサーバ１２が配置されており、ネームノード１１２は、各スレーブサーバ１２のデータノード１２１の中から各ブロックの配置先を選択する。
【００４４】
そして、ネームノード１１２は、識別子付ＲＤＦデータ表の一部の行データを含むブロックを選択したデータノード１２１へ送信し配置する。ここで、ネームノード１１２は、複数のブロックを１つのデータノード１２１へ送信してもよい。この各ネームノード１１２へのブロックの配置が、「複数の処理装置に分割して配置」することの一例にあたる。さらに、ネームノード１１２は、各ブロックの保存先のデータノード１２１の情報をメタデータＤＢ１１３に登録する。
【００４５】
ここで、分散配置において、ネームノード１１２は、１つのデータブロックを複製して複数のデータノード１２１に配置する。例えば、ネームノード１１２は、１つのデータブロックを複製して３つにする。これにより、あるデータノード１２１に障害が発生した場合に、他のデータノード１２１に格納された同一のブロックを用いることができるようになり、Ｈａｄｏｏｐクラスタ１０の耐障害性が確保される。このネームノード１１２が、「配置部」の一例にあたる。
【００４６】
ＳＰＡＲＱＬ処理部１１８は、ＳＰＡＲＱＬクエリの入力をジョブクライアント３０から受ける。そして、ＳＰＡＲＱＬ処理部１１８は、取得したＳＰＡＲＱＬクエリを解析してＭａｐＲｅｄｕｃｅ処理に変換する。さらに、ＳＰＡＲＱＬ処理部１１８は、識別子対応表の取得要求をＲＤＦコントローラ１１７に通知する。その後、ＳＰＡＲＱＬ処理部１１８は、ＲＤＦストア１１０に格納された識別子対応表をＲＤＦコントローラ１１７から取得する。次に、ＳＰＡＲＱＬ処理部１１８は、識別子対応表を参照して、取得したクエリの要素に対応するｖａｌｕｅパターンが存在するか否かを判定する。取得したクエリの要素に対応するｖａｌｕｅパターンが存在しなければ、ＳＰＡＲＱＬ処理部１１８は、そのようなｖａｌｕｅパターンのマッチング結果は０件としてジョブクライアント３０に検索結果を返す。
【００４７】
一方、取得したクエリの要素に対応するｖａｌｕｅパターンが存在する場合、ＳＰＡＲＱＬ処理部１１８は、取得したクエリの要素のｖａｌｕｅパターンに割り当てられたパターン識別子を取得する。次に、ＳＰＡＲＱＬ処理部１１８は、ＭＡＰＲｅｄｕｃｅ処理において、文字列を取得したパターン識別子に置き換える。その後、ＳＰＡＲＱＬ処理部１１８は、パターン識別子を含むＭａｐＲｅｄｕｃｅ処理をＭａｐＲｅｄｕｃｅ処理部１１９に出力する。
【００４８】
その後、ＳＰＡＲＱＬ処理部１１８は、ＭａｐＲｅｄｕｃｅ処理の実行結果の入力をＭａｐＲｅｄｕｃｅ処理部１１９から受ける。そして、ＳＰＡＲＱＬ処理部１１８は、取得したＭａｐＲｅｄｕｃｅ処理の実行結果をＳＰＡＲＱＬクエリの実行結果としてジョブクライアント３０へ送信する。このＳＰＡＲＱＬ処理部１１８が、「出力部」の一例にあたる。
【００４９】
ＭａｐＲｅｄｕｃｅ処理部１１９は、パターン識別子を含むＭａｐＲｅｄｕｃｅ処理の入力をＳＰＡＲＱＬ処理部１１８から受ける。このＭａｐＲｅｄｕｃｅ処理には、元のＳＰＡＲＱＬ処理に含まれる個々の検索処理に対応する複数のＭａｐＲｅｄｕｃｅ処理が含まれる。そこで、ＭａｐＲｅｄｕｃｅ処理部１１９は、受信したＭａｐＲｅｄｕｃｅ処理に含まれる個々のＭａｐＲｅｄｕｃｅ処理を取得する。そして、ＭａｐＲｅｄｕｃｅ処理部１１９は、取得した各ＭａｐＲｅｄｕｃｅ処理の実行をジョブトラッカー１１４に指示する。この場合、検索に用いる文字列がパターン識別子に置き換えられているので、ＭａｐＲｅｄｕｃｅ処理部１１９は、パターン識別子を用いたＭａｐＲｅｄｕｃｅ処理の実行をジョブトラッカー１１４に指示する。
【００５０】
その後、ＭａｐＲｅｄｕｃｅ処理部１１９は、ＭａｐＲｅｄｕｃｅ処理の実行結果の入力をジョブトラッカー１１４から受ける。そして、ＭａｐＲｅｄｕｃｅ処理部１１９は、ＭａｐＲｅｄｕｃｅ処理の実行結果をＳＰＡＲＱＬ処理部１１８へ出力する。
【００５１】
ジョブトラッカー１１４は、各ＭａｐＲｅｄｕｃｅ処理の実行の指示をＭａｐＲｅｄｕｃｅ処理部１１９から受ける。次に、ジョブトラッカー１１４は、メタデータＤＢ１１３に格納された各ブロックが配置されたデータノード１２１を確認し、各ＭａｐＲｅｄｕｃｅ処理を実行させるデータノード１２１を決定する。そして、ジョブトラッカー１１４は、１つのブロックに対して１つのＭａｐタスクを生成して割り当てる。その後、ジョブトラッカー１１４は、各Ｍａｐタスクを対応するブロックを保持するデータノード１２１を有するスレーブサーバ１２のタスクトラッカー１２３へ送信する。このように、各Ｍａｐタスクが対象とするブロックを有するスレーブサーバ１２に対して、それぞれのＭａｐタスクが割り振られることにより、通信コストを最小化することができる。
【００５２】
その後、ジョブトラッカー１１４は、各スレーブサーバ１２のタスクトラッカー１２３からジョブの実行結果を受信する。そして、ジョブトラッカー１１４は、ジョブの実行結果をまとめたＭａｐＲｅｄｕｃｅ処理の実行結果をＭａｐＲｅｄｕｃｅ処理部１１９へ出力する。
【００５３】
次に、スレーブサーバ１２について説明する。スレーブサーバ１２は、図２に示すように、データノード１２１、ＨＤＦＳ１２２、タスクトラッカー１２３及びＭａｐＲｅｄｕｃｅ処理部１２４を有する。
【００５４】
ＨＤＦＳ１２２は、ＨＤＦＳ１１１と同様にデフォルト６４ＭＢのサイズのブロック単位でデータを管理する。各スレーブサーバ１２のそれぞれのＨＤＦＳ１２２は、全体で１つの仮想ファイルシステムを形成する。
【００５５】
データノード１２１は、識別子付ＲＤＦデータ表の一部の行データを含むブロックをネームノード１１２から受信する。ここで、データノード１２１は、複数のブロックを受信してもよい。そして、データノード１２１は、取得したブロックを自装置のＨＤＦＳ１２２へ格納する。すなわち、ＨＤＦＳ１２２には、識別子付ＲＤＦデータ表の全行のうちの一部の行のデータが格納される。
【００５６】
タスクトラッカー１２３は、自装置が有するブロックに対応するＭａｐタスクをジョブトラッカー１１４から受信する。そして、タスクトラッカー１２３は、Ｍａｐタスクで指示されたＭａｐ処理の実行をＭａｐＲｅｄｕｃｅ処理部１２４に指示する。その後、タスクトラッカー１２３は、Ｍａｐタスクにしたがって実行されたＭａｐＲｅｄｕｃｅ処理の実行結果の入力をＭａｐＲｅｄｕｃｅ処理部１２４から受ける。そして、タスクトラッカー１２３は、Ｍａｐタスク毎の実行結果をジョブトラッカー１１４へ送信する。
【００５７】
ＭａｐＲｅｄｕｃｅ処理部１２４は、タスクトラッカー１２３から取得したＭａｐタスクにしたがってＭａｐＲｅｄｕｃｅ処理を実行する。ここで、図７を参照して、ＭａｐＲｅｄｕｃｅ処理について説明する。図７は、ＭａｐＲｅｄｕｃｅ処理の概要を表す図である。ここでは、ＭａｐＲｅｄｕｃｅ処理部１２４Ａ〜１２４Ｃが動作する場合で説明する。さらに、ここでは、ＭａｐＲｅｄｕｃｅ処理部１２４Ａがブロック３０１〜３０３に対する処理を行い、ＭａｐＲｅｄｕｃｅ処理部１２４Ｂ及び１２４Ｃは他のブロックを処理する。各ブロックのデータは、ｋｅｙ＝ｖａｌｕｅの形式を有するデータを含む。図７において括弧でくくられた２つの文字は、先頭の文字がｋｅｙを表し、２番目の文字がｖａｌｕｅを表す。さらに、ここでは、ＭａｐＲｅｄｕｃｅ処理としてｖａｌｕｅがＸのデータをカウントする処理を実行する場合で説明する。
【００５８】
ＭａｐＲｅｄｕｃｅ処理部１２４Ａは、ブロック３０１〜３０３の各データを入力として、入力をｍａｐ関数に与えて内部で処理した結果を新たなｋｅｙ＝ｖａｌｕｅの形式のデータとして出力する。ここでは、ＭａｐＲｅｄｕｃｅ処理部１２４Ａは、ＶａｌｕｅがＸであるデータを出力する。この場合、ＭａｐＲｅｄｕｃｅ処理部１２４Ａは、ブロック３０１から（Ｋ１，Ｘ）及び（Ｋ４，Ｘ）を抽出し、ブロック３０２から（Ｋ２，Ｘ）及び（Ｋ３，Ｘ）を抽出し、ブロック３０３から（Ｋ２，Ｘ）及び（Ｋ５，Ｘ）を抽出する。この処理がＭａｐ処理にあたる。Ｍａｐ処理は、ブロック３０１〜３０３毎に行われる。
【００５９】
同様に、ＭａｐＲｅｄｕｃｅ処理部１２４Ｂは、処理対象とするブロックからｖａｌｕｅがＸであるものを抽出する。この場合、ＭａｐＲｅｄｕｃｅ処理部１２４Ｂは、（Ｋ１，Ｘ）、（Ｋ４，Ｘ）、（Ｋ５，Ｘ）、（Ｋ１，Ｘ）及び（Ｋ６，Ｘ）を抽出する。また、ＭａｐＲｅｄｕｃｅ処理部１２４Ｃも同様に処理対象とするブロックからｖａｌｕｅがＸであるものを抽出する。
【００６０】
次に、ＭａｐＲｅｄｕｃｅ処理部１２４Ａ〜１２４Ｃは、抽出した各データを分類してそれぞれを、ＭａｐＲｅｄｕｃｅ処理部１２４Ａ〜１２４Ｃのうちの決められた送信先へ送信する。例えば、図７では、ｋｅｙがＫ１及びＫ２のデータがＭａｐＲｅｄｕｃｅ処理部１２４Ａへまとめられる。また、ｋｅｙがＫ３及びＫ４のデータがＭａｐＲｅｄｕｃｅ処理部１２４Ｂへまとめられる。また、ｋｅｙがＫ５及びＫ６のデータがＭａｐＲｅｄｕｃｅ処理部１２４Ｃへまとめられる。次に、各ＭａｐＲｅｄｕｃｅ処理部１２４Ａ〜１２４Ｃは、自己に集められたデータを並び替える。ここでは、ＭａｐＲｅｄｕｃｅ処理部１２４Ａ〜１２４Ｃは、ｋｅｙ毎にまとまるようにデータを並び替える。すなわち、ＭａｐＲｅｄｕｃｅ処理部１２４Ａ〜１２４Ｃは、おなじｋｅｙを有するｋｅｙ＝ｖａｌｕｅ形式のデータ同士を集約する。これらの処理をシャッフル及びソート処理と言う。
【００６１】
次に、ＭａｐＲｅｄｕｃｅ処理部１２４Ａ〜１２４Ｃは、シャッフル及びソート処理が完了したデータを取得し、取得したデータをＲｅｄｕｃｅ関数の内部で処理した結果をｋｅｙ＝ｖａｌｕｅ形式のデータとして出力する。ここでは、ＭａｐＲｅｄｕｃｅ処理部１２４Ａ〜１２４Ｃは、Ｒｅｄｕｃｅ関数として同じｋｅｙを有するデータ毎に集計を行う。図７では、ＭａｐＲｅｄｕｃｅ処理部１２４Ａは、（Ｋ１，Ｘ）が３つあることを表すデータとして（Ｋ１，３）を出力する。また、ＭａｐＲｅｄｕｃｅ処理部１２４Ａは、（Ｋ２，Ｘ）が２つあることを表すデータとして（Ｋ２，２）を出力する。ＭａｐＲｅｄｕｃｅ処理部１２４Ｂは、ｋｅｙがＫ３又はＫ４であるデータの集計結果を出力する。ＭａｐＲｅｄｕｃｅ処理部１２４Ｃは、ｋｅｙがＫ５又はＫ６であるデータの集計結果を出力する。この処理をＲｅｄｕｃｅ処理と言う。Ｒｅｄｕｃｅ処理は、利用者が編集可能である。ここでは、Ｒｅｄｕｃｅ処理として、同じｋｅｙを有するデータの集計を行う処理を行ったが、他の処理に変更することも可能である。例えば、ＳＰＡＲＱＬクエリに対応する結果を返す場合、Ｒｅｄｕｃｅ処理を、ｖａｌｕｅがＸであり、そのＸに対応する値をｋｅｙとするデータをそのまま出力する処理にしてもよい。
【００６２】
ＭａｐＲｅｄｕｃｅ処理部１２４は、Ｍａｐタスク実行部２４１及びＲｅｄｕｃｅタスク実行部２４２を有する。Ｍａｐタスク実行部２４１は、Ｍａｐ処理及びシャッフル及びソート処理を行う。
【００６３】
Ｍａｐタスク実行部２４１は、タスクトラッカー１２３から実行の指示を受けたＭａｐタスクを取得する。そして、Ｍａｐタスク実行部２４１は、Ｍａｐ処理を実行する。この場合、Ｍａｐタスク実行部２４１は、パラメータ識別子を用いたＭａｐタスクを受信する。そこで、Ｍａｐタスク実行部２４１は、例えば、図８に示すようにパラメータ識別子を用いてＭａｐ処理を実行する。図８は、実施例１に係るパラメータ識別子を用いた場合のＭａｐＲｅｄｕｃｅ処理の概要を表す図である。図８に記載された識別子付ＲＤＦデータ表４１１及び４２１のそれぞれが異なるＭａｐＲｅｄｕｃｅ処理部１２４で処理される場合で説明する。
【００６４】
例えば、図８では、Ｍａｐタスク実行部２４１は、太枠で囲われた１００２というパラメータ識別子をｖａｌｕｅとするデータを抽出するＭａｐタスクを取得する。ここで、図８では、分かり易いように１００２に対応するｖａｌｕｅパターンを記載したが、実際のＭａｐタスクにはｖａｌｕｅパターンは含まれなくてもよい。
【００６５】
Ｍａｐタスク実行部２４１は、識別子付ＲＤＦデータ表４１１又は４２１からＭａｐ処理を行う対象とするデータを取得してｋｅｙ＝ｖａｌｕｅ形式のデータに変換しそのデータを入力とする。ここでは、Ｍａｐタスク実行部２４１は、主語とｋｅｙとし述語及び目的語の組み合わせのｖａｌｕｅパターンをｖａｌｕｅとするデータを入力とする。
【００６６】
そして、各Ｍａｐタスク実行部２４１は、入力のデータからｖａｌｕｅを表すパターン識別子が１００２であるデータ４１２又は４２２を抽出する。そして、各Ｍａｐタスク実行部２４１は、抽出したデータ４１２又は４２２に対してシャッフル及びソート処理を実行する。ここでは、各Ｍａｐタスク実行部２４１は、ｋｅｙがＢであるデータを一方に集め、それ以外のデータを他方に集める。このｋｅｙ毎に各スレーブサーバ１２にデータを集める処理が、「３要素のいずれか１つの要素を基準に集約」する処理の一例にあたる。
【００６７】
さらに、各Ｍａｐタスク実行部２４１は、ｋｅｙを基準に収集したデータをソートしてデータ４１３又は４２３を生成する。そして、各Ｍａｐタスク実行部２４１は、データ４１３又は４２３をＲｅｄｕｃｅタスク実行部２４２へ出力する。このＭａｐタスク実行部２４１が、「検索部」の一例にあたる。
【００６８】
Ｒｅｄｕｃｅタスク実行部２４２は、Ｒｅｄｕｃｅ処理を行う。例えば図８に示すように、各Ｒｅｄｕｃｅタスク実行部２４２は、データ４１３又は４２３の入力をそれぞれ対応するＭａｐタスク実行部２４１から受ける。次に、各Ｒｅｄｕｃｅタスク実行部２４２は、取得したデータ４１３又は４２３から同じｋｅｙを有するデータの数を集計する。そして、各Ｒｅｄｕｃｅタスク実行部２４２は、Ｒｅｄｕｃｅ処理の結果４１４又は４２４をタスクトラッカー１２３へ出力する。ここで、図８の結果４１４及び４２４におけるｃはカウント値を表す。このＲｅｄｕｃｅタスク実行部２４２による同じｋｅｙを有するデータの数を集計が、「予め決められた処理の実行」の一例にあたる。
【００６９】
次に、図９を参照して、実施例１に係る識別子表及び識別子付ＲＤＦデータ表の生成処理の流れについて説明する。図９は、実施例１に係る識別子表及び識別子付ＲＤＦデータ表の生成処理のフローチャートである。以下では、ＨＤＦＳ１１１との間のデータの送受信におけるＲＤＦコントローラ１１７の仲介動作を省略する。
【００７０】
第１生成部１１５は、ＲＤＦストア１１０に格納されたＲＤＦデータから全ての主語、述語及び目的語の重複を除いて取得する。そして、第１生成部１１５は、取得した主語、述語及び目的語を２つずつ組み合わせて、ｖａｌｕｅパターンを抽出する（ステップＳ１）。
【００７１】
次に、第１生成部１１５は、抽出したｖａｌｕｅパターンの中にＲＤＦストア１１０に格納された実際のＲＤＦデータの中に存在しないｖａｌｕｅパターンがあるか否かを判定する（ステップＳ２）。実際には存在しないｖａｌｕｅパターンが無い場合（ステップＳ２：否定）、第１生成部１１５は、ステップＳ４へ進む。
【００７２】
実際には存在しないｖａｌｕｅパターンがある場合（ステップＳ２：肯定）、第１生成部１１５は、抽出したｖａｌｕｅパターンの中から実際には存在しないｖａｌｕｅパターンを除いて、実際に存在するｖａｌｕｅパターンを抽出する（ステップＳ３）。
【００７３】
次に、第１生成部１１５は、実際に存在するｖａｌｕｅパターンに識別子を割り当て、各ｖａｌｕｅパターンに対応するパターン識別子を表す識別子対応表を生成する（ステップＳ４）。その後、第１生成部１１５は、生成した識別子対応表のＲＤＦストア１１０への格納をＲＤＦコントローラ１１７に行わせ、識別子対表の生成完了を第２生成部１１６に通知する。
【００７４】
識別子対表の生成完了の通知を受けた第２生成部１１６は、ＲＤＦストア１１０に含まれる全てのＲＤＦデータ及び識別子対応表をＲＤＦストア１１０から取得する。次に、第２生成部１１６は、各ＲＤＦデータの主語と述語とを組み合わせたｖａｌｕｅパターン、述語と目的語とを組わせたｖａｌｕｅパターン及び主語と目的語とを組わせたｖａｌｕｅパターンを取得する。そして、第２生成部１１６は、取得したｖａｌｕｅパターンに対応するパターン識別子を識別子対応表から取得する。次に、第２生成部１１６は、トリプルの対応を表す対応表における各ＲＤＦデータに取得したパターン識別子を付加して識別子付ＲＤＦデータ表を生成する（ステップＳ５）。その後、第２生成部１１６は、生成した識別子付ＲＤＦデータ表をＲＤＦストア１１０に格納する。ここで、本実施例では、第１生成部１１５からの通知を受けた第２生成部１１６が、自動的に識別子付ＲＤＦデータの生成を行うように説明したが、これは他の手順でもよい。例えば、第２生成部１１６は、ジョブクライアント３０を用いた利用者からの指示を受けて、その指示の入力をトリガとして識別子付ＲＤＦデータの生成を行ってもよい。
【００７５】
ネームノード１１２は、識別子付ＲＤＦデータ表をＲＤＦストア１１０から取得する。次に、ネームノード１１２は、識別子付ＲＤＦデータ表に登録されたデータを含む各ブロックを配置するデータノード１２１を決定する。そして、ネームノード１１２は、識別子付ＲＤＦデータ表の一部の行データを含む各ブロックを、配置先として決定したそれぞれのデータノード１２１へ送信し、データの分散配置を実行する（ステップＳ６）。
【００７６】
次に、図１０を参照して、実施例１に係るＭａｐＲｅｄｕｃｅ処理の流れについて説明する。図１０は、実施例１に係るＭａｐＲｅｄｕｃｅ処理のフローチャートである。
【００７７】
ＳＰＡＲＱＬ処理部１１８は、ＳＰＡＲＱＬクエリの実行命令の入力をジョブクライアント３０から受ける。そして、ＳＰＡＲＱＬ処理部１１８は、ＳＰＡＲＱＬクエリを実行する（ステップＳ１１）。
【００７８】
次に、ＳＰＡＲＱＬ処理部１１８は、ＳＰＡＲＱＬクエリをＭａｐＲｅｄｕｃｅ処理のジョブへ変換する（ステップＳ１２）。
【００７９】
次に、ＳＰＡＲＱＬ処理部１１８は、ＨＤＦＳ１１１から識別子対応表を取得する。そして、ＳＰＡＲＱＬ処理部１１８は、投入されたクエリを構文解析（パース）して識別子対応表に登録されたｖａｌｕｅパターンに該当するｖａｌｕｅパターンがあるか否かを判定する（ステップＳ１３）。該当するｖａｌｕｅパターンが無い場合（ステップＳ１３：否定）、ＳＰＡＲＱＬ処理部１１８は、そのようなｖａｌｕｅパターンのマッチング結果は０件であるという検索結果をジョブクライアント３０に返してＳＰＡＲＱＬクエリの実行処理を終了する。実際には、ＳＰＡＲＱＬ処理部１１８は、パースした段階で識別子対応表に登録されたｖａｌｕｅパターンに該当するｖａｌｕｅパターンがあるか否かが分かる。
【００８０】
これに対して、該当するｖａｌｕｅパターンがある場合（ステップＳ１３：肯定）、ＳＰＡＲＱＬ処理部１１８は、パターン識別子を参照してＭａｐＲｅｄｕｃｅ処理を実行する。
【００８１】
ＭａｐＲｅｄｕｃｅ処理部１１９は、ＳＰＡＲＱＬ処理部１１８からの指示を受けて、パターン識別子を参照してＭａｐＲｅｄｕｃｅ処理の実行をジョブトラッカー１１４に指示する。ジョブトラッカー１１４は、メタデータＤＢ１１３を確認し、ＭａｐＲｅｄｕｃｅ処理を行わせるスレーブサーバ１２を選択する。そして、ジョブトラッカー１１４は、ＭａｐＲｅｄｕｃｅ処理をブロック単位のＭａｐタスクに分割し、選択したスレーブサーバ１２へ送信する。タスクトラッカー１２３は、Ｍａｐタスクをジョブトラッカー１１４から受信する。そして、タスクトラッカー１２３は、取得したＭａｐタスクの実行をＭａｐＲｅｄｕｃｅ処理部１２４に指示する。ＭａｐＲｅｄｕｃｅ処理部１２４は、Ｍａｐタスクの実行の指示をタスクトラッカー１２３から受ける。そして、Ｍａｐタスク実行部２４１は、ＨＤＦＳ１２２に格納された識別符号付ＲＤＦデータを用いて、Ｍａｐタスクで指定されたＭａｐ処理を実行する（ステップＳ１４）。
【００８２】
次に、Ｍａｐタスク実行部２４１は、Ｍａｐ処理の処理結果をｋｅｙ毎にまとまるようシャッフルして各スレーブサーバ１２のＭａｐタスク実行部２４１に振り分ける。さらに、Ｍａｐタスク実行部２４１は、シャッフルにより自装置に振り分けられたデータをｋｅｙ毎にまとまるようにソートする（ステップＳ１５）。そして、Ｍａｐタスク実行部２４１は、ソートしたデータをＲｅｄｕｃｅタスク実行部２４２へ出力する。
【００８３】
Ｒｅｄｕｃｅタスク実行部２４２は、Ｍａｐタスク実行部２４１から取得したデータに対して予め指定されたＲｅｄｕｃｅ処理を実行する（ステップＳ１６）。例えば、Ｒｅｄｕｃｅタスク実行部２４２は、データをｋｅｙ毎に集計する。
【００８４】
その後、Ｒｅｄｕｃｅタスク実行部２４２は、ＭａｐＲｅｄｕｃｅ処理の結果をタスクトラッカー１２３へ出力する。タスクトラッカー１２３は、入力されたＭａｐＲｅｄｕｃｅ処理の結果をマスタサーバ１１のジョブトラッカー１１４へ送信する。ジョブトラッカー１１４は、各スレーブサーバ１２から送信されたＭａｐＲｅｄｕｃｅ処理の結果を収集する。そして、ジョブトラッカー１１４は、ＭａｐＲｅｄｕｃｅ処理の結果を結合する。そして、ジョブトラッカー１１４は、結合したＭａｐＲｅｄｕｃｅ処理の結果をＭａｐＲｅｄｕｃｅ処理部１１９を介してＳＰＡＲＱＬ処理部１１８へ送信する。ＳＰＡＲＱＬ処理部１１８は、結合されたＭａｐＲｅｄｕｃｅ処理の結果を受信し、受信したデータをＲＤＦ形式に変換する（ステップＳ１７）。その後、ＳＰＡＲＱＬ処理部１１８は、ＲＤＦ形式に変換したＭａｐＲｅｄｕｃｅ処理の結果をＳＰＡＲＱＬクエリの実行結果としてジョブクライアント３０へ送信する。
【００８５】
以上に説明したように、本実施例に係るＨａｄｏｏｐクラスタは、グラフデータに含まれる３要素のうちの２要素の組み合わせであるｖａｌｕｅパターンに識別子を割り当てし、その識別子を用いてＭａｐＲｅｄｕｃｅ処理を実行する。これにより、ＭａｐＲｅｄｕｃｅ処理においてグラフデータの検索を行う場合に、データ領域が小さい識別子を用いて検索を行うことができ、検索時のマッチングを高速に行うことができる。
【００８６】
さらに、本実施例に係るＨａｄｏｏｐクラスタは、実際のＲＤＦデータの中には存在しないｖａｌｕｅパターンを除いて識別子対応表を作成する。これにより、存在しないＲＤＦデータを用いた処理を省くことができ、検索速度がさらに向上する。例えば、ＲＤＦデータに存在しないｖａｌｕｅパターンを用いた検索操作の指示を受けた場合、本実施例に係るＨａｄｏｏｐクラスタは、ＭａｐＲｅｄｕｃｅ処理を行わずに結果を返すことができる。
【実施例２】
【００８７】
次に実施例２について説明する。本実施例に係るＨａｄｏｏｐクラスタは、検索の対象とするデータとしてｖａｌｕｅパターンと対応するｋｅｙとが登録された分割データ表を用いることが実施例１と異なる。本実施例に係るＨａｄｏｏｐクラスタ１０も図１及び２で表される。以下の説明では、実施例１と同様の各部の機能については説明を省略する。
【００８８】
第２生成部１１６は、ＲＤＦコントローラ１１７を介してＲ全てのＲＤＦデータ及び識別対応表をＲＤＦストア１１０から取得する。次に、第２生成部１１６は、各ＲＤＦデータの主語、述語及び目的語のうち２つの組み合わせた値を取得し、識別子対応表からその組み合わせの値と一致するｖａｌｕｅパターンに対応する識別子を取得する。そして、第２生成部１１６は、主語、述語及び目的語のうちの２つを組み合わせ毎に、ｖａｌｕｅパターンに対応するパターン識別子と、主語、述語及び目的語のうちｖａｌｕｅパターンに含まれる２要素以外の残りの１要素とを対応させて分割データ表を生成する。
【００８９】
図１１は、分割データ表の一例を表す図である。本実施例に係る第２生成部１１６は、図１１に示すようにｋｅｙの種類多一致するデータ毎にパターン識別情報とｋｅｙとを一致させる分割データ表５０１〜５０３を生成する。
【００９０】
具体的には、第２生成部１１６は、述語と目的語との組み合わせを表すｖａｌｕｅパターンに対応するパターン識別子と主語との対応を表す分割データ表５０１を生成する。また、第２生成部１１６は、主語と述語との組み合わせを表すｖａｌｕｅパターンに対応するパターン識別子と目的語との対応を表す分割データ表５０２を生成する。また、分割データ表５０２は、主語と目的語との組み合わせを表すｖａｌｕｅパターンに対応するパターン識別子と述語との対応を表す分割データ表５０３を生成する。そして、第２生成部１１６は、ＲＤＦコントローラ１１７を介してＲＤＦストア１１０に生成した分割データ表５０１〜５０３を格納させる。
【００９１】
ネームノード１１２は、分割データ表の一部の行データを含むブロックを各データノード１２１へ送信する。データノード１２１は、分割データ表の一部の行データを含むブロックをＨＤＦＳ１２２に格納する。
【００９２】
Ｍａｐタスク実行部２４１は、Ｍａｐタスクの実行指示をタスクトラッカー１２３から受信する。そして、Ｍａｐタスク実行部２４１は、Ｍａｐタスクで使用するテーブルを選択する。例えば、Ｍａｐタスクが述語と目的語とを組み合わせたｖａｌｕｅパターン用いるＭａｐ処理の場合、Ｍａｐタスク実行部２４１は、述語と目的語とを組み合わせたｖａｌｕｅパターンが登録された分割データ表を選択する。図１１を用いた場合を例に説明すると、例えば、主語と述語との組み合わせのｖａｌｕｅパターンを用いたＭａｐ処理の場合、Ｍａｐタスク実行部２４１は、分割データ表５０１を選択する。
【００９３】
そして、Ｍａｐタスク実行部２４１は、ＨＤＦＳ１２２に格納された各ブロックに対して、タスクトラッカー１２３から実行の指示を受けたＭａｐタスクを実行する。その後、Ｍａｐタスク実行部２４１は、Ｍａｐ処理、並びに、シャッフル及びソート処理を実行した結果をＲｅｄｕｃｅタスク実行部２４２へ出力する。
【００９４】
ここで、図１２を参照して、実施例２に係るＭａｐタスク実行部２４１によるＭａｐ処理の流れについて説明する。図１２は、実施例２に係るパラメータ識別子を用いた場合のＭａｐＲｅｄｕｃｅ処理の概要を表す図である。ここでは、図１２に記載された分割データ表５１１及び５２１のそれぞれが異なるＭａｐＲｅｄｕｃｅ処理部１２４で処理される場合で説明する。
【００９５】
例えば、図１２では、Ｍａｐタスク実行部２４１は、太枠で囲われたパラメータ識別子である１００２をｖａｌｕｅとして抽出するＭａｐタスクを取得する。次に、Ｍａｐタスク実行部２４１は、分割データ表５１１又は５２１からＭａｐ処理を行う対象とするデータを取得する。この場合、分割データ表５１１及び５２１のデータは既にｋｅｙ＝ｖａｌｕｅの形式であるので、各Ｍａｐタスク実行部２４１は、分割データ表５１１又は５２１のデータをそのまま入力とすることができる。
【００９６】
そして、各Ｍａｐタスク実行部２４１は、入力されたデータからｖａｌｕｅにあたるパターン識別子が１００２であるデータ５１２又は５２２を抽出する。次に、各Ｍａｐタスク実行部２４１は、抽出したデータ５１２又は５２２に対してシャッフル及びソート処理を実行しデータ５１３及び５２３を取得する。
【００９７】
Ｒｅｄｕｃｅタスク実行部２４２は、Ｍａｐ処理、並びに、シャッフル及びソート処理の結果をＭａｐタスク実行部２４１から取得する。そして、Ｒｅｄｕｃｅタスク実行部２４２は、取得したデータに対してＲｅｄｕｃｅ処理を行う。
【００９８】
ここで、図１２を参照して、実施例２に係るＲｅｄｕｃｅタスク実行部２４２によるＲｅｄｕｃｅ処理の流れについて説明する。各Ｒｅｄｕｃｅタスク実行部２４２は、データ５１３又は５２３の入力をそれぞれ対応するＭａｐタスク実行部２４１から受ける。次に、各Ｒｅｄｕｃｅタスク実行部２４２は、取得したデータ５１３又は５２３から同じｋｅｙを有するデータの数を集計する。そして、各Ｒｅｄｕｃｅタスク実行部２４２は、Ｒｅｄｕｃｅ処理の結果５１４又は５２４をタスクトラッカー１２３へ出力する。
【００９９】
以上に説明したように、本実施例に係るＨａｄｏｏｐクラスタは、ｖａｌｕｅパターンに対応する識別子とその識別子に対応するｋｅｙとの対応を表す分割データ表を用いてＭａｐＲｅｄｕｅｃ処理を実行する。本実施例に係るＨａｄｏｏｐクラスタは、Ｍａｐ処理の目的に応じて分割データ表を選択する。各分割データ表は実施例１で用いた識別子付ＲＤＦデータ表よりもサイズが小さいため、実施例１に比べてメモリの消費量を抑えることができ、且つ、表のスキャンを迅速に行うことができる。
【０１００】
ここで、以上の各実施例では、Ｈａｄｏｏｐクラスタを用いて説明したが、システムの構成はこれに限らず、３つの要素を有するデータを２つの要素に対する処理に対して用いるシステムであれば他のシステム構成でもよい。また、以上の各実施例ではＲＤＦデータを用いて説明したが、グラフデータで有れば他のデータを用いても同様の処理を行うことができ、同様の効果を得ることができる。
【０１０１】
（ハードウェア構成）
上述してきた各実施例に係るマスタサーバ１１及びスレーブサーバ１２は、例えば図１３に示すようなハードウェア構成を有するコンピュータで実現できる。図１３は、コンピュータのハードウェア構成の一例を表す図である。コンピュータ９０は、ＣＰＵ（Central  Processing  Unit）９１、ＲＡＭ（Random  Access  Memory）９２、ＲＯＭ（Read    Only    Memory）９３及びＨＤＤ（Hard    Disk    Drive）９４を有する。さらに、コンピュータ９０は、通信インターフェイス（Ｉ／Ｆ：Interface）９５、入出力インターフェイス（Ｉ／Ｆ）９６、及びメディアインターフェイス（Ｉ／Ｆ）９７を有する。
【０１０２】
ＣＰＵ９１は、ＲＯＭ９３またはＨＤＤ９４に格納されたプログラムに基づいて動作し、各部の制御を行う。ＲＯＭ９３は、コンピュータ９０の起動時にＣＰＵ９１によって実行されるブートプログラムや、コンピュータ９０のハードウェアに依存するプログラム等を格納する。
【０１０３】
ＨＤＤ９４は、ＣＰＵ９１によって実行されるプログラム、及び、かかるプログラムによって使用されるデータ等を格納する。通信インターフェイス９５は、ネットワークを介して他の機器からデータを受信してＣＰＵ９１へ送り、ＣＰＵ９１が生成したデータをネットワークを介して他の機器へ送信する。
【０１０４】
ＣＰＵ９１は、入出力インターフェイス９６を介して、ディスプレイやプリンタ等の出力装置、及び、キーボードやマウス等の入力装置を制御する。ＣＰＵ９１は、入出力インターフェイス９６を介して、入力装置からデータを取得する。また、ＣＰＵ９１は、生成したデータを入出力インターフェイス９６を介して出力装置へ出力する。
【０１０５】
メディアインターフェイス９７は、記録媒体９８に格納されたプログラムまたはデータを読み取り、ＲＡＭ９２を介してＣＰＵ９１に提供する。ＣＰＵ９１は、かかるプログラムを、メディアインターフェイス９７を介して記録媒体９８からＲＡＭ９２上にロードし、ロードしたプログラムを実行する。記録媒体９８は、例えばＤＶＤ（Digital    Versatile    Disc）、ＰＤ（Phase    change    rewritable    Disk）等の光学記録媒体、ＭＯ（Magneto-Optical    disk）等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等である。
【０１０６】
例えば、コンピュータ９０のＲＡＭ９２及びＨＤＤ９４は、ＨＤＦＳ１１１及び１２２、並びに、メタデータＤＢ１１３の機能を実現する。さらに、コンピュータ９０のＣＰＵ９１は、ＲＡＭ９２上にロードされたプログラムを実行することにより、ネームノード１１２、ジョブトラッカー１１４、第１生成部１１５、第２生成部１１６の機能と実現する。また、コンピュータ９０のＣＰＵ９１は、ＲＤＦコントローラ１１７、ＳＰＡＲＱＬ処理部１１８及びＭａｐＲｅｄｕｃｅ処理部１１９の機能を実現する。さらに、コンピュータ９０のＣＰＵ９１は、データノード１２１、タスクトラッカー１２３及びＭａｐＲｅｄｕｃｅ処理部１２４の機能を実現する。
【０１０７】
コンピュータ９０のＣＰＵ９１は、これらのプログラムをＨＤＤ９４から読み取って実行するが、他の例として、記録媒体９８からプログラムを読みとってもよいし、他の装置からネットワークを介してこれらのプログラムを取得してもよい。
【０１０８】
ここで、以上の説明では、ＳＰＡＲＱＬ処理部１１８が、ＳＰＡＲＱＬクエリで指定された検索対象のｖａｌｕｅパターンに対応するパターン識別子を識別子対応表から取得しする場合で説明したが、この処理はスレーブサーバ１２側で実行することも可能である。例えば、スレーブサーバ１２のＭａｐＲｅｄｕｃｅ処理部１２４が、検索対象のｖａｌｕｅパターンに対応するパターン識別子を識別子対応表から取得して、取得したパターン識別子を用いてＭａｐＲｅｄｕｃｅ処理を実行してもよい。
【実施例３】
【０１０９】
次に、実施例３について説明する。ＨａｄｏｏｐによるＭａｐＲｅｄｕｃｅ処理では、入力データと最終の出力データは共にＨＤＦＳに格納される。さらに、ＨａｄｏｏｐによるＭａｐＲｅｄｕｃｅ処理では、Ｍａｐ処理において、生成される中間ファイルも、一時的にＨＤＦＳに格納される。そのため、Ｍａｐ処理において、ＨＤＦＳに対する中間ファイルの入出力が行われる。ＨＤＦＳは、ＨＤＤやＳＳＤ（Solid  State  Drive）に配置されるファイルシステムであり、演算処理に比べて読み書きにかかる時間が大きい。そのため、ＨａｄｏｏｐによるＭａｐＲｅｄｕｃｅ処理を行う場合、遅延が発生するおそれがある。
【０１１０】
そこで、ＭａｐＲｅｄｕｃｅ処理を行う際に、メモリ上のデータを用いて処理を行うインメモリ処理を用いることで、ＨＤＦＳへのアクセスを減らして、処理速度を向上させる方法が考えられる。例えば、分散型のインメモリ処理として、Ｓｐａｒｋ（登録商標）を用いた処理が存在する。Ｓｐａｒｋを用いることで、インメモリでＭａｐＲｅｄｕｃｅを行うことができる。
【０１１１】
Ｓｐａｒｋでは、ストレージとして、ＨａｄｏｏｐのＨＤＦＳが利用される。そのため、Ｓｐａｒｋを用いた場合にも、入力データ及び最終の出力データは、ＨＤＦＳに格納される。一方、Ｍａｐ処理における中間データはＲＤＤ（Resilient  Distributed  Dataset）形式でメモリ上に保持され、ＨＤＦＳに格納されることなく連続的に処理される。そのため、深層学習などにおいて処理結果を用いてＭａｐ処理を繰り返す場合などでは、ＨａｄｏｏｐによるＭａｐＲｅｄｕｃｅ処理よりも処理速度をより向上させることが可能である。
【０１１２】
しかしながら、Ｓｐａｒｋのような分散型のインメモリ処理を用いてメインメモリでデータ処理を完結させる場合、識別子対応表をメモリ上に展開する構成では、識別子対応表のサイズが大きいとメモリ上に展開することが困難である。その場合、メモリ内でＭａｐ処理に割り当てるメモリ容量が不足するため、処理速度が低下するおそれがある。
【０１１３】
そこで、本実施例に係る情報処理システムでは、識別子対応表を分割することでメモリ上に展開する識別子対応表を小さくする。以下では、Ｓｐａｒｋを用いたＭａｐＲｅｄｕｃｅ処理における分割した識別子対応表の使用について主に説明する。図１４は、実施例３に係るマスタサーバ及びスレーブサーバの詳細を表すブロック図である。以下の説明では、実施例１と同様の各部の動作は説明を省略する。
【０１１４】
図１４に示すように、マスタサーバ１１は、実施例１の各部に加えてＳｐａｒｋ処理部１３１を有する。また、スレーブサーバ１２は、実施例１の各部に加えてＳＳＤ１２５及びメモリ１２６を有する。さらに、本実施例に係るスレーブサーバ１２のＭａｐＲｅｄｕｃｅ処理部１２４は、Ｍａｐタスク実行部２４１及びＲｅｄｕｃｅタスク実行部２４２に加えて、メモリ管理部２４３を有する。
【０１１５】
第１生成部１１５は、識別子対応表の生成の指示をＨＤＦＳクライアント２０から受ける。そして、第１生成部１１５は、ＲＤＦストア１１０に登録された全てのＲＤＦデータの主語、述語及び目的語の取得をＲＤＦコントローラ１１７に指示する。その後、第１生成部１１５は、ＲＤＦストア１１０に登録された全てのＲＤＦデータの主語、述語及び目的語をＲＤＦコントローラ１１７から取得する。
【０１１６】
次に、第１生成部１１５は、取得した主語、述語及び目的語のそれぞれの重複を除いて集計する。そして、第１生成部１１５は、集計した主語、述語及び目的語を用いて、全ての通りの組み合わせのｖａｌｕｅバターンを生成する。次に、第１生成部１１５は、実際の各ＲＤＦデータの主語、述語及び目的語の組み合わせに含まれないｖａｌｕｅパターン以外のｖａｌｕｅパターンを抽出して、識別子を割り当てる。そして、第１生成部１１５は、実際の各ＲＤＦデータの主語、述語及び目的語の組の中に含まれないｖａｌｕｅパターンについては、不存在を表す情報を付加して、各ｖａｌｕｅパターンと割り当てたパターン識別子との対応を表す識別子対応表を作成する。
【０１１７】
この段階では、第１生成部１１５は、図１５に示す識別子対応表２１３が生成される。図１５は、分割前の識別子対応表の一例を表す図である。この識別子対応表２１３には、述語と目的語とを組み合わせたＶａｌｕｅバターンを表す領域２１４、主語と述語とを組み合わせたｖａｌｕｅバターンを表す領域２１５、主語と目的語とを組み合わせたＶａｌｕｅバターンを表す領域２１６が含まれる。
【０１１８】
ここで、例えば、「ｓｅｌｅｃｔ  ？  ｓ  ｗｈｅｒｅ  ｛？ｓ  ｌｉｋｅｓ  Ｃ｝」といったＳＰＡＲＱＬクエリでは、述語と目的語とを組み合わせたｖａｌｕｅパターンが検索される。すなわち、このＳＰＡＲＱＬクエリでは、識別子対応表２１３の中の領域２１５及び２１６は、検索対象としなくてもよい。このように、検索が、対応する主語を検出する主語基準の検索なのか、対応する目的語を検出する目的語基準の検索なのか、又は、対応する述語を検出する述語基準の検索なのかにより、識別子対応表２１３において実際に必要となる領域が異なる。
【０１１９】
そして、第１生成部１１５は、識別子対応表２１３を分割して、図１６に示す主語基準の検索用の分割識別子対応表２３１、目的語基準の検索用の分割識別子対応表２３２及び述語基準の検索用の分割識別子対応表２３３を生成する。図１６は、分割識別子対応表の一例を表す図である。
【０１２０】
その後、第１生成部１１５は、生成した分割識別子対応表２３１〜２３３をＲＤＦコントローラ１１７へ送信し、ＲＤＦストア１１０への格納を指示する。さらに、第１生成部１１５は、識別子対応表の生成完了を第２生成部１１６に通知する。これにより、ＲＤＦコントローラ１１７によって、ＲＤＦストア１１０へ、分割識別子対応表２３１〜２３３が格納される。
【０１２１】
ＳＰＡＲＱＬ処理部１１８は、ＳＰＡＲＱＬクエリの入力をジョブクライアント３０から受ける。そして、ＳＰＡＲＱＬ処理部１１８は、取得したＳＰＡＲＱＬクエリを解析してＭａｐＲｅｄｕｃｅ処理に変換する。その後、ＳＰＡＲＱＬ処理部１１８は、パターン識別子を含むＭａｐＲｅｄｕｃｅ処理をＳｐａｒｋ処理部１３１に出力する。さらに、ＳＰＡＲＱＬ処理部１１８は、分割識別子対応表２３１〜２３３の送信要求をネームノード１１２に通知する。
【０１２２】
ネームノード１１２は、分割識別子対応表２３１〜２３３の送信要求の通知をＳＰＡＲＱＬ処理部１１８から受信する。そして、ネームノード１１２は、ＲＤＦストア１１０から分割識別子対応表２３１〜２３３を取得し、データノード１２１へ送信する。また、ネームノード１１２は、識別子付ＲＤＦデータ表の一部の行データを含むブロックを選択したデータノード１２１へ送信し配置する。
【０１２３】
Ｓｐａｒｋ処理部１３１は、Ｓｐａｒｋを用いて実行するＭａｐＲｅｄｕｃｅ処理の入力をＳＰＡＲＱＬ処理部１１８から受ける。次に、Ｓｐａｒｋ処理部１３１は、受信したＭａｐＲｅｄｕｃｅ処理に含まれる個々のＭａｐＲｅｄｕｃｅ処理を取得する。そして、Ｓｐａｒｋ処理部１３１は、取得したＭａｐＲｅｄｕｃｅ処理の実行をジョブトラッカー１１４に指示する。さらに、深層学習などにおいて実行結果を用いてＭａｐＲｅｄｕｃｅ処理が繰り返し行われる場合、Ｓｐａｒｋ処理部１３１は、繰り返しの手順を管理して、ジョブトラッカー１１４にメモリ１２６の上でのＭａｐＲｅｄｕｃｅ処理の繰り返しの実行を指示する。
【０１２４】
その後、Ｓｐａｒｋ処理部１３１は、ＭａｐＲｅｄｕｃｅ処理の実行結果の入力をジョブトラッカー１１４から受ける。そして、Ｓｐａｒｋ処理部１３１は、ＭａｐＲｅｄｕｃｅ処理の実行結果をＳＰＡＲＱＬ処理部１１８へ出力する。この場合のＳｐａｒｋ処理部１３１は、Ｓｐａｒｋにおける「Ｄｒｉｖｅｒ」にあたる。
【０１２５】
データノード１２１は、識別子付ＲＤＦデータ表の一部の行データを含むブロックをネームノード１１２から受信する。ここで、データノード１２１は、複数のブロックを受信してもよい。そして、データノード１２１は、取得したブロックを自装置のＨＤＦＳ１２２へ格納する。
【０１２６】
また、データノード１２１は、分割識別子対応表２３１〜２３３をネームノード１１２から受信する。そして、データノード１２１は、取得した分割識別子対応表２３１〜２３３を次装置のＨＤＦＳ１２２へ格納する。
【０１２７】
本実施例に係るＭａｐＲｅｄｕｃｅ処理部１２４は、Ｍａｐタスク実行部２４１、Ｒｅｄｕｃｅタスク実行部２４２及びメモリ管理部２４３を有する。ＭａｐＲｅｄｕｃｅ処理部１２４は、Ｍａｐタスクをタスクトラッカー１２３から取得し、Ｓｐａｒｋを用いたＭａｐＲｅｄｕｃｅ処理を実行する。この場合のＭａｐＲｅｄｕｃｅ処理部１２４は、Ｓｐａｒｋにおける「Ｅｘｅｃｔｏｒ」にあたる。以下にＳｐａｒｋを用いたＭａｐＲｅｄｕｃｅ処理の詳細を説明する。
【０１２８】
メモリ管理部２４３は、タスクトラッカー１２３から取得したＭａｐタスクで指定された検索するｖａｌｕｅパターンを取得する。そして、メモリ管理部２４３は、そのｖａｌｕｅパターンによる検索が、主語基準の検索、目的語基準の検索、又は、述語基準の検索のいずれにあたるかを特定する。そして、メモリ管理部２４３は、分割識別子対応表２３１〜２３３のうち特定した種類の検索に対応する表をＳＳＤ１２５から取得する。ここでは、主語基準の検索を行う場合で説明する。すなわち、メモリ管理部２４３は、主語基準の検索用の分割識別子対応表２３１をＳＳＤ１２５から取得する。そして、メモリ管理部２４３は、取得した分割識別子対応表２３１をＲＤＤに変換する。その後、メモリ管理部２４３は、ＲＤＤに変換した分割識別子対応表２３１をメモリ１２６上に展開する。
【０１２９】
また、メモリ管理部２４３は、ＨＤＦＳ１２２に格納された識別子付ＲＤＦデータ表の一部の行データを含むブロックを取得する。そして、メモリ管理部２４３は、取得したブロックをＲＤＤに変換する。その後、メモリ管理部２４３は、ＲＤＤに変換したブロックをメモリ１２６上に展開する。ＲＤＤは、不変で並列実行可能な分割されたコレクションである。ＲＤＤは、メモリ上に保持することが可能で、耐障害性、データ局所性などの特徴を有する。
【０１３０】
その後、メモリ管理部２４３は、Ｒｅｄｕｃｅタスク実行部２４２からＲｅｄｕｃｅ処理の完了の通知を受けると、ＭａｐＲｅｄｕｃｅ処理の実行結果をメモリ１２６から取得する。そして、メモリ管理部２４３は、取得したＭａｐＲｅｄｕｃｅ処理の実行結果をＲＤＤの形式からＨＤＦＳ１１１への格納用のデータ形式に直してＨＤＦＳ１２２へ格納する。すなわち、ＨＤＦＳ１２２には、ＭａｐＲｅｄｕｃｅ処理に使用するデータが格納された識別子付ＲＤＦデータ表及びＭａｐＲｅｄｕｃｅ処理の実行結果が格納される。
【０１３１】
Ｍａｐタスク実行部２４１は、タスクトラッカー１２３から実行の指示を受けたＳｐａｒｋを用いたＭａｐタスクにおけるＭａｐ処理を実行する。具体的には、Ｍａｐタスク実行部２４１は、Ｍａｐタスクで指定された検索対象となるｖａｌｕｅパターンを取得する。そして、Ｍａｐタスク実行部２４１は、取得したｖａｌｕｅパターンでメモリ１２６上の分割識別子対応表２３１を検索して、ｖａｌｕｅパターンに対応するパラメータ識別子を取得する。
【０１３２】
次に、Ｍａｐタスク実行部２４１は、識別子付ＲＤＦデータ表からＭａｐ処理を行う対象とするデータを取得してｋｅｙ＝ｖａｌｕｅ形式のデータに変換しそのデータを入力とする。次に、Ｍａｐタスク実行部２４１は、ＲＤＤに変換された入力データの中からｖａｌｕｅが取得したパターン識別子と一致するデータを抽出する。次に、Ｍａｐタスク実行部２４１は、抽出したデータに対してシャッフル及びソート処理を実行する。そして、各Ｍａｐタスク実行部２４１は、シャッフル及びソート処理を実行したデータをＲｅｄｕｃｅタスク実行部２４２へ出力する。
【０１３３】
ここで、Ｍａｐタスク実行部２４１は、以上の処理の際に生成される中間データはＲＤＤ形式でメモリ１２６上に保持しつつ、以上の処理を連続的に実行する。特に、深層学習などにおいてＭａｐＲｅｄｕｃｅ処理の実行結果を繰り返し用いて処理を行う場合、Ｍａｐタスク実行部２４１は、メモリ１２６に対するデータの読み出し及び書き込みにより連続的に繰り返し処理を実行することができる。
【０１３４】
Ｒｅｄｕｃｅタスク実行部２４２は、Ｒｅｄｕｃｅ処理を行う。Ｒｅｄｕｃｅ処理は、Ｒｅｄｕｃｅの設計者が予め決めた処理を実行することができる。例えば、Ｒｅｄｕｃｅタスク実行部２４２は、値の合計や集約などの処理を行う。その後、Ｒｅｄｕｃｅタスク実行部２４２は、ＭａｐＲｅｄｕｃｅ処理の実行結果をメモリ１２６に格納する。さらに、Ｒｅｄｕｃｅタスク実行部２４２は、Ｒｅｄｕｃｅ処理の完了をメモリ管理部２４３及びタスクトラッカー１２３へ通知する。
【０１３５】
タスクトラッカー１２３は、Ｒｅｄｕｃｅ処理の完了の通知をＲｅｄｕｃｅタスク実行部２４２から受ける。そして、タスクトラッカー１２３は、ＭａｐＲｅｄｕｃｅ処理の実行結果をＨＤＦＳ１２２から取得し、ジョブトラッカー１１４へ送信する。
【０１３６】
ここで、以上の説明では、スレーブサーバ１２が保持するＳＳＤ１２５に分割識別子対応表２３１〜２３３を格納する構成で説明したが、分割識別子対応表２３１〜２３３の配置場所に特に制限は無い。例えば、マスタサーバ１１に分割識別子対応表２３１〜２３３を配置して、スレーブサーバ１２のメモリ管理部２４３が、マスタサーバ１１から分割識別子対応表２３１〜２３３を取得する構成であってもよい。
【０１３７】
次に、図１７を参照して、実施例３に係るパラメータ識別子を用いた場合のＭａｐＲｅｄｕｃｅ処理の概要を説明する。図１７は、実施例３に係るＭａｐＲｅｄｕｃｅ処理の概要を表す図である。ここでは、図１７に記載された識別子付ＲＤＦデータ表６１１及び６２１のそれぞれが異なるＭａｐＲｅｄｕｃｅ処理部１２４で処理される場合で説明する。
【０１３８】
例えば、図１７では、Ｍａｐタスク実行部２４１は、ＳＰＡＲＱＬクエリが「ｓｅｌｅｃｔ  ？ｓ  ｗｈｅｒｅ｛？ｓ  ｌｏｖｅｓ  Ｃ．｝という構文で表されるデータ抽出をＳｐａｒｋを用いて行うＭａｐタスクを取得する。メモリ管理部２４３は、識別子付ＲＤＦデータ表６１１及び６２１、並びに、分割識別子対応表２３１をＲＤＤに変換してメモリ１２６上に格納する。
【０１３９】
Ｍａｐタスク実行部２４１は、ＲＤＤに変換されメモリ上に格納された分割識別子対応表２３１から、「ｌｏｖｅｓ  Ｃ」に対応するパターン識別子として１００２を取得する。そして、Ｍａｐタスク実行部２４１は、ＲＤＤに変換された識別子付ＲＤＦデータ表４１１又は４２１からＭａｐ処理を行う対象とするデータを取得してｋｅｙ＝ｖａｌｕｅ形式のデータに変換しそのデータを入力とする。ここでは、Ｍａｐタスク実行部２４１は、主語とｋｅｙとし述語及び目的語の組み合わせのｖａｌｕｅパターンをｖａｌｕｅとするデータを入力とする。
【０１４０】
そして、各Ｍａｐタスク実行部２４１は、入力のデータからｖａｌｕｅを表すパターン識別子が１００２であるデータ６１２又は６２２を抽出してメモリ１２６上に格納する。そして、各Ｍａｐタスク実行部２４１は、抽出したデータ６１２又は６２２に対してシャッフル及びソート処理を実行し処理結果をメモリ１２６上に格納する。ここでは、各Ｍａｐタスク実行部２４１は、ｋｅｙがＢであるデータを一方に集め、それ以外のデータを他方に集める。さらに、各Ｍａｐタスク実行部２４１は、ｋｅｙを基準に収集したデータをソートしてデータ６１３又は６２３を生成しメモリ１２６上に格納する。
【０１４１】
Ｒｅｄｕｃｅタスク実行部２４２は、データ６１３又は６２３の入力をメモリ１２６から取得する。次に、Ｒｅｄｕｃｅタスク実行部２４２は、取得したデータ６１３又は６２３から同じｋｅｙを有するデータの数を集計する。そして、Ｒｅｄｕｃｅタスク実行部２４２は、Ｒｅｄｕｃｅ処理の結果６１４又は６２４をメモリ１２６上に格納する。ここで、図１７の結果６１４及び６２４におけるｃはカウント値を表す。
【０１４２】
次に、図１８を参照して、実施例３に係る識別子表及び識別子付ＲＤＦデータ表の生成処理の流れについて説明する。図１８は、実施例３に係る識別子表及び識別子付ＲＤＦデータ表の生成処理のフローチャートである。以下では、ＨＤＦＳ１１１との間のデータの送受信におけるＲＤＦコントローラ１１７の仲介動作を省略する。
【０１４３】
第１生成部１１５は、ＲＤＦストア１１０に格納されたＲＤＦデータから全ての主語、述語及び目的語の重複を除いて取得する。そして、第１生成部１１５は、取得した主語、述語及び目的語を２つずつ組み合わせて、ｖａｌｕｅパターンを抽出する（ステップＳ１０１）。
【０１４４】
次に、第１生成部１１５は、抽出したｖａｌｕｅパターンの中にＲＤＦストア１１０に格納された実際のＲＤＦデータの中に存在しないｖａｌｕｅパターンがあるか否かを判定する（ステップＳ１０２）。実際には存在しないｖａｌｕｅパターンが無い場合（ステップＳ１０２：否定）、第１生成部１１５は、ステップＳ１０４へ進む。
【０１４５】
実際には存在しないｖａｌｕｅパターンがある場合（ステップＳ１０２：肯定）、第１生成部１１５は、抽出したｖａｌｕｅパターンの中から実際には存在しないｖａｌｕｅパターンを除いて、実際に存在するｖａｌｕｅパターンを抽出する（ステップＳ１０３）。
【０１４６】
次に、第１生成部１１５は、実際に存在するｖａｌｕｅパターンに識別子を割り当て、各ｖａｌｕｅパターンに対応するパターン識別子を表す識別子対応表を生成する（ステップＳ１０４）。
【０１４７】
次に、第１生成部１１５は、生成した識別子対応表を主語基準の検索用、述語基準の検索用、目的語基準の検索用に分割して分割識別子対応表２３１〜２３３を作成する。次に、第１生成部１１５は、分割識別子対応表２３１〜２３３をＲＤＦストア１１０に格納する（ステップＳ１０５）。さらに、第１生成部１１５は、分割識別子対応表２３１〜２３３の生成完了を第２生成部１１６に通知する。
【０１４８】
分割識別子対表２３１〜２３３の生成完了の通知を受けた第２生成部１１６は、ＲＤＦストア１１０に含まれる全てのＲＤＦデータ及び識別子対応表をＲＤＦストア１１０から取得する。次に、第２生成部１１６は、各ＲＤＦデータの主語と述語とを組み合わせたｖａｌｕｅパターン、述語と目的語とを組わせたｖａｌｕｅパターン及び主語と目的語とを組わせたｖａｌｕｅパターンを取得する。そして、第２生成部１１６は、取得したｖａｌｕｅパターンに対応するパターン識別子を分割識別子対応表２３１〜２３３から取得する。次に、第２生成部１１６は、トリプルの対応を表す対応表における各ＲＤＦデータに取得したパターン識別子を付加して識別子付ＲＤＦデータ表を生成する（ステップＳ１０６）。
【０１４９】
ネームノード１１２は、識別子付ＲＤＦデータ表をＲＤＦストア１１０から取得する。次に、ネームノード１１２は、識別子付ＲＤＦデータ表に登録されたデータを含む各ブロックを配置するデータノード１２１を決定する。そして、ネームノード１１２は、識別子付ＲＤＦデータ表の一部の行データを含む各ブロックを、配置先として決定したそれぞれのデータノード１２１へ送信し、データの分散配置を実行する（ステップＳ１０７）。
【０１５０】
次に、図１９を参照して、実施例３に係るＭａｐＲｅｄｕｃｅ処理の流れについて説明する。図１９は、実施例３に係るＭａｐＲｅｄｕｃｅ処理のフローチャートである。
【０１５１】
ＳＰＡＲＱＬ処理部１１８は、ＳＰＡＲＱＬクエリの実行命令の入力をジョブクライアント３０から受ける。そして、ＳＰＡＲＱＬ処理部１１８は、ＳＰＡＲＱＬクエリを実行する（ステップＳ２０１）。
【０１５２】
次に、ＳＰＡＲＱＬ処理部１１８は、ＳＰＡＲＱＬクエリをＭａｐＲｅｄｕｃｅ処理のジョブへ変換する（ステップＳ２０２）。
【０１５３】
次に、ＳＰＡＲＱＬ処理部１１８は、ＨＤＦＳ１１１から識別子対応表を取得する。そして、ＳＰＡＲＱＬ処理部１１８は、投入されたクエリを構文解析（パース）して識別子対応表に登録されたｖａｌｕｅパターンに該当するｖａｌｕｅパターンがあるか否かを判定する（ステップＳ２０３）。該当するｖａｌｕｅパターンが無い場合（ステップＳ２０３：否定）、ＳＰＡＲＱＬ処理部１１８は、そのようなｖａｌｕｅパターンのマッチング結果は０件であるという検索結果をジョブクライアント３０に返してＳＰＡＲＱＬクエリの実行処理を終了する。
【０１５４】
これに対して、該当するｖａｌｕｅパターンがある場合（ステップＳ２０３：肯定）、ＳＰＡＲＱＬ処理部１１８は、ＭａｐＲｅｄｕｃｅ処理を実行する。Ｓｐａｒｋ処理部１３１は、ＳＰＡＲＱＬ処理部１１８からの指示を受けて、ＭａｐＲｅｄｕｃｅ処理の実行をジョブトラッカー１１４に指示する。ジョブトラッカー１１４は、メタデータＤＢ１１３を確認し、ＭａｐＲｅｄｕｃｅ処理を行わせるスレーブサーバ１２を選択する。そして、ジョブトラッカー１１４は、ＭａｐＲｅｄｕｃｅ処理をブロック単位のＭａｐタスクに分割し、選択したスレーブサーバ１２へ送信する。タスクトラッカー１２３は、Ｍａｐタスクをジョブトラッカー１１４から受信する。そして、タスクトラッカー１２３は、取得したＭａｐタスクの実行をＭａｐＲｅｄｕｃｅ処理部１２４に指示する。ＭａｐＲｅｄｕｃｅ処理部１２４は、Ｍａｐタスクの実行の指示をタスクトラッカー１２３から受ける。そして、メモリ管理部２４３は、分割識別子対応表２３１〜２３３の中からＭａｐタスクで実行する検索基準に応じた表を取得する（ステップＳ２０４）。ここでは、分割識別子対応表２３１を選択した場合で説明する。
【０１５５】
次に、メモリ管理部２４３は、選択した分割識別子対応表２３１及びＨＤＦＳ１２２ｂに格納された識別子付ＲＤＦデータ表をＲＤＤに変換してメモリ１２６上に展開する（ステップＳ２０５）。
【０１５６】
Ｍａｐタスク実行部２４１は、メモリ１２６上に展開された分割識別子対応表２３１及び識別子付ＲＤＦデータ表を用いて、Ｍａｐタスクで指定されたＭａｐ処理を実行する（ステップＳ２０６）。
【０１５７】
次に、Ｍａｐタスク実行部２４１は、Ｍａｐ処理の処理結果をｋｅｙ毎にまとまるようシャッフルして各スレーブサーバ１２のＭａｐタスク実行部２４１に振り分ける。さらに、Ｍａｐタスク実行部２４１は、シャッフルにより自装置に振り分けられたデータをｋｅｙ毎にまとまるようにソートする（ステップＳ２０７）。そして、Ｍａｐタスク実行部２４１は、ソートしたデータをメモリ１２６に格納する。
【０１５８】
Ｒｅｄｕｃｅタスク実行部２４２は、Ｍａｐタスク実行部２４１によりメモリ１２６に格納されたデータに対して予め指定されたＲｅｄｕｃｅ処理を実行する（ステップＳ２０８）。
【０１５９】
その後、Ｒｅｄｕｃｅタスク実行部２４２は、ＭａｐＲｅｄｕｃｅ処理の結果をメモリ１２６に格納する。メモリ管理部２４３は、メモリ１２６に格納されたＭａｐＲｅｄｕｃｅ処理の実行結果を取得してＨＤＦＳ１１１への格納用のデータ形式に変換してＨＤＦＳ１２２に格納する。タスクトラッカー１２３は、ＨＤＦＳ１２２に格納されたＭａｐＲｅｄｕｃｅ処理の実行結果をマスタサーバ１１のジョブトラッカー１１４へ送信する。ジョブトラッカー１１４は、各スレーブサーバ１２から送信されたＭａｐＲｅｄｕｃｅ処理の実行結果を収集する。そして、ジョブトラッカー１１４は、ＭａｐＲｅｄｕｃｅ処理の実行結果を結合する。そして、ジョブトラッカー１１４は、結合したＭａｐＲｅｄｕｃｅ処理の実行結果をＭａｐＲｅｄｕｃｅ処理部１１９を介してＳＰＡＲＱＬ処理部１１８へ送信する。ＳＰＡＲＱＬ処理部１１８は、結合されたＭａｐＲｅｄｕｃｅ処理の実行結果を受信し、受信したデータをＲＤＦ形式に変換する（ステップＳ２０９）。その後、ＳＰＡＲＱＬ処理部１１８は、ＲＤＦ形式に変換したＭａｐＲｅｄｕｃｅ処理の結果をＳＰＡＲＱＬクエリの実行結果としてジョブクライアント３０へ送信する。
【０１６０】
ここで、本実施例では、分散型のインメモリ処理としてＳｐａｒｋを用いる場合で説明したが、他の分散型のインメモリ処理を用いてもよい。また、情報処理システム１は、分散型のインメモリ処理を用いるＭａｐＲｅｄｕｃｅ処理と実施例１で説明した分散型のインメモリ処理を用いないＭａｐＲｅｄｕｃｅ処理とを選択的に実行できる構成にしてもよい。さらに、本実施例では、実施例１で説明したＭａｐＲｅｄｕｃｅ処理に対してＳｐａｒｋを用いる構成で説明したが、実施例２の構成に適用することもできる。
【０１６１】
以上に説明したように、本実施例に係るＨａｄｏｏｐクラスタは、Ｓｐａｒｋを用いたＭａｐＲｅｄｕｃｅ処理を実行する際に、検索対象に応じて作成された識別子対応表のいずれかを用いる。これにより、メモリへの読み込み量を削減して処理に割り当てるメモリ容量を十分に確保することで、処理速度が低下を回避することができる。また、識別子対応表に含まれるエントリ数が少なくなるため、グラフデータの検索効率を向上させることができる。さらに、分散型のインメモリ処理によりＭａｐＲｅｄｕｃｅ処理を実行することにより、ＭａｐＲｅｄｕｃｅ処理の効率を向上させることができる。
【０１６２】
上述してきた各実施例に係るマスタサーバ１１及びスレーブサーバ１２は、例えば図１３に示すようなハードウェア構成を有するコンピュータで実現できる。Ｓｐａｒｋ処理部１３１は、マスタサーバ１１がコンピュータ９０で実現される場合、ＣＰＵ９１及びメモリ９２によりその機能が実現される。また、ＭａｐＲｅｄｕｃｅ処理部１２４は、スレーブサーバ１２がコンピュータ９０で実現される場合、ＣＰＵ９１及びメモリ９２によりその機能が実現される。
【符号の説明】
【０１６３】
１  情報処理システム
１０  Ｈａｄｏｏｐクラスタ
１１  マスタサーバ
１２  スレーブサーバ
２０  ＨＤＦＳクライアント
３０  ジョブクライアント
１１１  ＨＤＦＳ
１１２  ネームノード
１１３  メタデータＤＢ
１１４  ジョブトラッカー
１１５  第１生成部
１１６  第２生成部
１１７  ＲＤＦコントローラ
１１８  ＳＰＡＲＱＬ処理部
１１９  ＭａｐＲｅｄｕｃｅ処理部
１２１  データノード
１２２  ＨＤＦＳ
１２３  タスクトラッカー
１２４  ＭａｐＲｅｄｕｃｅ処理部
１２５  ＳＳＤ
１２６  メモリ
１３１  Ｓｐａｒｋ処理部
２４１  Ｍａｐタスク実行部
２４２  Ｒｅｄｕｃｅタスク実行部
２４３  メモリ管理部
【図１】
2020038610.tif 000003
【図２】
2020038610.tif 000004
【図３】
2020038610.tif 000005
【図４】
2020038610.tif 000006
【図５】
2020038610.tif 000007
【図６】
2020038610.tif 000008
【図７】
2020038610.tif 000009
【図８】
2020038610.tif 000010
【図９】
2020038610.tif 000011
【図１０】
2020038610.tif 000012
【図１１】
2020038610.tif 000013
【図１２】
2020038610.tif 000014
【図１３】
2020038610.tif 000015
【図１４】
2020038610.tif 000016
【図１５】
2020038610.tif 000017
【図１６】
2020038610.tif 000018
【図１７】
2020038610.tif 000019
【図１８】
2020038610.tif 000020
【図１９】
2020038610.tif 000021