(57)【特許請求の範囲】
【請求項１】
１つのキーと値の組をマッピングして中間データを生成するジョブを行うマップ（Map）手段と、該中間データを更に小さな値にセットするジョブを行うリデュース（Reduce）手段、及び、与えられた教師データを格納する分散ファイルシステムを有し、大規模なデータを並列分散処理するためのデータ分析及び機械学習処理装置であって、
前記Map手段または前記Reduce手段にジョブが与えられると、該ジョブのパラメータの値、利用位置、利用元関数を含むパラメータ情報を検出し、前記分散ファイルシステムに格納するパラメータ検出手段と、
前記Map手段、前記Reduce手段に新たなジョブが与えられると、該ジョブのパラメータの値、利用位置、及び、利用元関数を含む新パラメータ情報を検出し、該新パラメータ情報と前記分散ファイルシステムに格納されている前記パラメータ情報と比較し、パラメータに依存しない重複部分のジョブを統合するジョブ統合手段と、
前記Map手段または前記Reduce手段を、統合されたジョブを重複部分を共有しながら実行させる共有実行手段と、
を有することを特徴とするデータ分析及び機械学習処理装置。
【請求項２】
前記ジョブ統合手段は、
前記Map手段または前記Reduce手段に対して新たなジョブが追加されると、該Map手段、または、該Reduce手段の実行前に、該ジョブを遅延キューに蓄積する遅延キュー制御手段と、
新たに追加されたジョブと既に前記遅延キューに格納されたジョブのパラメータを比較し、利用するMap手段名またはReduce手段名が同じものがある場合は、ジョブを統合し、所定のキュー保持時間が経過すると、通常のキューに統合されたジョブを移行させる手段と、
を含む請求項１記載のデータ分析及び機械学習処理装置。
【請求項３】
前記ジョブ統合手段は、
前記分散ファイルシステムに格納されている前記パラメータ情報と前記新パラメータ情報を比較して、前記パラメータに依存しない重複部分がある場合は、代表する１つのジョブに対してその他のジョブのパラメータとの差分を追加する手段を含む
請求項１または２記載のデータ分析及び機械学習処理装置。
【請求項４】
前記共有実行手段は、
前記ジョブ統合手段で統合されたジョブの重複部分を共有しながら前記Map手段、または、前記Reduce手段を実行させ、パラメータに依存する処理部分に到達した時点で処理を分岐させる手段を含む
請求項１記載のデータ分析及び機械学習処理装置。
【請求項５】
１つのキーと値の組をマッピングして中間データを生成するジョブを行うマップ（Map）手段と、該中間データを更に小さな値にセットするジョブを行うリデュース（Reduce）手段、及び、与えられた教師データを格納する分散ファイルシステムを有し、大規模なデータを並列分散処理する装置における、データ分析及び機械学習処理方法であって、
パラメータ検出手段が、前記Map手段または前記Reduce手段にジョブが与えられると、該ジョブのパラメータの値、利用位置、及び、利用元関数を含むパラメータ情報を検出し、前記分散ファイルシステムに格納するパラメータ検出ステップと、
ジョブ統合手段が、前記Map手段、前記Reduce手段に新たなジョブが与えられると、該ジョブのパラメータの値、利用位置、利用元関数を含む新パラメータ情報を検出し、該新パラメータ情報と前記分散ファイルシステムに格納されている前記パラメータ情報と比較し、パラメータに依存しない重複部分のジョブを統合するジョブ統合ステップと、
共有実行手段が、統合されたジョブを重複部分を共有しながら前記Map手段または前記Reduce手段を実行させる共有実行ステップと、
を行うことを特徴とするデータ分析及び機械学習処理方法。
【請求項６】
前記ジョブ統合ステップにおいて、
前記Map手段または前記Reduce手段に対して新たなジョブが追加されると、該Map手段、または、該Reduce手段の実行前に、該ジョブを遅延キューに蓄積する遅延キュー制御ステップと、
新たに追加されたジョブと既に前記遅延キューに格納されたジョブのパラメータを比較し、利用するMap手段名またはReduce手段名が同じものがある場合は、ジョブを統合し、所定のキュー保持時間が経過すると、通常のキューに統合されたジョブを移行させるステップと、
を行う請求項５記載のデータ分析及び機械学習処理方法。
【請求項７】
前記ジョブ統合ステップにおいて、
前記分散ファイルシステムに格納されている前記パラメータ情報と前記新パラメータ情報を比較して、前記パラメータに依存しない重複部分がある場合は、代表する１つのジョブに対してその他のジョブのパラメータとの差分を追加する
請求項５または６記載のデータ分析及び機械学習処理方法。
【請求項８】
前記共有実行ステップにおいて、
前記ジョブ統合手段で統合されたジョブの重複部分を共有しながら前記Map手段、または、前記Reduce手段を実行させ、パラメータに依存する処理部分に到達した時点で処理を分岐させる
請求項５記載のデータ分析及び機械学習処理方法。
【請求項９】
請求項１乃至４のいずれか１項に記載のデータ分析及び機械学習装置を構成する各手段としてコンピュータを機能させるためのデータ分析及び機械学習処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ分析及び機械学習処理装置及び方法及びプログラムに係り、特に、大規模なデータの分析処理のための機械学習処理の効率化を図るためのデータ分析及び機械学習処理装置及び方法及びプログラムに関する。
【背景技術】
【０００２】
大規模データの分析処理のための技術として"MapReduce"がある（例えば、非特許文献１参照）。
【０００３】
図２６は、マップリデュース（MapReduce）処理の流れを示す。MapReduceはネットワークによって相互に接続された複数のコンピュータを用いる。MapReduceは図２６に示すような流れで処理が行われる分散処理フレームワークである。
【０００４】
MapReduce処理が開始されると、まずは各コンピュータにおいて、ユーザが任意に定義したマッパー（Mapper）が起動され、予め分散ファイルシステム（HDFS）に格納されていた分散データを各々のコンピュータが読み込み、Map処理が行われる。
【０００５】
マップ（Map）処理では、各コンピュータが自らに割り当てられた分散データを先頭から順に１行に対して１回、ユーザが定義したMap関数が適用される。Map関数において、処理の結果として複数のKey-Value（キー/値）形式のレコードの集合を中間データとして出力する。なお、Key・Valueそれぞれの型は一定制約下でユーザが任意に定義するものとする。
【０００６】
次に、各コンピュータにおいて各ユーザが任意に定義したリデューサー（Reducer）が起動され、中間データのキー（Key）部が同じレコードが１台のコンピュータに集められるように、ネットワークを介して中間データを相互に移動させる。これをシャッフル（Shuffle）処理"と呼ぶ。
【０００７】
同じKeyを持つ中間データのレコードは最終的にソートされた状態で、値（Value）はイテレータとしてユーザが定義したリデュース（Reduce）関数に与えられる。Reduce関数において、処理の結果として複数のKey-Value形式のレコードの集合が出力される。
【０００８】
図２７にMapReduceを利用した一般的なアプリケーションの処理フローを示す。
【０００９】
ステップ１００）  初期設定ファイルを入力し、MapReduceを開始するためにジョブを生成する。
【００１０】
ステップ１１０）  生成されたジョブに対して利用するマッパー（Mapper）、リデューサー（Reducer）やReducerの数、その他のMapReduce処理そのものに必要な設定や、ユーザが定義するMapper、Reducer等の内部で利用するパラメータ、コマンドライン引数などの解析により実行時に変更可能なパラメータをMapReduceジョブに与える。
【００１１】
ステップ１２０）  MapReduce処理を行う。詳細は図２８で述べる。
【００１２】
ステップ１３０）  MapReduce処理によって出力された結果に対して何らかの処理（ユーザが定義した処理）を行う。
【００１３】
次に、図２７のステップ１２０のMapReduce処理について説明する。MapReduce処理は複数のノード（コンピュータ）をネットワークで相互に接続したクラスタ上で行う分散処理フレームワークである。
【００１４】
図２８は、一般的なMapReduce処理のフローを示す。
【００１５】
ステップ２００）  MapReduce処理が開始されると、まずは、各ノードにおいてユーザが任意に定義したMapperが起動され、予め分散ファイルシステムに格納されていた分散データを各々のノードが読み込み、Map処理が行われる。このとき、ユーが定義した任意のMap処理を行う。各ノードが自らに割り当てた分散データを先頭から順に１行に対して１回、ユーザが定義したMap関数が適用され、Key-Value形式の任意の中間データが出力される。
【００１６】
ステップ２１０）  ユーザがコンバイン（Combine：結合処理）に利用するクラスを明示的に指定している場合のみ、各ノードにおいてMap処理が終わり次第、次にコンバイナー（Combiner）が起動され、それぞれのMap処理によって出力された中間データを対象として、キーが共通である中間データを一つにまとめるCombine処理（ローカルでのReduce）が行われ、Key・Valueリストの形をとった任意の複数の中間データが出力される。
【００１７】
ステップ２２０）  各ノードにおいてユーザが任意に定義したReducerが起動され、中間データのキー部が同じレコードが１台のノードに集められるように、ネットワークを介して中間データを相互に移動させるシャッフル処理（Shuffle）が行われる。Shuffleの際、中間データはKey部を元にしてソートされ、１つのキーに対して複数のValueの形式のリストが出力される。
【００１８】
ステップ２３０）  Shuffleされた中間データそれぞれに対してReduce処理が行われる。
【００１９】
上記の技術は、同じデータを入力として、複数のMapReduce処理（Grep処理）を行うものであり、中間データのキーへのタグの付与、中間データの削減処理（ジョブの事前統合と複数ジョブの同時実行）を行う(例えば、非特許文献２参照)。
【先行技術文献】
【非特許文献】
【００２０】
【非特許文献１】MRShare: Sharing Across Multiple Queries in MapReduce [Tomasz Nykiel, Michalis Potamias, Chaitanya Mishra, George Kollios, Nick Koudas, VLDB2010,2010年9月]
【非特許文献２】MapReduce:Simpli_ed Data Processing on Large Clusters [Jeffrey Dean, Sanjay Ghemawat, OSDI2004] http://static.googleusercontent.com/external content/untrusted dlcp/labs.google.com/ja//papers/mapreduce-osdi04.pdf
【発明の概要】
【発明が解決しようとする課題】
【００２１】
機械学習処理は、事前に機械学習アルゴリズムに与える設定値次第で得られる処理結果の精度が大きく異なる場合があるため、設定値を調整しながら処理を複数回繰り返さなければ最良の結果を得ることができない。特に、MapReduceを利用して大規模なデータを対象とした処理を行う際に、例えば、機械学習ライブラリである"Mahout"では設定値の調整があまり考慮されないため、良い結果を得るために長時間に及ぶ処理を複数回行うことになり、非常に効率が悪い。
【００２２】
上記の非特許文献１の技術は、複数回の処理において、各処理のデータ読み込み部分の共有化により、中間データ削減によるShuffleコストは削減できるが、MapReduceを提供するHadoopそのものには手を加えないため、粒度の小さい（関数単位の）処理の共有化ができないという問題がある。
【００２３】
本発明は、上記の点に鑑みなされたもので、粒度の小さい処理の共有化ができないという問題を解決し、パラメータに依存しない重複部分を関数単位での共有化を可能とし、重複する処理を削減することが可能なデータ分析及び機械学習処理装置及び方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２４】
上記の課題を解決するために、本発明（請求項１）は、１つのキーと値の組をマッピングして中間データを生成するジョブを行うマップ（Map）手段と、該中間データを更に小さな値にセットするジョブを行うリデュース（Reduce）手段、及び、与えられた教師データを格納する分散ファイルシステムを有し、大規模なデータを並列分散処理するためのデータ分析及び機械学習処理装置であって、
前記Map手段または前記Reduce手段にジョブが与えられると、該ジョブのパラメータの値、利用位置、及び、利用元関数を含むパラメータ情報を検出し、前記分散ファイルシステムに格納するパラメータ検出手段と、
前記Map手段、前記Reduce手段に新たなジョブが与えられると、該ジョブのパラメータの値、利用位置、利用元関数を含む新パラメータ情報を検出し、該新パラメータ情報と前記分散ファイルシステムに格納されている前記パラメータ情報と比較し、パラメータに依存しない重複部分のジョブを統合するジョブ統合手段と、
前記Map手段または前記Reduce手段を、統合されたジョブを重複部分を共有しながら実行させる共有実行手段と、を有する。
【００２５】
また、本発明（請求項２）は、請求項１の前記ジョブ統合手段に、
前記Map手段または前記Reduce手段に対して新たなジョブが追加されると、該Map手段、または、該Reduce手段の実行前に、該ジョブを遅延キューに蓄積する遅延キュー制御手段と、
新たに追加されたジョブと既に前記遅延キューに格納されたジョブのパラメータを比較し、利用するMap手段名またはReduce手段名が同じものがある場合は、ジョブを統合し、所定のキュー保持時間が経過すると、通常のキューに統合されたジョブを移行させる手段と、を含む。
【００２６】
また、本発明（請求項３）は、請求項１または２の前記ジョブ統合手段に、
前記分散ファイルシステムに格納されている前記パラメータ情報と前記新パラメータ情報を比較して、前記パラメータに依存しない重複部分がある場合は、代表する１つのジョブに対してその他のジョブのパラメータとの差分を追加する手段を含む。
【００２７】
また、本発明（請求項４）は、請求項１の前記共有実行手段に、
前記ジョブ統合手段で統合されたジョブの重複部分を共有しながら前記Map手段、または、前記Reduce手段を実行させ、パラメータに依存する処理部分に到達した時点で処理を分岐させる手段を含む。
【００２８】
本発明（請求項５）は、１つのキーと値の組をマッピングして中間データを生成するジョブを行うマップ（Map）手段と、該中間データを更に小さな値にセットするジョブを行うリデュース（Reduce）手段、及び、与えられた教師データを格納する分散ファイルシステムを有し、大規模なデータを並列分散処理する装置における、データ分析及び機械学習処理方法であって、
パラメータ検出手段が、前記Map手段または前記Reduce手段にジョブが与えられると、該ジョブのパラメータの値、利用位置、及び、利用元関数を含むパラメータ情報を検出し、前記分散ファイルシステムに格納するパラメータ検出ステップと、
ジョブ統合手段が、前記Map手段、前記Reduce手段に新たなジョブが与えられると、該ジョブのパラメータの値、利用位置、利用元関数を含む新パラメータ情報を検出し、該新パラメータ情報と前記分散ファイルシステムに格納されている前記パラメータ情報と比較し、パラメータに依存しない重複部分のジョブを統合するジョブ統合ステップと、
共有実行手段が、統合されたジョブを重複部分を共有しながら前記Map手段または前記Reduce手段を実行させる共有実行ステップと、を行う。
【００２９】
また、本発明（請求項６）は、請求項５の前記ジョブ統合ステップにおいて、
前記Map手段または前記Reduce手段に対して新たなジョブが追加されると、該Map手段、または、該Reduce手段の実行前に、該ジョブを遅延キューに蓄積する遅延キュー制御ステップと、
新たに追加されたジョブと既に前記遅延キューに格納されたジョブのパラメータを比較し、利用するMap手段名またはReduce手段名が同じものがある場合は、ジョブを統合し、所定のキュー保持時間が経過すると、通常のキューに統合されたジョブを移行させるステップと、を行う。
【００３０】
また、本発明（請求項７）は、請求項５または６の前記ジョブ統合ステップにおいて、
前記分散ファイルシステムに格納されている前記パラメータ情報と前記新パラメータ情報を比較して、前記パラメータに依存しない重複部分がある場合は、代表する１つのジョブに対してその他のジョブのパラメータとの差分を追加する。
【００３１】
また、本発明（請求項８）は、請求項５の前記共有実行ステップにおいて、
前記ジョブ統合手段で統合されたジョブの重複部分を共有しながら前記Map手段、または、前記Reduce手段を実行させ、パラメータに依存する処理部分に到達した時点で処理を分岐させる。
【００３２】
本発明（請求項９）は、請求項１乃至４のいずれか１項に記載のデータ分析・機械学習装置を構成する各手段としてコンピュータを機能させるためのデータ分析及び機械学習処理プログラムである。
【発明の効果】
【００３３】
上記のように、従来、粒度の小さい処理の共有化ができないという問題に対し、本発明は、MapReduce処理中でのパラメータの利用順序、利用関数を検知し、次にその情報を利用して複数パターンのパラメータを持つ処理を同時に行う場合に、パラメータに依存しない重複部分を関数単位で統合することで、重複する処理を削減することが可能となり、MapReduce処理の高速化を図ることができる。つまり、本発明では、最低限２回のMapReduce処理が必要になるが、１回目では、ジョブの統合などは行わずに、パラメータ情報の検知のみを行い、２回目以降において、複数ジョブの統合(処理の共有化)を行うことで、処理量の削減を行うことができる。
【図面の簡単な説明】
【００３４】
【図１】本発明の第１の実施の形態におけるシステム構成図である。
【図２】本発明の第１の実施の形態における全体動作のフローチャートである。
【図３】本発明の第１の実施の形態におけるジョブの統合・共有化処理のフローチャートである。
【図４】本発明の第１の実施の形態におけるジョブの統合を説明するための図である。
【図５】本発明の第２の実施の形態におけるパラメータ情報を検知する処理のフローチャート（S300）である。
【図６】本発明の第２の実施の形態におけるパラメータ情報を検知する処理のフローチャート（S420）である。
【図７】本発明の第２の実施の形態におけるパラメータ検知のイメージである。
【図８】本発明の第３の実施の形態における遅延キュー追加時の処理のフローチャート(S620)である。
【図９】本発明の第３の実施の形態における統合処理のイメージである。
【図１０】本発明の第３の実施の形態における統合ジョブMapReduce処理のフローチャート（S630）である。
【図１１】本発明の第３の実施の形態における統合処理を説明するための図である。
【図１２】本発明の第３の実施の形態における統合処理の例である。
【図１３】本発明の一実施例のHadoopによるMapReduce処理開始時の各ノードの動きを示す図である。
【図１４】クライアントノードの一般的な処理のフローチャートである。
【図１５】本発明の一実施例のジョブ追加時の処理のフローチャート（S1150）である。
【図１６】本発明の一実施例の遅延キューにジョブを追加するときの処理のフローチャートである。
【図１７】本発明の一実施例の遅延キューのジョブ取り出しスレッドの処理のフローチャート（S1430）である。
【図１８】本発明の一実施例のJobTrackerノードのジョブスケジューラの処理のフローチャートである。
【図１９】本発明の一実施例のTaskTrackerのタスク取得ループ部分の処理のフローチャートである。
【図２０】本発明の一実施例のタスク開始時の処理のフローチャート（S1711,S1731）である。
【図２１】本発明の一実施例のパラメータ検知用Mapperの処理のフローチャート（S1820）である。
【図２２】本発明の一実施例の検知用Configurationクラスのパラメータ呼出時の処理のフローチャートである。
【図２３】本発明の一実施例の検知用Reducerの処理のフローチャート（S1820）である。
【図２４】本発明の一実施例の統合ジョブ用Mapperの処理のフローチャート（S1820）である。
【図２５】本発明の一実施例の統合ジョブ用Reducerの処理のフローチャート（S1820）である。
【図２６】MapReduce処理の流れを示す図である。
【図２７】MapReduceを利用した一般的な処理のフローチャートである。
【図２８】一般的なMapReduce処理のフローチャートである。
【発明を実施するための形態】
【００３５】
以下図面と共に、本発明の実施の形態を説明する。
【００３６】
［第１の実施の形態］
図１は、本発明の第1の実施の形態におけるシステム構成を示す。
【００３７】
本発明の構成は、図２６と同様に、ネットワークによって相互に接続された複数のコンピュータを用い、図２６と同様の流れを処理が行われる分散処理フレームワークを行うシステムである。
【００３８】
本実施の形態では、MapReduce処理において、制御部（Controller）５０が、集計用データ作成部（Mapper）２０、集計部（Reducer）４０に対して検知を指示すると、集計用データ作成部（Mapper）２０、集計部（Reducer）４０は、パラメータに関する情報を検知し、分散ファイルシステム１０に保存する。
【００３９】
Controller５０は、ジョブ開始時に、Mapper２０、Reducer４０に対してパラメータの情報の検知を指示する。また、遅延キューを利用することによるMapper２０、Reducer４０及び入力データが共通である複数のジョブの統合を行う。さらに、ジョブ開始時に、統合されたジョブパラメータ情報を利用して、Mapper２０、Reducer４０の処理のうち、どこまでを共有化できるかを判定する。判定した共有範囲をMapper２０、及びReducer４０に指示する。
【００４０】
Mapper２０、Reducer４０は、Controller５０から指示があると、パラメータ情報の検知を実行する。また、Controller５０からの共有化の指示に応じて、共有可能な範囲は１回、以降はパラメータに応じた処理に分岐するように、集計用データ作成（Mapping）、集計処理（Reducing)を実行する。
【００４１】
図２は、本発明の第１の実施の形態における全体動作のフローチャートである。
【００４２】
ステップ３００）  データが入力されると、Mapper２０、Reducer４０はMapReduce処理を行い、その処理の過程において、制御部(Controller)５０は、Mapper２０とReducer４０に、利用されるパラメータの値、当該パラメータの利用位置、利用元関数の検知を指示し、Mapper２０、Reducer４０は指示された検知処理を行い、分散ファイルシステム１０、または、ローカルに保存する。当該処理は、請求項１の「パラメータ検出手段」に対応する。
【００４３】
ステップ３１０）  MapReduce処理の過程において、Controller５０は、ジョブに与えられたパラメータと、ステップ３００で分散ファイルシステム１０に格納されているパラメータに関する情報と照合し、中間データをキャッシュとして保存すべきかを判断し、保存する場合には、Mapper２０、Reducer４０に共有範囲を通知し、中間データを分散ファイルシステム１０またはローカルに保存するよう指示する。これにより、Mapper２０、Reducer４０は、Controller５０からの指示に応じて中間データを保存する。中間データを保存する際には、通常の出力とは別に出力する。
【００４４】
次に、上記のステップ３１０の処理を詳細に説明する。
【００４５】
図３は、本発明の第１の実施の形態におけるジョブの統合・共有化による処理量を削減したMapReduceを利用する処理のフローチャートである。図４は、ジョブの統合方法を示しており、上段は従来の、下段は本発明のキューの利用方法を示している。
【００４６】
ステップ６００）  ステップ１００と同様に、MapReduceジョブを生成する。
【００４７】
ステップ６１０）  ステップ１１０と同様に、生成したジョブにパラメタータを設定する。
【００４８】
ステップ６２０）  パラメータが付与されたジョブを遅延キューに追加する。その際、図４に示すように、新しく追加するジョブとすでに遅延キュー内にある各ジョブとパラメータを比較し、入力データと利用するMapper名、Reduce名と同じものがあった場合はそのジョブに統合する。図４の例では、新しく追加する"ジョブ７"の入力データが、既に遅延キューに入っている"ジョブ６"または、"ジョブ４、５"と同じである場合は、遅延キューに統合する。当該処理は請求項１の「ジョブ統合手段」に相当する。遅延キューに追加してからユーザが指定した時間が経過したジョブは順次遅延キューから出力され、通常のキューに戻される。
【００４９】
ステップ６３０）  ステップ６２０で統合済みのジョブを、パラメータに依存しない重複する部分を共有化しながら処理を行う。これにより、統合前の複数のジョブを実行したときと同じ結果を得る。当該処理は請求項１の「共有実行手段」に相当する。
【００５０】
ステップ６４０）  ステップ１３０と同様に、MapReduce処理を行う。
【００５１】
ステップ６５０）  ステップ１４０と同様の処理を行う。
【００５２】
上記のように、本実施の形態によれば、MapReduce処理において、パラメータに関する情報を検出し、分散ファイルシステム１０に保存し、新たなMapReduceジョブが追加された場合に、すぐにMapReduce処理を開始せずに、遅延キューに蓄積し、入力データやMapper２０、Reducer４０は同じであるが、パラメータ値の異なる複数パターンのMapReduceジョブが同時に入力されたことを検知してジョブを統合することで、重複部分の処理を削減することができる。
【００５３】
［第２の実施の形態］
本実施の形態では、第１の実施の形態のステップ３００におけるパラメータ情報検出方法（パラメータ検出手段）について詳述する。
【００５４】
図５は、本発明の第２の実施の形態におけるパラメータ情報を検知するMapReduceを利用した処理のフローチャートである。
【００５５】
ステップ４００）  ステップ１００と同様に、MapReduceジョブを生成する。
【００５６】
ステップ４１０）  ステップ１１０と同様に、ジョブにパラメータを与える。
【００５７】
ステップ４２０）  各ノードに割り当てられた入力データに対し、図２７と同様のMapReduce処理を行うが、その過程で、Controller５０の指示により、Mapper２０やReducer４０は、利用するパラメータの値、利用位置、利用元関数を検知し、分散ファイルシステム１０に保存する。
【００５８】
ステップ４３０）  ステップ１３０と同様の処理を行う。
【００５９】
本発明では、最低限２回のMapReduce処理を必要とし、１回目では、ジョブの統合などは行わずに、パラメータ情報の検知のみを行う。２回目において、複数ジョブの統合(処理の共有化)を行うことで、処理量の削減を行っている。
【００６０】
上記のステップ４２０について詳細に説明する。
【００６１】
図６は、本発明の第１の実施の形態におけるパラメータ情報を検知するMapReduce処理のフローチャートであり、図７は、パラメータ検知のイメージを示す。
【００６２】
ステップ５００）  各ノードに割り当てられた入力データに対し、Mapper２０はユーザが定義した任意のMap処理を行う。各ノードが自らに割り当てられた分散データを先頭から順に１行に対して１回、ユーザが定義したMap関数が適用される。Controller５０は、その間Mapper２０においてパラメータが利用される際に、当該Mapper２０が利用したMapperクラス名、関数、パラメータ名、パラメータ値を抽出して分散ファイルシステム１０に保存し、重複範囲の特定に利用する。
【００６３】
ステップ５１０）  Combiner６０は、Map処理により生成されたKey-Valueの形式の中間データのうち、キーが共通のものを収集し（Key１つに対してリスト状のValue形式）、ユーザが定義した任意のCombine処理を行い、中間データ記憶部３０に格納する。また、パラメータが利用される際に、利用したCombineクラス名、関数、パラメータ名、パラメータ値を分散ファイルシステム１０に保存し、以降の重複範囲の特定に利用する。
【００６４】
ステップ５２０）  Shuffle部７０は、ステップ５１０で中間データ記憶部３０に出力された中間データのShuffle処理を行う。
【００６５】
ステップ５３０）  Reducer４０は、ステップ５２０の処理で得られたKey-Value形式の中間データに対して、ユーザが定義した任意のReduce処理を行う。その間、パラメータが利用される際に、利用したReduceクラス名、関数、パラメータ名、パラメータ値を分散ファイルシステム１０に格納する。
【００６６】
上記のように、本実施の形態では、MapReduce処理に使われるMapperクラス、Reducerクラスの名前、事前に与えるパラメータ名とパラメータ値等が、MapReduce処理中のどのような順序で、どの関数内で利用されるかを検出し、その情報を分散ファイルシステム１０に保存することで、以後の処理において利用できるようにする。
【００６７】
［第３の実施の形態］
本実施の形態では、複数処理を統合し（ジョブ統合手段）、重複処理を共有化する（共有実行手段）処理について説明する。
【００６８】
図８は、本発明の第３の実施の形態における遅延キュー追加時の処理のフローチャートである。
【００６９】
ステップ７００）  Controller５０は、分散ファイルシステム１０に格納されている既存のジョブの持つパラメータと新たに追加されたジョブのパラメータを比較して、入力データが同じであるかどうか、また、処理に利用するMapper２０とReducer４０が同じかどうかを判定し、同じジョブがあれば、統合可能なジョブとする。
【００７０】
ステップ７１０）  既存のジョブの持つパラメータと新たに追加されたジョブのパラメータを比較し、代表する一つのジョブに対して、その他のジョブのパラメータとの差分を追加することで、パラメータの合成を行い、遅延キューに追加する。
【００７１】
図９は、本発明の第３の実施の形態における統合処理のイメージを示す。
【００７２】
同図に示すように、「ジョブ１のConfiguration」と「ジョブ２のConfiguration」の内容(name:Value)を比較すると、"input.dir"、"map.class"、"reduce.class"、"param2"が同じである。これらを１つに合成し、「ジョブ１，２のConfiguration」に示すように、異なる"param1"のみを追記する。
【００７３】
統合されたジョブを統合前のものが相互に影響しないように、かつ、統合前のジョブ間で重複するパラメータに依存しない部分を共有化しながら実行する。そのために、Mapなどの関数別にどのジョブを共有するのかを示す共有グループを生成し、それに従って必要な数だけ統合前の元のMapperやReducerを生成し、それらに処理を実行させ、処理結果を共有する。
【００７４】
図１０は、本発明の第３の実施の形態における統合ジョブMapReduce処理のフローチャートである。当該処理は、図３のステップ６３０に対応する。
【００７５】
ステップ８００）  Controller５０は、遅延キューに蓄積されたジョブの中で、指定した遅延時間が経過している統合されたジョブを取得する（図４の下段の「保持時間切れによる取り出し」を参照）。その際、ジョブが持つパラメータを元に、予め第２の実施の形態において分散ファイルシステム１０に保存していた各パラメータがMapper２０、Reducer４０など、どの位置の関数で利用されるかの情報を参照することで、関数毎に処理の共有グループを生成してパラメータとして追加しておく。
【００７６】
詳しくは、図１１に示すように、
（１）まず、Mapperクラス名"Map.ClassA"、Reducerクラス名"Red.ClassB"、差分パラメータ"param1"をもとに分散ファイルシステム１０に蓄積した情報を参照する。
【００７７】
（２）  差分パラメータがMapReduce処理でどの位置で利用されるのかを判定する。図１１の例では、"pram1"はReduce処理で使われることがわかる。
【００７８】
（３）パラメータに依存しない、重複する処理のあるジョブをMap、Reduce単位でグルーピングする。図１１の例では、Map処理では、"１，２"がグルーピングされる。なお、このとき、それより以前の共有化グループも考慮するものとする。また、Reduce処理では、"１"、"２"となりグループ化されない。
【００７９】
（４）共有化グループの情報をConfigurationに追加する。
【００８０】
ステップ８１０）  Controller５０は、Map処理の共有グループの数だけ元のMapperを生成し、各Mapper２０に、ステップ２００と同様のMap処理を行わせる。
【００８１】
ステップ８２０）  Controller５０は、ステップ８１０と同様に、必要数のCombiner６０を生成し、各Combiner６０にステップ２１０と同様の処理を行わせる。
【００８２】
ステップ８３０）  Controller５０は、ステップ８１０と同様に、必要数のReducer４０を生成し、各Reducer４０にステップ２３０と同様の処理を行わせる。
【００８３】
図１２は、本発明の第３の実施の形態における統合処理の例である。同図に示すように、３パターンのジョブ"１"、"２"、"３"を統合する場合に、Mapperの共有化グループは"２，３"であり、Reducerの共有化グループがない場合に、Mapperでは、共有化グループ"２，３"のジョブとジョブ"１"をパラレルに実行し、中間データを出力する際にタグを付与する。Reducerは共有化グループがないので、ジョブ"２"、ジョブ"３"を順に行い、それぞれ処理結果を出力する。
【００８４】
このように、本実施の形態では、MapReduceのジョブが新しく追加されたときに、すぐに処理を開始しないよう、遅延評価キューを利用し、キューに入力データやMapperクラス、Reduceクラスが同じでも、複数のパターンの異なるパラメータを持つジョブが与えられたとき、各ジョブの持つパラメータ値を比較し、代表する一つのジョブに対して、その他のジョブのパラメータとの差分を追加し、統合する。そして、第２の実施の形態で分散ファイルシステム１０に格納された情報を利用して、パラメータに依存しない重複する関数を抽出し、統合されたジョブを重複部分を共有しながら実行し、パラメータ依存となった時点で処理を分岐させることによって重複部分の処理量を削減する。
【実施例】
【００８５】
以下、本発明をオープンソース分散システムの「Hadoop」に適用した例を示す。
【００８６】
以下では、Hadoopにおいて、「パラメータ」は具体的にはConfigurationクラスを指す。Configurationクラスは、Hadoopによる一連のMapReduce処理の流れの中で、Hadoopそのもののパラメータ、ユーザが定義したMapper、Reducerを指定するパラメータ、MapperやReducer等で利用される変数等のパラメータなど、あらゆるパラメータを区別なく格納、管理するためのクラスであり、MapReduceに関わる様々なクラスがConfigurationクラスを継承あるいはConfigurationクラスを保持する形で利用する。パラメータは、「名前：値」の形でConfigurationクラスに格納され、必要とする型に応じたメソッドにパラメータの名前を与えると、その型の値が応答される。HDFSやローカルファイルに出力するために、XML形式に変換するメソッドを持つ。
【００８７】
「ジョブ（jobまたはJobConf）」は、Hadoopにおいて、具体的にはJobクラス、もしくは、JobConfクラスを指す。HadoopによるMapReduce処理を開始する際、ジョブを生成し、ジョブが提供する各種メソッドを用いて処理に利用するMapperクラスやReduceクラスなどを与え、開始メソッドによってMapReduce処理を開始することができる。Configurationクラスを内包し、与えられたパラメータは基本的に全てConfigurationに格納する。
【００８８】
なお、後述する「JobTracker」は前述の実施の形態における「制御部（Controller）５０」に対応する。
【００８９】
図１３は、HadoopによるMapReduce処理開始時の各ノードの動作を示す。
【００９０】
同図に示すシステムは、JobClient１００２、MapReduceアプリケーション１００１を有するクライアントノード１０００、JobTracker１０１１を有するJobTrackerノード１０１０、TaskTracker１０２１、Map or Reduceタスク１０２２を有するTrack Trackerノード１０２０から構成される。
【００９１】
まず、一般的なクライアントノード１０００の動作を説明する。
【００９２】
図１４は、クライアントノードの一般的な処理のフローチャートである。
【００９３】
ステップ１１００）  Hadoopに含まれるJobクラスのインスタンスの生成時に、XML形式の初期パラメータが読み込まれ、Configurationクラスとしてジョブに与えられる。
【００９４】
ステップ１１１０）  Mappker・Reducer・Key・ValueクラスなどのHadoopが必要とするパラメータや、処理の途中に利用する変数の初期値などのパラメータをジョブに与える（ジョブが保持するConfigurationにパラメータを与える）。
【００９５】
ステップ１１２０）  入力データの場所や実行時にユーザが変更可能なパラメータをコマンドライン引数の解析などによって取得し、ジョブに与える（ジョブが保持するConfigurationにパラメータを与える）。
【００９６】
ステップ１１３０）  クライアントノード１０００は、JobClient１００２を利用してJobTracker１１０１が動作しているサーバから新規のジョブIDを取得し、ジョブに与える。
【００９７】
ステップ１１４０）  ステップ１１３０で取得したジョブIDを元にした分散ファイルシステム１０３０上の所定の場所（パス）に、ステップ１１００，１１１０、１１２０によって生成され、設定値が付与されたジョブをXMLとして出力する（また、入力データを示すファイルも所定の場所に出力する）。
【００９８】
ステップ１１５０）  クライアントノード１０００は、JobClient１００２を利用して新しいジョブの追加をJobTracker１０１１に通知する。
【００９９】
ステップ１１６０）  JobTracker１０１１において追加されたジョブが実行中ジョブとなり、キューに蓄積される。適宜キューを元にMapReduce処理が実行され、処理のログを標準出力に表示しながら終了まで待機する。
【０１００】
ステップ１１７０）  MapReduce処理の結果を取得し、ユーザが定義した任意の処理を行う。
【０１０１】
上記のステップ１１５０のジョブ追加時の一般的な処理としては、ジョブIDに基づいてジョブの初期化を行い、実行ジョブ（JobInProgress）を生成し、実行ジョブをキューに格納していた。
【０１０２】
これに対し、本発明は、以下のような処理を行う。
【０１０３】
図１５は、本発明の一実施例のジョブ追加時の処理のフローチャート（S1150）である。  ステップ１３００）  ジョブIDを元にしてジョブの初期化を行い、実行ジョブ（JobInProgress）を生成する。
【０１０４】
ステップ１３１０）  ジョブが保持するConfigurationを参照し、パラメータ検知設定が有効か判断する。有効である場合はステップ１３２０に、無効である場合はステップ１３３０に移行する。
【０１０５】
ステップ１３２０）  設定済みのMapper、Reducerは別の設定名として退避し、パラメータ検知用のMapper、Reducerを入れ替える。また、入れ替え済みのConfigurationの内容を分散ファイルシステム１０３０上に保存されているXMLにも反映する。
【０１０６】
ステップ１３３０）ユーザによる明示的なキャッシュ有効指定がある場合は、ステップ１３３１に移行し、また、Mapper・Reducerクラス名、入力データ名、パラメータ名を用いて分散ファイルシステム１０３０上に蓄積されたパラメータの利用クラス、関数の情報を検索し、Mapperがパラメータに依存しない場合や、依存していても同じパラメータ値をユーザが指定する回数以上利用している場合には、ステップ１３３１に移行する。それ以外はステップ１３４０に移行する。
【０１０７】
ステップ１３３１）  実行ジョブを通常のキューではなく、遅延キューに追加し、処理を終了する。
【０１０８】
ステップ１３４０）  実行ジョブを通常のキューに追加する。
【０１０９】
次に、上記のステップ１３３１の遅延キューに実行ジョブを追加する処理を説明する。
【０１１０】
図１６は、本発明の一実施例の遅延キューにジョブを追加するときの処理のフローチャートである。
【０１１１】
ステップ１４００）  TaskTrackerノード１０２０は、JobTracker１１０１から追加された実行中ジョブを取得し、そのジョブが保持している設定を取り出す。
【０１１２】
ステップ１４１０）  追加されたジョブの設定（SX00の出力）を参照し、遅延キュー内にある全てのジョブの設定と比較して、入力データ、Mapperクラス、Combinerクラス、Reducerクラスが共通であるジョブがあるかどうか判定し、統合可能であれば、そのジョブをキューから一旦除去する。
【０１１３】
ステップ１４２０）  ステップ１４００とステップ１４１０の出力の設定値を比較し、値の違うものがある場合は、SX10の出力に対して差分としてその値を付加する。
【０１１４】
ステップ１４３０）  ジョブにユーザが指定した待機時間を付与し、遅延キューに追加する。
【０１１５】
上記のステップ１４３０により遅延キューに追加された遅延キューのジョブの取り出し方法について説明する。
【０１１６】
図１７は、本発明の一実施例の遅延キューのジョブ取り出しスレッドの処理のフローチャートである。
【０１１７】
ステップ１５００）  JobTrackerノード１０１０のジョブスケジューラを利用して、遅延キューの中に待機時間がすでに経過しているジョブがあるかどうか判定し、ある場合はそのジョブを取り出す。
【０１１８】
ステップ１５１０）  設定済みのMapper、Reducerは別の設定名として退避し、パラメータ検知用のMapper、Reducerに入れ替える。
【０１１９】
ステップ１５２０）  分散ファイルシステム１０３０上に保存されているパラメータの利用されるクラス、順序、関数の情報を、ステップ１５１０の出力が保持しているConfigurationの内容（クラス名）を利用して参照し、統合可能な関数とジョブ番号をConfigurationに与える。
【０１２０】
ステップ１５３０）  ステップ１５２０の出力を通常のキューに追加する。
【０１２１】
ステップ１５４０）  ユーザが指定した時間だけスレッドを待機させた後、遅延キュースレッドの終了フラグが有効か否かを判定する。有効である場合は処理を終了する。
【０１２２】
次に、JobTrackerノード１０１０内のジョブスケジューラの処理について説明する。
【０１２３】
図１８は、本発明の一実施例のJobTrackerのジョブスケジューラの処理のフローチャートである。
【０１２４】
ステップ１６００）  ジョブスケジューラは、キューの中に実行ジョブがあるかどうかを判定する。
【０１２５】
ステップ１６１０）  キューから実行ジョブを取得する。
【０１２６】
ステップ１６２０）  実行ジョブを元にして分散ファイルシステム１０３０の適切な場所からジョブのリソースを取得し、必要な数のMapタスク、Reduceタスクを生成する。
【０１２７】
ステップ１６３０）  終了判定を行い、終了フラグがない場合はステップ１６００に移行し、終了フラグがある場合は当該処理を終了する。
【０１２８】
次に、TaskTrackerノード１０２０のTaskTracker１０２１の処理を説明する。
【０１２９】
図１９は、本発明の一実施例のTaskTrackerのタスク取得ループ部分の処理のフローチャートである。
【０１３０】
ステップ１７００）  TaskTracker１０２１は、JobTracker１０１１に対して、自らの生存を確認させるためにハートビート（HeatBeat）を送出し、JobTracker１０１１からそれに対する応答を受け取る。
【０１３１】
ステップ１７１０）  TaskTracker１０２１は、ハートビートに対する応答にタスクが含まれているかを判定する。含まれている場合はステップ１７２０に移行し、含まれていない場合はステップ１７００に移行する。
【０１３２】
ステップ１７２０）  タスクがMapタスクであるかを判定し、Mapタスクである場合はステップ１７１１に移行し、それ以外である場合はステップ１７３０に移行する。
【０１３３】
ステップ１７１１）  Mapタスク１０２２において与えられたMapタスクを実行し、ステップ１７００に移行する。
【０１３４】
ステップ１７３０）  タスクはReduceタスクであるかを判定し、Reduceタスクである場合は、ステップ１７３１に移行する。それ以外の場合は、ステップ１７４０に移行する。
【０１３５】
ステップ１７３１）  Reduceタスク１０２２でReduceタスクを実行する。
【０１３６】
ステップ１７４０）  終了フラグの有無を調べ、終了フラグが立っていれば処理を終了し、立っていなければステップ１７００に移行する。
【０１３７】
次に、上記のステップ１７１１、１７３１のMapタスク、Reduceタスクの開示時の処理を説明する。
【０１３８】
図２０は、本発明の一実施例のタスク開始時の処理のフローチャートである。
【０１３９】
ステップ１８００）  Map or Reduceタスク１０２２は、パラメータ(Configuration)
、ジョブの進捗状況（Status）、入出力などを含むContextクラスをタスクに応じて生成する。
【０１４０】
ステップ１８１０）  MapperクラスまたはReducerクラスに応じたクラスを生成する。
【０１４１】
ステップ１８２０）  生成したContextクラスをMapperクラスまたはReduceクラスに与え、実行する。
【０１４２】
上記のステップ１８２０におけるMapperの処理を説明する。
【０１４３】
通常、Mapperでは、事前処理（Setup）、Map処理、終了処理（Cleanup）に関しては、ユーザがMapperクラスを継承したクラスを自由にプログラミングすることになる。Setup、Map、Cleanupの各関数内でパラメータを利用する場合は、全てContextクラスが保持しているConfigurationクラスにアクセスして取得する。これに対して、本発明は、図２０のステップ１８２０について、以下のような処理を行う。
【０１４４】
図２１は、本発明の一実施例のパラメータ検知用Mapperの処理のフローチャートである。
【０１４５】
ステップ２１００）  Mapタスク１０２２は、Contextクラスが保持するConfigurationクラスを取り出し、それをパラメータが利用されたクラス、関数、順序を検知するためのConfigurationに入れ替える。
【０１４６】
ステップ２１１０）  Mapperクラスの名前をConfigurationから取得し、通常のMapperクラスを生成する。
【０１４７】
ステップ２１２０）  ユーザの定義した任意の事前処理のみを行う（検知が容易な関数名）。ここで、Mapperの中の関数名をそれぞれMapper内、Reducer内のものであることが明示的にわかるような関数名（検知が容易な関数名）にしておくものとする。
【０１４８】
ステップ２１３０）  入力の次の１行に対してユーザの定義した任意のMap処理のみを行う（検知が容易な関数名）。
【０１４９】
ステップ２１４０）  図１９のステップ１７１０で読み込んだ行がデータの最終行であるかを判定し、最終行である場合はステップ２１５０に移行し、最終行でない場合はステップ２１３０に移行する。
【０１５０】
ステップ２１５０）  ユーザの定義した任意の終了処理のみを行う（検知が容易な関数名）。
【０１５１】
次に、ステップ１８００で生成された検知用コンテキストに対してパラメータを要求する場合の処理を説明する。
【０１５２】
図２２は、本発明の一実施例の検知用Configurationクラスのパラメータ呼び出し時の処理のフローチャートである。
【０１５３】
ステップ２２００）  TaskTracker１０２１からの指示により、Java（登録商標）の機能であるStackTraceを用いて当該関数を呼び出した関数を辿り、呼び出し元のMapperクラス名と関数名を検知する。
【０１５４】
ステップ２２１０）  分散ファイルシステム１０３０上にステップ２２００の出力を、呼び出し元クラス名、順序（数値）、関数名、パラメータ名をディレクトリ名、値をファイル名、頻度を内容としてファイルを生成し、分散ファイルシステム１０３０に出力する。
【０１５５】
ステップ２２２０）  保持しているプロパティクラスから、パラメータ名をキーとして取得し、呼び出されたメソッドに応じて適切な型に変換する。
【０１５６】
次に、図２０のステップ１８２０の検出用Reducer処理について説明する。
【０１５７】
図２３は、本発明の一実施例の検知用Reducerの処理のフローチャートである。
【０１５８】
ステップ２４００）  Reduceタスク１０２２は、TaskTracker１０２１からReducerタスクで利用するconfigurationを検知用のものに入れ替える指示があると、Contextクラスが保持するConfigurationクラスを取り出し、それをパラメータが利用されたクラス、関数、順序を検知するためのConfigurationに入れ替える。
【０１５９】
ステップ２４１０）  Reducerクラスの名前をConfigurationから取得し、通常のReduceクラスを生成する。
【０１６０】
ステップ２４２０）  ユーザが定義した任意の事前処理のみを行う。ここで、Reducerの中の関数名をReducer内のものであることが明示的にわかるような関数名（検知が容易な関数名）にしておくものとする。
【０１６１】
ステップ２４３０）  割り当てられた中間データ（Key、Value）に対してReduce処理を行う（検知が容易な関数名）。
【０１６２】
ステップ２４４０）  ユーザの定義した任意の終了処理のみを行う（検知が容易な関数名）。
【０１６３】
次に、図２０のステップ１８２０において、Map or Reduceタスク１０２２が統合ジョブを行うMapperの処理を説明する。
【０１６４】
図２４は、本発明の一実施例の統合ジョブ処理を行うMapperの処理のフローチャートである。
【０１６５】
ステップ２５００）  TaskTrackerノード１０２０のTaskTracker１０２１において、Contextクラスが持つConfigurationクラスを参照し、そこに格納されている共有化可能な関数の情報により、事前処理、Map処理、終了処理の各段階での共有化グループを表すリストを生成し、Mapperタスク１０２２に出力する。
【０１６６】
ステップ２５１０）  Mapperタスク１０２２は、ステップ２５００の出力より共有化グループの数だけ本来のMapperを生成する。
【０１６７】
ステップ２５２０）  本来のMapperそれぞれに事前処理を行わせる。
【０１６８】
ステップ２５３０）  ステップ２５１０の出力に対して、入力の次の１行に対してユーザの定義した任意のMap処理のみを行わせる。
【０１６９】
ステップ２５４０）  ステップ２５３０で読み込んだ行がデータの最終行であるかどうかを判定し、最終行である場合はステップ２５５０に移行し、最終行でない場合はステップ２５３０に移行する。
【０１７０】
ステップ２５５０）  ユーザの定義した任意の終了処理のみを行わせる。
【０１７１】
次に、図２０のステップ１８２０において、Map or Reduceタスク１０２２の統合ジョブを説明する。
【０１７２】
図２５は、発明の一実施例の統合ジョブ処理を行うReducerの処理のフローチャートである。
【０１７３】
ステップ２６００）  TaskTrackerノード１０２０のTaskTracker１０２１は、Contextクラスが持つConfigurationクラスを参照し、そこに格納されている共有化可能な関数の情報により、事前処理、Reduce処理、終了処理の各段階での共有化グループを表すリストを生成し、Reducerタスク１０２２に出力する。
【０１７４】
ステップ２６１０）  ステップ２６００の出力より共有化グループの数だけ本来のReducerを生成する。
【０１７５】
ステップ２６２０）  本来のReducerそれぞれに事前処理を行わせる。
【０１７６】
ステップ２６３０）  ステップ２６１０の出力に対して、入力の次の１行に対してユーザの定義した任意のReduce処理のみを行わせる。
【０１７７】
ステップ２６４０）  ステップ２６３０で読み込んだ行がデータの最終行であるかどうかを判定し、最終行である場合はステップ２５５０に移行し、最終行でない場合はステップ２５３０に移行する。
【０１７８】
ステップ２６５０）  ユーザの定義した任意の終了処理のみを行わせる。 
なお、上記の図１に示す構成要素の動作をプログラムとして構築し、データ分析・機械学習装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【０１７９】
また、本発明は、上記の実施の形態及び実施例に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【０１８０】
１０  分散ファイルシステム（HDFS）
２０  集計用データ作成部（Mapper）
３０  中間データ記憶部
４０  集計部（Reducer）
５０  制御部（Controller）
６０  結合部（Combiner）
７０  シャッフル(Shuffle)部
１０００  クライアントノード
１００１  MapReduceアプリケーション
１００２  ジョブクライアント（JobClient）
１０１０  ジョブトラッカ（JobTracker）ノード
１０１１  ジョブトラッカ（JobTracker）
１０２０  タスクとラッカ（TaskTracker）ノード
１０２１  タスクトラッカ（TaskTracker）
１０２２  MapまたはReduceタスク
１０３０  分散ファイルシステム(HDFS)
【図１】
0005478526.tif 000002
【図２】
0005478526.tif 000003
【図３】
0005478526.tif 000004
【図４】
0005478526.tif 000005
【図５】
0005478526.tif 000006
【図６】
0005478526.tif 000007
【図７】
0005478526.tif 000008
【図８】
0005478526.tif 000009
【図９】
0005478526.tif 000010
【図１０】
0005478526.tif 000011
【図１１】
0005478526.tif 000012
【図１２】
0005478526.tif 000013
【図１３】
0005478526.tif 000014
【図１４】
0005478526.tif 000015
【図１５】
0005478526.tif 000016
【図１６】
0005478526.tif 000017
【図１７】
0005478526.tif 000018
【図１８】
0005478526.tif 000019
【図１９】
0005478526.tif 000020
【図２０】
0005478526.tif 000021
【図２１】
0005478526.tif 000022
【図２２】
0005478526.tif 000023
【図２３】
0005478526.tif 000024
【図２４】
0005478526.tif 000025
【図２５】
0005478526.tif 000026
【図２６】
0005478526.tif 000027
【図２７】
0005478526.tif 000028
【図２８】
0005478526.tif 000029