(57)【特許請求の範囲】
【請求項１】
分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、条件分岐にてタスクの投機的実行を行う計算ノードを割り当てる投機的実行装置であって、
前記タスクの処理内容が条件分岐である場合に、該タスクの入力となるデータを保持し、かつタスクを実行していない計算ノードを、計算ノード記憶手段から抽出するノード情報取得手段と、
前記ノード情報取得手段で抽出された計算ノードリストの計算ノードが保持している入力データサイズを求めるデータサイズ計算手段と、
２つの分岐先両方に対して、前記入力データサイズに基づいて、空いている計算ノードに投機的に実行するタスクを割り当てるタスク割当手段と、
有することを特徴とする投機的実行装置。
【請求項２】
前記タスク割当手段は、
前記計算ノードのリストの計算ノードのうち、サイズの大きい入力データの上位ｋ個を保持している計算ノードについて投機的にタスクを割り当てる第１のタスク割当手段と、
前記計算ノードのリストの残った計算ノードに対するタスク割り当てを行う第２のタスク割当手段と、
を含む請求項１記載の投機的実行装置。
【請求項３】
前記第２のタスク割当手段は、
分岐先の入力データを両方保持している計算ノードには、入力データの大きい方のタスクを割り当て、
分岐先の入力データを片方保持している計算ノードには、入力データを保持しているタスクを割り当て、
分岐先の入力データを保持してない計算ノードには、２つの分岐先のタスク割当比率のうち数が少ないタスクを割り当てる手段を含む
請求項２記載の投機的実行装置。
【請求項４】
前記第２のタスク割当手段は、
前記分岐先の入力データを保持していない計算ノードにタスクを割り当てる際に、タスク間のリソース利用比率が等分になるように、少ない方を優先的に割り当てる手段をふくむ
請求項３記載の投機的実行装置。
【請求項５】
分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、資源管理ノードが条件分岐にてタスクの投機的実行を行う計算ノードを割り当てる投機的実行ノード割当方法であって、
前記資源管理ノードにおいて、
ノード情報取得手段が、前記タスクの処理内容が条件分岐である場合に、該タスクの入力となるデータを保持し、かつタスクを実行していない計算ノードを、計算ノード記憶手段から抽出するノード情報取得ステップと、
データサイズ計算手段が、前記ノード情報取得ステップで抽出された計算ノードリストの計算ノードが保持している入力データサイズを求めるデータサイズ計算ステップと、
タスク割当手段が、２つの分岐先両方に対して、前記入力データサイズに基づいて、空いている計算ノードに投機的に実行するタスクを割り当てる割当ステップと、
を行うことを特徴とする投機的実行方法。
【請求項６】
前記割当ステップにおいて、
前記計算ノードのリストの計算ノードのうち、サイズの大きい入力データの上位ｋ個を保持している計算ノードについて投機的にタスクを割り当てる第１のタスク割当ステップと、
前記計算ノードのリストの残った計算ノードに対するタスク割り当てを行う第２のタスク割当ステップと、
を含む請求項５記載の投機的実行方法。
【請求項７】
前記第２のタスク割当ステップにおいて、
分岐先の入力データを両方保持している計算ノードには、入力データの大きい方のタスクを割り当て、
分岐先の入力データを片方保持している計算ノードには、入力データを保持しているタスクを割り当て、
分岐先の入力データを保持してない計算ノードには、２つの分岐先のタスク割当比率のうち数が少ないタスクを割り当てる
請求項６記載の投機的実行方法。
【請求項８】
前記第２のタスク割当ステップにおいて、
前記分岐先の入力データを保持していない計算ノードにタスクを割り当てる際に、タスク間のリソース利用比率が等分になるように、少ない方を優先的に割り当てる
請求項７記載の投機的実行方法。
【請求項９】
コンピュータを、
請求項１乃至４記載のいずれか１項に記載の投機的実行装置の各手段として機能させるための投機的実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、投機的実行装置及び方法及びプログラムに係り、特に、分散並列実行環境において条件分岐の評価中に余っている計算ノードを利用して分岐先の処理を実行する投機的実行装置及び方法及びプログラムに関する。
【背景技術】
【０００２】
分散処理フレームワークにおいて、PCクラスタ上にファイルを分割して保存する分散記憶装置を前提としたデータ解析基盤ソフトウェアがある。これは、図１に示すように、有向グラフの形式で動作フローを記述することで、互いに依存関係のない入力データに対して並列計算を行うプログラムを実行基盤とするものである。図１において、辺がデータの流れであり、頂点が行う処理内容を意味する。頂点上で実行される処理をタスクという。実行時は、分散ファイルシステムにアクセスし、入力ファイルを処理単位に分割する初期化処理を行い、分割したファイルが保存されているデータノードに近い計算ノードに、処理内容が記述されたプログラムを配置し、計算が完了したら結果を分散ファイルシステムに書き込むものである。
【０００３】
このような環境において、評価結果が真か偽かで処理内容が分岐する条件分岐の評価中に、余っている計算ノードを利用して分岐先の処理を実行する投機的実行を行う方法として、MapReduceを拡張し、ループ処理に特化させたシステムがある（例えば、非特許文献１、２参照）、非循環有向グラフ処理で記述されたプログラムを分散並列処理するシステム（例えば、特許文献1参照 ）や、Map処理、Reduceで記述されたプログラムを分散並列処理するシステム（特許文献２参照）がある。
【０００４】
以下に従来の技術における投機的実行の処理を説明する。
【０００５】
図２は、従来の投機的実行の方法のフローチャートである。
【０００６】
どの計算ノードにどのタスクを割り当てるかを管理する計算機である資源管理ノードが、タスクを実行していない計算ノードに対し、タスクを割り当てる（ステップ２１０）。タスクの処理内容が条件分岐であるかを判定する。条件分岐でない場合はタスクを実行し（ステップ２２０）、条件分岐である場合は条件式を真偽を評価し（ステップ２３０）、評価結果の真偽の値により分岐先を一つ選択し、投機的実行を行う（ステップ２４０）。ジョブが終了するまで上記の処理を繰り返す。
【０００７】
上記のステップ２４０の投機的実行の処理について図３に沿って詳細に説明する。
【０００８】
上記の特許文献２の技術を用いて、投機的実行のスケジューリング時に、投機的に実行するタスクの入力となるデータを保持している場合に、タスクを実行していない計算ノードを検索し、分岐先を一つ選択する（ステップ２４１）。選択した分岐先に存在する処理に全ての計算ノードを割り当てて実行する（ステップ２４２）。条件分岐の処理が終了し次第、条件が成立しなかった投機的実行に関するタスクを全て終了する（ステップ２４３）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】USPTO Applicaton #20080082644, Distributed Parallel Computing（Dryad)，  Microsoft Corporation，September 29, 2006.
【特許文献２】United States Patent 7,650,331, System and method for efficient large-scale data processing (Map Reduce) Google, January 19, 2010.
【非特許文献】
【００１０】
【非特許文献１】HaLoop: Efficient Iterative Data Processing on Large Clusters, Yingyi Bu, Bill Howe, Magdalena Balazinska, Michael D. Ernst. In VLDB'10: The 36the International Conference on Very Large Data Bases, Singapore, 24-30, September, 2010.
【非特許文献２】Twister: A Runtime for Iterative MapReduce Jaliya Ekanayake, Hui Li, Bingjing Zhang, Thilina Gunarathne, Seung-Hee Bae, Judy Qiu, Geoffrey Fox, Twister: A Runtime for Iterative MapReduce. The first International Workshop on MapReduce and its Applications (MAPREDUCE'10) - HPDC2010.
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上記の従来技術における特許文献１，２、非特許文献１，２のシステムの有効な投機的実行処理を組み合わせてシステムを構築したとしても、以下のような問題がある。
【００１２】
１．投機的実行を行う際に、２つの分岐先に存在する処理のうち１つを選択し、その処理に全ての計算ノードを割り当てることのみが可能である。このため、分岐予測に失敗した場合、全ての計算結果が無駄になる。
【００１３】
２．投機的に実行しているタスク間におけるリソースの競合が起きてしまい、結果データの転送が大量に発生する場合がある。
【００１４】
本発明は、上記の点に鑑みなされたもので、条件分岐にて行うタスクの投機的実行において、２つの分岐先に対して、入力データサイズが偏っていない場合は計算ノードの分配を等しく行うことができ、投機的実行時に発生するデータの転送量を抑えることが可能な分散処理フレームワークにおける投機的実行ノード割当装置及び方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記の課題を解決するため、本発明（請求項１）は、分散並列実行フレームワークにおいて実行するプログラムのフローが循環有向グラフとして表現されている場合に、条件分岐にてタスクの投機的実行を行う計算ノードを割り当てる投機的実行装置であって、
前記タスクの処理内容が条件分岐である場合に、該タスクの入力となるデータを保持し、かつタスクを実行していない計算ノードを、資源管理ノードに問い合わせて計算ノードリストを取得するノード情報取得手段と、
前記計算ノードリストの計算ノードが保持している入力データサイズを求めるデータサイズ計算手段と、
２つの分岐先両方に対して、前記入力データサイズに基づいて、空いている計算ノードに投機的に実行するタスクを割り当てる割当手段と、有することを特徴とする。
【００１６】
また、本発明（請求項２）は、前記割当手段に、
前記計算ノードのリストの計算ノードのうち、サイズの大きい入力データの上位ｋ個を保持している計算ノードについて投機的にタスクを割り当てる第１のタスク割当手段と、
前記計算ノードのリストの残った計算ノードに対するタスク割り当てを行う第２のタスク割当手段と、を含む。
【００１７】
また、本発明（請求項３）は、前記第２のタスク割当手段に、
分岐先の入力データを両方保持している計算ノードには、入力データの大きい方のタスクを割り当て、
分岐先の入力データを片方保持している計算ノードには、入力データを保持しているタスクを割り当て、
分岐先の入力データを保持してない計算ノードには、２つの分岐先のタスク割当比率のうち数が少ないタスクを割り当てる手段を含む。
【００１８】
また、本発明（請求項４）は、前記第２のタスク割当手段に、
前記分岐先の入力データを保持していない計算ノードにタスクを割り当てる際に、タスク間のリソース利用比率が等分になるように、少ない方を優先的に割り当てる手段を含む。
【発明の効果】
【００１９】
上記のように、本発明によれば、想定している分散並列実行フレームワークにおいて、実行するプログラムのフローが循環有向グラフとして表現されているとき、条件分岐にて行うタスクの投機的実行において、
（１）２つの分岐先に対して、入力データサイズが偏っていない場合は計算ノードの分配を等しく行うことができる。
【００２０】
（２）投機的実行時に発生する、データの転送量（バイト数）を抑えることができる。
【図面の簡単な説明】
【００２１】
【図１】有向グラフ形式の動作フローである。
【図２】従来技術の概略フローチャートである。
【図３】図２のＳ２４０の詳細なフローチャートである。
【図４】本発明の一実施の形態における投機的実行装置の構成図である。
【図５】本発明の一実施の形態における投機的実行装置の概要動作のフローチャートである。
【図６】本発明の一実施の形態における図５のＳ３４０の詳細なフローチャートである。
【図７】本発明の一実施の形態における図６のＳ５１０の詳細なフローチャートである。
【図８】本発明の一実施の形態における図７のＳ６３０のフローチャートである。
【図９】本発明の一実施の形態における図７のＳ６４０のフローチャートである。
【発明を実施するための形態】
【００２２】
以下図面と共に、本発明の実施の形態を説明する。
【００２３】
本発明の資源管理ノードが、計算機ノードが有する入力データの局所性（保存場所）、サイズを考慮し、投機的実行するタスク同士のリソース調停を行いながらスケジューリングするものである。
【００２４】
図４は、本発明の一実施の形態におけるシステム構成を示す。
【００２５】
同図に示すシステムは、資源管理ノード１０と複数の物理計算機２０から構成される。物理計算機２０は、各々計算ノード２１を有する。
【００２６】
資源管理ノード１０は、タスク割当部１１、計算ノードリスト取得部１２、サイズ計算部１３、計算ノードＤＢ１４から構成される。計算ノードＤＢ１４は、計算ノード毎の識別情報と対応させて、保持している入力データの識別情報、サイズ等を格納する。
【００２７】
計算ノード２１は、資源管理ノードから割り当てられたタスクを実行するタスク実行部２１１を有する。
【００２８】
図５は、本発明の一実施の形態における投機的実行装置の概要動作のフローチャートである。
【００２９】
ステップ３１０）  資源管理ノード１０は、計算ノード２１にタスクを割り当て、当該タスクの処理内容が条件分岐であるかを判定し、条件分岐でない場合は、ステップ３２０に移行し、条件分岐がある場合はステップ３３０に移行する。
【００３０】
ステップ３２０）  計算ノード２１は、条件分岐ではないタスクを割り当てられた場合は、タスク実行部２１１において割り当てられたタスクを実行し、ステップ３１０に戻る。
【００３１】
ステップ３３０）  条件分岐である場合は、条件式を評価する。ここで、評価とは、ユーザにより指定された条件式をタスクとして実行し、その真偽を評価するものである。
【００３２】
ステップ３４０）  資源管理ノード１０は、条件式に基づいて、図６に示す手法により投機的実行を行い、ステップ３１０に戻る。
【００３３】
図６は、本発明の一実施の形態における図５のＳ３４０のフローチャートである。
【００３４】
ステップ５１０）  資源管理ノード１０は、２つの分岐先の両方に対して空いている計算ノードを利用して投機的実行を行う。詳細な処理は図７で後述する。
【００３５】
ステップ５２０）  条件分岐の処理が終了次第、条件が成立しなかった投機的実行に関するタスクを全て終了する。
【００３６】
次に上記ステップ５１０の処理を説明する。
【００３７】
図７は、本発明の一実施の形態における図６のＳ５１０の詳細なフローチャートである。
【００３８】
ステップ６１０）  資源管理ノード１０の計算ノードリスト取得部１２は、特許文献２の技術を用いて、計算ノードＤＢ１４より、投機的実行の入力となるデータを保持しており、かつ、タスクを行っていない計算ノードのリストを抽出する。
【００３９】
ステップ６２０）  サイズ計算部１３は、取得した計算ノードのリストから、タスクを行っていない計算ノードが保持している投機的実行の入力データサイズを求める。
【００４０】
ステップ６３０）  タスク割当部１１は、サイズの大きい入力データ上位k個を保持している計算ノードに、投機的に実行するタスクを割り当てる。ここで、kはユーザが指定するものとする。なお、当該処理の詳細は図８にて後述する。
【００４１】
ステップ６４０）  タスク割当部１１は、計算ノードリスト上の残った計算ノードに対するタスクの割り当てを行う。当該割り当て方法の詳細は図９にて後述する。
【００４２】
次に、上記のステップ６３０の詳細な処理について説明する。
【００４３】
図８は、本発明の一実施の形態における図７のＳ６３０の詳細なフローチャートである。
【００４４】
ステップ７１０）  タスク割当部１１は、ステップ６２０で問い合わせた結果を用いて保持している入力データサイズが大きい計算ノード上位k台を選択する。
【００４５】
ステップ７２０）  タスク割当部１１は、ステップ７１０で選択された計算ノードに対して、その計算ノードが保持する最も大きい入力データと紐付いている分岐先のタスクを割り当てる。
【００４６】
次に、図７のステップ６４０の詳細な処理について説明する。
【００４７】
図９は、本発明の一実施の形態における図７のＳ６４０の詳細なフローチャーである。
【００４８】
ステップ８０１）  タスク割当部１１は、計算ノードリストに残った計算ノードのうち、分岐先の両方の入力データを保持している計算ノードについては、ステップ８１０の処理に移行し、両方の入力データを保持していない場合はステップ８０２に移行する。
【００４９】
ステップ８０２）  分岐先の片方の入力データのみを保持している場合は、ステップ８２０に移行し、いずれも保持していない場合はステップ８３０に移行する。
【００５０】
ステップ８１０）  入力データ量の大きい方のタスクを割り当てる。
【００５１】
ステップ８２０）  入力データを保持しているタスクを割り当てる。
【００５２】
ステップ８３０）  分岐先の入力データを全く保持していない計算ノードには、特許文献２で用いられている技術を用いて、データ転送を行い、タスクを割り当てる。このとき、投機的に実行するタスク間のリソース利用比率が等分になるように、少ない方を優先的に割り当てる。
【００５３】
上記により、想定している分岐並列実行フレームワークにおいて、条件分岐を含む処理を高速に行うことができる。また、複数の条件分岐が連なっている場合でも処理を高速に行うことができる。
【００５４】
本発明は、上記の実施の形態に限定されることなく特許請求の範囲内において種々変更・応用が可能である。
【符号の説明】
【００５５】
１０  資源管理ノード
１１  タスク割当部
１２  計算ノードリスト取得部
１３  サイズ計算部
１４  計算ノードＤＢ
２０  物理計算機
２１  計算ノード
２１１  タスク実行部
【図１】
0005501288.tif 000002
【図２】
0005501288.tif 000003
【図３】
0005501288.tif 000004
【図４】
0005501288.tif 000005
【図５】
0005501288.tif 000006
【図６】
0005501288.tif 000007
【図７】
0005501288.tif 000008
【図８】
0005501288.tif 000009
【図９】
0005501288.tif 000010