JP6357807B2 - タスク割当プログラム、タスク実行プログラム、マスタサーバ、スレーブサーバおよびタスク割当方法 - Google Patents

タスク割当プログラム、タスク実行プログラム、マスタサーバ、スレーブサーバおよびタスク割当方法 Download PDF

Info

Publication number
JP6357807B2
JP6357807B2 JP2014043333A JP2014043333A JP6357807B2 JP 6357807 B2 JP6357807 B2 JP 6357807B2 JP 2014043333 A JP2014043333 A JP 2014043333A JP 2014043333 A JP2014043333 A JP 2014043333A JP 6357807 B2 JP6357807 B2 JP 6357807B2
Authority
JP
Japan
Prior art keywords
task
processing
reduce
map
reduce processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2014043333A
Other languages
English (en)
Other versions
JP2015170054A (ja
Inventor
晴康 上田
晴康 上田
松田 雄一
雄一 松田
高光 前田
高光 前田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014043333A priority Critical patent/JP6357807B2/ja
Priority to US14/632,617 priority patent/US20150254102A1/en
Priority to EP15156783.1A priority patent/EP2916221A1/en
Publication of JP2015170054A publication Critical patent/JP2015170054A/ja
Application granted granted Critical
Publication of JP6357807B2 publication Critical patent/JP6357807B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Computer And Data Communications (AREA)

Description

本発明は、タスク割当プログラム、タスク実行プログラム、タスク割当装置、タスク実行装置およびタスク割当方法に関する。
クラウドコンピューティングの普及に伴い、クラウド上に保存される大量のデータを複数のサーバで分散して処理を実行する分散処理システムが利用されている。分散処理システムとしては、HDFS(Hadoop Distributed File System)とMapReduce処理とを基盤技術とするHadoop(登録商標)が知られている。
HDFSは、複数のサーバにデータを分散格納するファイルシステムである。MapReduceは、HDFS上のデータをタスクと呼ばれる単位で分散処理する仕組みであり、Map処理、Shuffleソート処理、Reduce処理を実行する。
MapReduceによる分散処理においては、マスタサーバが、ハッシュ関数等を用いて、複数のスレーブサーバに対してMap処理やReduce処理のタスクを割り当てるとともに、分割したデータを各スレーブサーバに送信する。そして、各スレーブサーバが、割り当てられたタスクを実行する。
スレーブサーバに対するタスクの割り当ては、ハッシュ関数等を用いることにより、均等に行われる。その一方で、各Reduceタスクに対応する処理量は、Reduceタスクに対応するキー等に関連づけられたReduce対象のデータ量等により均等になるとは限らない。
Reduceタスクに対応する処理量により、各スレーブサーバでの処理完了時間が異なることから、複数タスクからなるジョブ全体の完了が、最も処理が遅いスレーブサーバの処理完了に左右されることとなる。このため、全Reduceタスクをスレーブサーバに割り当てた後、各Reduceタスクに対応する処理量が均等となるように、データ量を調整する技術が知られている。
特開2012−118669号公報
しかしながら、各Reduceタスクの処理量が不均一となることは、入力データやMap処理の結果など様々な影響により異なるので、上記技術のような調整処理を行うことが、ジョブ全体の完了時間を早くするものとは限らない。
例えば、Reduceタスクの処理量を調整するには、全Map処理の完了を待ってから調整することになるので、各スレーブサーバでのReduce処理の実行開始が遅れることになり、却ってジョブ全体の処理時間が長くなる場合もある。
1つの側面では、ジョブ全体の完了時間を短縮することができるタスク割当プログラム、タスク実行プログラム、タスク割当装置、タスク実行装置およびタスク割当方法を提供することを目的とする。
第1の態様では、第1のサーバ装置に、複数の第2のサーバ装置夫々に第1の処理を割り当てる処理を実行させる。第1のサーバ装置に、前記複数の第2のサーバ装置夫々に割り当てる、前記第1の処理タスクの実行結果を用いて実行される第2の処理タスクに関連する前記第1の処理タスクの完了通知を受信した場合に、前記第2の処理タスクの処理量を見積もる処理を実行させる。第1のサーバ装置に、前記第2の処理タスクを割り当てる前記第2のサーバ装置に、見積もった前記処理量に関連した情報を送信する処理を実行させる。
1つの側面として、ジョブ全体の完了時間を短縮することができる。
図1は、実施例1に係る分散処理システムの全体構成例を示す図である。 図2は、実施例1に係るマスタサーバの機能構成を示す機能ブロック図である。 図3は、ジョブリストDBに記憶される情報の例を示す図である。 図4は、タスクリストDBに記憶される情報の例を示す図である。 図5は、Map処理の完了通知の例を示す図である。 図6は、実施例1に係るスレーブサーバの機能構成を示す機能ブロック図である。 図7は、Map処理を説明する図である。 図8は、Shuffle処理を説明する図である。 図9は、Reduce処理を説明する図である。 図10は、Reduce処理タスクの処理量を予測してフラグを設定する処理を説明する図である。 図11は、実施例1に係るマスタサーバが実行する処理の流れを示すフローチャートである。 図12は、マスタサーバが実行する該当タスクの完了処理の流れを示すフローチャートである。 図13は、実施例1に係るスレーブサーバが実行する処理の流れを示すフローチャートである。 図14は、スレーブサーバが実行するReduce処理タスクの起動処理の流れを示すフローチャートである。 図15は、スレーブサーバが実行するReduce処理タスクの分割処理の流れを示すフローチャートである。 図16は、実施例2に係るReduce処理タスクの割当処理の流れを示すフローチャートである。 図17は、実施例3に係るReduce処理タスクの割当処理の流れを示すフローチャートである。 図18は、各サーバのハードウェア構成例を示す図である。
以下に、本願の開示するタスク割当プログラム、タスク実行プログラム、タスク割当装置、タスク実行装置およびタスク割当方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。なお、各実施例は、適宜組み合わせることができる。
[全体構成]
図1は、実施例1に係る分散処理システムの全体構成例を示す図である。図1に示すように、この分散処理システムは、入出力DB(DataBase)サーバ2、マスタサーバ10、複数のスレーブサーバ30がネットワーク1を介して互いに通信可能に接続される。
この分散処理システムでは、Hadoop(登録商標)などの分散処理フレームワークを使用した分散処理アプリケーションが各計算機で実行されており、データ基盤としてHDFSなどを使用する。
入出力DBサーバ2は、分散処理対象のデータのメタ情報等を記憶するデータベースサーバである。例えば、入出力DBサーバ2が記憶するメタ情報は、どのデータがどのスレーブサーバ30に格納されているかを特定するのに使用される。
マスタサーバ10は、分散処理システムを統括的に管理するサーバである。例えば、マスタサーバ10は、入出力DBサーバ2が記憶するメタ情報から、どのデータがいずれのスレーブサーバ30に格納されているのかを特定する。また、マスタサーバ10は、各スレーブサーバ30に割当てるタスクやジョブなどを管理し、Map処理やReduce処理などのタスクをスレーブサーバ30に割当てる。
各スレーブサーバ30は、分散処理アプリケーションを実装し、Map処理やReduce処理を実行して、HDFSで管理されるデータを分散処理するサーバである。例えば、スレーブサーバ30は、複数のプロセッサ、複数のディスクを有する。また、各スレーブサーバ30は、一意に識別される識別子が割り与えられる。
このスレーブサーバ30は、入出力DBサーバ2から取得したデータに対して、マスタサーバ10から割当てられたMap処理のタスクを実行する。また、スレーブサーバ30は、各スレーブサーバのMap処理結果を用いて、Shuffleソート処理を実行し、マスタサーバ10から割り当てられたReduce処理のタスクを実行する。
ここで、各処理について説明する。Map処理は、ユーザが定義したMap関数を実行する処理である。例えば、Map処理は、入力データから中間結果として「Key、Value」のペアを出力する。Shuffleソート処理は、Map処理の結果を「Key」でソートし、同じ「Key」を有する「Key、Value」ペアをマージする。Reduce処理は、ユーザが定義したReduce関数を実行する処理である。例えば、Reduce処理は、Shuffleソート処理の結果から、同じ「Key」の「Value」に対して重ね合わせ処理を実行して、新しい形式の「Key、Value」のペアを生成する。
このような状態において、マスタサーバ10は、複数のスレーブサーバ30夫々にMap処理を割り当てる。マスタサーバ10は、複数のスレーブサーバ30夫々に割り当てる、Map処理タスクの実行結果を用いて実行されるReduce処理タスクに関連するMap処理タスクの完了通知を受信した場合に、Reduce処理タスクの処理量を見積もる。マスタサーバ10は、Reduce処理タスクを割り当てるスレーブサーバ30に、見積もった処理量に関連した情報を送信する。
各スレーブサーバ30は、Map処理タスクの実行結果を用いるReduce処理タスクをスレーブサーバ30に割り当てるマスタサーバ10から、Reduce処理タスクに処理量に関連した情報を受信する。各スレーブサーバ30は、マスタサーバ10から割り当てられたReduce処理タスクを実行する際に、関連した情報に応じて、Reduce処理タスクの処理方法を変更する。
このように、マスタサーバ10が、一部のMap処理タスクの終了結果から処理量が多いReduce処理タスクを検出してスレーブサーバ30に通知するので、スレーブサーバ30がそのReduce処理タスクを分割して並列処理でき、全処理の完了時間を短縮できる。
[マスタサーバの構成]
図2は、実施例1に係るマスタサーバの機能構成を示す機能ブロック図である。図2に示すように、マスタサーバ10は、通信制御部11と、記憶部12と、制御部13とを有する。
通信制御部11は、スレーブサーバ30などの他装置と通信を実行する処理部であり、例えばネットワークインタフェースカードなどである。例えば、通信制御部11は、各スレーブサーバ30に、Map処理タスクやReduce処理タスクを送信する。また、通信制御部11は、Map処理結果等を各スレーブサーバ30から受信する。
記憶部12は、ジョブリストDB12aとタスクリストDB12bとを有する記憶装置であり、例えばメモリやハードディスクなどである。また、記憶部12は、制御部13が実行するプログラムなどを記憶する。
ジョブリストDB12aは、分散処理対象のジョブ情報を記憶するデータベースである。図3は、ジョブリストDB12aに記憶される情報の例を示す図である。図3に示すように、ジョブリストDB12aは、「JobID、総Mapタスク数、総Reduceタスク数、Reduce割当許可」を対応付けて記憶する。
ここで記憶される「JobID」は、ジョブを識別する識別子である。「総Mapタスク数」は、ジョブに含まれるMap処理タスクの総数である。「総Reduceタスク数」は、ジョブに含まれるReduce処理タスクの総数である。「Reduce割当許可」は、Reduce処理タスクが割当可能な状態か否かを示し、可能な場合は「true」が設定され、可能ではない場合は「false」が設定され、ジョブの新規追加時も「false」が設定される。なお、「JobID、総Mapタスク数、総Reduceタスク数」は、管理者等によって設定更新される。
図3の例では、「JobID」が「1」のジョブは、4つのMap処理タスクと2つのReduce処理タスクで構成され、現在はまだ割当することができない状態であることを示す。同様に、「JobID」が「2」のジョブは、4つのMap処理タスクと2つのReduce処理タスクで構成され、現在はまだ割当することができない状態であることを示す。
タスクリストDB12bは、Map処理タスクやReduce処理タスクに関する情報を記憶するデータベースである。図4は、タスクリストDBに記憶される情報の例を示す図である。図4に示すように、タスクリストDB12bは、「JobID、TaskID、種別、Reduceの項番、データのあるスレーブID、状態、割り当てスレーブID、必要スロット数、処理データ量、フラグ」を記憶する。
ここで記憶される「JobID」は、ジョブを識別する識別子である。「TaskID」は、タスクを識別する識別子である。「種別」は、Map処理やReduce処理を示す情報である。「データのあるスレーブID」は、Map処理対象のデータを保持するスレーブサーバ30を識別する識別子であり、例えばホスト名などである。「状態」は、該当タスクが処理完了(Done)状態、実行中(Running)、割り当て前(Not assigned)のいずれであるかを示す。「Reduceの項番」は、該当Reduceの実行順を示す。「割り当てスレーブID」は、タスクが割当てられたスレーブサーバ30を識別する識別子であり、例えばホスト名などである。「必要スロット数」は、タスクを実行するのに使用するスロット数である。「処理データ量」は、該当Reduce処理タスクのデータ量である。「フラグ」は、該当Reduce処理タスクの処理方法の変更を指示するか否かを示し、変更を指示する場合は「true」が設定される。
図4の場合、「jobID」が「1」であるジョブで、1スロットを用いるMap処理タスク「1_m_1」が「Node1」のスレーブサーバ30に割当てられる。そして、この「Node1」のスレーブサーバ30は、「Node1」のスレーブサーバ30と「Node2」のスレーブサーバ30とからデータを取得して、Map処理を実行し、実行が完了していることを示す。
また、「jobID」が「1」であるジョブで、2番目に実行される1スロットを用いるReduce処理タスク「1_r_2」が「Node3」のスレーブサーバ30に割当てられる。また、Reduce処理タスク「1_r_2」のデータ量は、「25000」であり、フラグに「true」が設定されている。そして、この「Node3」のスレーブサーバ30は、Reduce処理タスクを分割して、並列に実行中であることを示す。
なお、JobID、TaskID、種別、Reduce項番については、ジョブリストDB12aに記憶される情報にしたがって生成される。データのあるスレーブIDは、入出力DBサーバ2が記憶するメタ情報等により特定することができる。状態は、タスクの割り当て状況やスレーブサーバ30からの処理結果等によって更新される。割り当てスレーブIDは、タスクを割当時点で更新される。必要スロット数は、1タスクについて1スロットなどのように予め指定することができる。処理データ量は、Map処理の終了結果から予測することができる。フラグは、処理データ量が閾値を超えるか否かによって設定される。
制御部13は、Map割当部14、予測部15、Reduce処理部16を有する処理部であり、例えばプロセッサなどの電子回路である。また、制御部13は、マスタサーバ10全体の処理を司る。
Map割当部14は、各ジョブにおけるMap処理のタスクであるMap処理タスクを1つ以上スレーブサーバ30に割り当てる処理部である。具体的には、Map割当部14は、データのあるスレーブIDの情報等を用いて、各Map処理タスクをスレーブサーバ30に割り当てる。そして、Map割当部14は、図4に示した「割当スレーブID」や「状態」等を更新する。
例えば、Map割当部14は、スレーブサーバ30等からMap処理タスクの割当要求を受信した場合に、タスクリストDB12bを参照して「状態」が「Not assigned」のMap処理タスクを特定する。続いて、Map割当部14は、割当要求を送信したスレーブサーバ30のIDが「データのあるスレーブID」に含まれるMap処理タスクがあればそのMap処理タスクを優先して選び、そのようなMap処理タスクがなければ任意の方法でMap処理タスクを選び、割当対象のMap処理タスクとする。その後、Map割当部14は、割当要求を送信したスレーブサーバ30のIDを、割当対象のMap処理タスクの「スレーブサーバID」に格納する。
その後、Map割当部14は、特定した割当先のスレーブサーバ30に、TaskID、データのあるスレーブID、必要スロット数等を通知して、Map処理タスクを割当てる。また、Map割当部14は、割当てたMap処理タスクの「状態」を「Not assigned」から「Running」に更新する。
予測部15は、Map処理タスクの実行結果を用いて、Reduce処理タスクの処理量を見積もる処理部である。具体的には、予測部15は、スレーブサーバ30から通知されるMap処理の完了通知から、各Reduce処理タスクのデータ量を取得する。
予測部15は、このようにして、所定数のMap処理の結果から取得されたReduce処理タスクのデータ量を加算して、Reduce処理タスクのデータ量を見積もる。そして、予測部15は、見積もったReduce処理タスクのデータ量をタスクリストDB12bの処理データ量に格納し、Reduce処理タスクのデータ量が所定値以上であればフラグにtrueを格納する。なお、予測部15は、完了通知を受信したMap処理タスクの「状態」を「Running」から「Done」に更新する。
図5は、Map処理の完了通知の例を示す図である。図5に示す完了通知は、各スレーブサーバ30がマスタサーバ10に送信する完了通知である。図5に示すように、完了通知は、「通知種別、JobID、完了Map TaskID、Mapタスクを実行したスレーブID」から構成されるMap完了内容と、「通知種別、JobID、完了Map TaskID、Reduce TaskID、データ量」から構成されるMap完了内容とを含む。
ここで記憶される「通知種別」は、Map処理の完了通知かReduce情報かを示す情報であり、Map処理の完了通知の場合には「Map完了」が設定され、Reduce情報の場合には「Reduceデータ量」が設定される。「JobID」には、Map処理が属するジョブの識別子が設定される。「完了Map TaskID」は、完了したMap処理タスクを特定する識別子が設定される。「Mapタスクを実行したスレーブID」は、当該Map処理タスクを実行し、完了通知を送信したスレーブサーバの識別子が設定される。「Reduce TaskID」は、当該Map処理の実行結果からデータ量が判明したReduce処理タスクを特定する識別子が設定される。「データ量」は、当該Map処理の実行結果から判明したReduce処理タスクデータ量設定される。
図5の例は、「JobID」が「13」のジョブにおける「13_m_5」のMap処理タスクの完了結果を示している。このMap処理タスク「13_m_5」は、スレーブサーバ「Node1」で実行されたタスクである。また、このMap処理タスク「13_m_5」によって、「JobID」が「13」のジョブにおけるReduce処理が「13_r_1」、「13_r_2」、「13_r_3」の3つあることが判明したことを示す。さらに、このMap処理タスク「13_m_5」によって、Reduce処理タスク「13_r_1」のデータ量が「1000」、Reduce処理タスク「13_r_2」のデータ量が「1200」、Reduce処理タスク「13_r_3」のデータ量が「8000」であることが判明したことを示す。
予測部15は、このようにしてMap処理タスクの完了通知からReduce処理タスクのデータ量を取得して加算していく。そして、予測部15は、加算した結果が「10000」を超える場合に、フラグに「true」を設定する。
ここで、予測部15がReduce処理の合計を見積もる契機を様々に設定することができる。つまり、どの程度のMap処理タスクが完了した時点で、処理データ量が閾値を超えるか否かを判定するのかを任意に設定することができる。
例えば、予測部15は、全Map処理タスクのうち予め指定した割合のMap処理が完了した時点で判定することができる。また、予測部15は、最初のMap処理タスクが終了してから予め指定した時間が過ぎて時点で判定することができる。また、予測部15は、上記2つの時点のいずれか早い時点で判定することもできる。
なお、最初のMap処理タスクについても、ランダムに指定することもできる。このように、Map処理タスクのタスク数等に基づいて予測タイミングを任意に変更することができるので、入力データによってカスタマイズすることができる。
Reduce割当部16は、スレーブサーバ30からReduce処理タスクの割当要求を受信した場合に、Reduce処理タスクを割当てる処理部である。具体的にはReduce割当部16は、振分キーに関するハッシュ関数等を用いて、各Reduce処理タスクをスレーブサーバ30に割り当てる。そして、Reduce割当部16は、図4に示した「割当スレーブID」や「状態」等を更新する。
例えば、Reduce割当部16は、スレーブサーバ30等からReduce処理タスクの割当要求を受信した場合に、タスクリストDB12bを参照して「状態」が「Not assigned」のReduce処理タスクを特定する。続いて、Reduce割当部16は、ハッシュ関数等を用いて割当先のスレーブサーバを特定する。その後、Reduce割当部16は、特定した割当先のスレーブサーバ30のIDを、割当対象のReduce処理タスクの「スレーブサーバID」に格納する。
その後、Reduce割当部16は、特定した割当先のスレーブサーバ30に、TaskID、必要スロット数、処理データ量、フラグ等を通知して、Reduce処理タスクを割当てる。また、Reduce割当部16は、割当てたMap処理タスクの「状態」を「Not assigned」から「Running」に更新する。なお、Reduce割当部16は、Reduce処理タスクの完了通知を受信した場合、該当Reduce処理タスクの「状態」を「Running」から「Done」に更新する。
[スレーブサーバの構成]
図6は、実施例1に係るスレーブサーバの機能構成を示す機能ブロック図である。図6に示すように、スレーブサーバ30は、通信制御部31と、記憶部32と、制御部33とを有する。
通信制御部31は、マスタサーバ10や他のスレーブサーバ30などと通信を実行する処理部であり、例えばネットワークインタフェースカードなどである。例えば、通信制御部31は、マスタサーバ10から各種タスクの割当を受信し、各種タスクの完了通知を送信する。また、通信制御部31は、各種タスク処理の実行に伴って、該当するスレーブサーバ30から読み出されたデータを受信する。
記憶部32は、一時ファイルDB32aと入出力ファイルDB32bとを有する記憶装置であり、例えばメモリやハードディスクなどである。また、記憶部32は、制御部33が実行するプログラムなどを記憶する。
一時ファイルDB32aは、Map処理、Shuffle処理、Reduce処理等で生成される中間データ、他のスレーブサーバ30等から読み出されたデータや各処理部が処理を実行する際に使用するデータを一時的に記憶するデータベースである。入出力ファイルDB32bは、Map処理の入力およびReduce処理の出力を記憶するデータベースであり、入出力DBサーバ2と連携したデータベースである。
制御部33は、Map処理部34、Map結果送信部35、Shuffle処理部36、Reduce受信部37、フラグ判定部38、Reduce処理部39を有する処理部であり、例えばプロセッサなどの電子回路である。また、制御部33は、スレーブサーバ30全体の処理を司る。
Map処理部34は、Map処理タスクを実行する処理部である。具体的には、Map処理部34は、ハートビートなどを用いて、マスタサーバ10にMap処理タスクの割当を要求する。そして、Map処理部34は、マスタサーバ10から、「TaskID、データのあるスレーブID、必要スロット数」などを含むMap割当情報を受信する。
その後、Map処理部34は、受信したMap割当情報にしたがって、「データのあるスレーブID」で特定されるスレーブサーバ30が処理を行っているスレーブサーバであれば、入出力DB32bからデータを取得し、そうでなければ、「データのあるスレーブID」で特定されるスレーブサーバ30からデータを取得して一時ファイルDB32a等に保存し、「必要スロット数」で指定されるスロット数を用いてMap処理を実行する。そして、Map処理部34は、Map処理結果を一時ファイルDB32a等に格納する。ここで、生成されるMap処理結果は、例えば図5に示すように、Reduce処理のタスクIDやデータ量などが含まれる。
Map結果送信部35は、Map処理部34が実行したMap処理の結果をマスタサーバ10に送信する処理部である。例えば、Map結果送信部35は、Map処理部34からMap処理が終了したことが通知されると、一時ファイルDB32aなどからMap処理結果の一部を読み出す。そして、Map結果送信部35は、図5に示した完了通知を生成してマスタサーバ10に送信する。
Shuffle処理部36は、Map処理の結果を「Key」でソートし、同じ「Key」を有する「Key、Value」ペアをマージして、Reduce処理の処理対象を生成する処理部である。具体的には、Shuffle処理部36は、マスタサーバ10からMap処理が終了したことを通知されると、当該Map処理が属するジョブのReduce処理を実行する準備として、各スレーブサーバ30から該当するMap処理結果を取得する。そして、Shuffle処理部36は、Map処理の結果を予め指定された「Key」でソートし、同じ「Key」を有する処理結果をマージして、一時ファイルDB32aに格納する。
例えば、Shuffle処理部36は、「JobID」が「1」のMap処理タスクである「1_m_1、1_m_2、1_m_3、1_m_4」が終了したこと、つまり、「JobID」が「1」のReduce処理タスクの実行開始をマスタサーバ10から受信する。すると、Shuffle処理部36は、Node1、Node2、Node3、Node4からMap処理結果を取得する。続いて、Shuffle処理部36は、Map処理結果のソートおよびマージを実行し、その結果を一時ファイルDB32a等に格納する。
Reduce受信部37は、マスタサーバ10から割当てられたReduce処理タスクを受信する処理部である。例えば、Reduce受信部37は、「JobID、TaskID、必要スロット数、処理データ量、フラグ」などから構成されるReduce処理タスクの情報を受信する。そして、Reduce受信部37は、受信した情報を一時ファイルDB32a等に格納する。
フラグ判定部38は、マスタサーバ10から割当てられたReduce処理タスクにフラグが設定されているか否かを判定する処理部である。具体的には、フラグ判定部38は、Reduce受信部37が一時ファイルDB32a等に格納したReduce処理タスクの情報を参照して、フラグが設定されているか否かを判定する。そして、フラグ判定部38は、判定結果をReduce処理部39に通知する。
例えば、フラグ判定部38は、Reduce処理タスクの情報が「JobID=2、TaskID=2_r_1、必要スロット数=1、処理データ量=24000、フラグ=true」であった場合、「フラグ=true」であることから、フラグが設定されていると判定する。なお、フラグ判定部38は、「フラグ」に「true」が設定されていない場合、フラグが設定されていないと判定する。
Reduce処理部39は、フラグ判定部38による判定結果に基づいて、Reduce処理タスクの処理方法を変更して、Reduce処理タスクを実行する処理部である。具体的には、Reduce処理部39は、割当てられたReduce処理タスクにフラグが設定されている場合には、割当てられたReduce処理タスクを分散処理する。一方、Reduce処理部39は、割当てられたReduce処理タスクにフラグが設定されていない場合には、割当てられたReduce処理タスクを分散処理せずに実行する。そして、Reduce処理部39は、Reduce処理タスクの処理結果を入出力ファイルDB32b等に格納する。
例えば、Reduce処理部39は、スレーブサーバ30が有するプロセッサの数、ディスクの数、予め指定された数の少なくとも1つを用いて、割り当てられたReduce処理タスクをサブタスクに分割して、複数のプロセッサで並列実行する。
一例を挙げると、Reduce処理部39は、プロセッサの数またはディスクの数が4つである場合、Reduce処理タスクを4つのサブタスクに分割し、4つプロセッサを用いて各サブタスクを並列に実行する。
(Map処理の説明)
ここで、スレーブサーバ30が実行するMap処理について説明する。図7は、Map処理を説明する図である。図7に示すように、各スレーブサーバ30は、入力データとして「Hello Apple!」と「Apple is red」を受信し、それぞれの入力データに対してMap処理を実行して、「Key、Value」のペアを出力する。
図7の例では、スレーブサーバ30は、「Hello Apple!」に対してMap処理を実行して、入力データの各要素の数を計数し、要素を「Key」、計数結果を「Value」とする「Key、Value」のペアを出力する。具体的には、スレーブサーバ30は、入力データ「Hello Apple!」から「Hello、1」、「Apple、1」、「!、1」を生成する。同様に、スレーブサーバ30は、入力データ「Apple is red」から「Apple、1」、「is、1」、「red、1」を生成する。
(Shuffle処理)
次に、スレーブサーバ30が実行するShuffle処理について説明する。図8は、Shuffle処理を説明する図である。図8に示すように、各スレーブサーバ30は、各スレーブサーバからMap処理結果を取得してShuffle処理を実行する。
図8の例では、スレーブサーバ(A)、(B)、(C)・・・が同じジョブ(例えば、JobID=20)に属するMap処理タスクを実行し、スレーブサーバ(D)と(Z)とが、JobID=20に属するReduce処理タスクを実行する。
例えば、スレーブサーバ(A)がMap処理1を実行して「Apple、1」、「is、3」を生成し、スレーブサーバ(B)がMap処理2を実行して「Apple、2」、「Hello、4」を生成し、スレーブサーバ(C)がMap処理3を実行して「Hello、3」、「red、5」を生成する。スレーブサーバ(X)がMap処理1000を実行して「Hello、1000」、「is、1002」を生成する。
続いて、スレーブサーバ(D)およびスレーブサーバ(Z)は、割当てられたReduce処理タスクで使用する各スレーブサーバのMap処理結果を取得して、ソートおよびマージを実行する。具体的には、スレーブサーバ(D)には、「Apple」と「Hello」についてのReduce処理タスクが割当てられて、スレーブサーバ(Z)には、「is」と「red」についてのReduce処理タスクが割当てられたとする。
この場合、スレーブサーバ(D)は、スレーブサーバ(A)からMap処理1の結果「Apple、1」を取得し、スレーブサーバ(B)からMap処理2の結果「Apple、2」および「Hello、4」を取得する。また、スレーブサーバ(D)は、スレーブサーバ(C)からMap処理3の結果「Hello、3」を取得し、スレーブサーバ(X)からMap処理1000の結果「Hello、1000」を取得する。そして、スレーブサーバ(D)は、これらの結果をソートおよびマージして、「Apple、[1,2]」および「Hello、[3,4,1000]」を生成する。
同様に、スレーブサーバ(Z)は、スレーブサーバ(A)からMap処理1の結果「is、3」を取得し、スレーブサーバ(C)からMap処理3の結果「red、5」を取得し、スレーブサーバ(X)からMap処理1000の結果「is、1002」を取得する。そして、スレーブサーバ(Z)は、これらの結果をソートおよびマージして、「is、[3,1002]」および「red、[5]」を生成する。
(Reduce処理)
次に、スレーブサーバ30が実行するReduce処理について説明する。図9は、Reduce処理を説明する図である。図9に示すように、各スレーブサーバ30は、各スレーブサーバのMap処理結果から生成したShuffle結果を用いて、Reduce処理を実行する。具体的には、Shuffle処理の説明と同様、スレーブサーバ(D)には、「Apple」と「Hello」についてのReduce処理タスクが割当てられて、スレーブサーバ(Z)には、「is」と「red」についてのReduce処理タスクが割当てられたとする。
この例では、スレーブサーバ(D)は、Shuffle処理の結果である「Apple、[1,2]」および「Hello、[3,4,1000]」から、Reduce処理結果として「Apple、3」および「Hello、1007」を生成する。同様に、スレーブサーバ(Z)は、Shuffle処理の結果である「is、[3,1002]」および「red、[5]」から、Reduce処理結果として「is、1005」および「red、5」を生成する。
(Reduce処理タスクのフラグ設定)
次に、マスタサーバ10がMap処理結果からReduce処理タスクにフラグを設定する例を説明する。図10は、Reduce処理タスクの処理量を予測してフラグを設定する処理を説明する図である。この図10は、マスタサーバ10が保持するタスクリストを示している。
図10示すタスクリストのうち「JobID=1」についてはReduce処理の割当が完了しており、Reduce処理が既に実行されていることを示す。このような状態で、「JobID=2」におけるMap処理タスク「2_m_1、2_m_2、2_m_3、2_m_4」のうち「2_m_1」および「2_m_2」が完了したとする(S1)。
そして、マスタサーバ10は、Map処理タスク「2_m_1」を実行したNode1からReduce処理のデータ量を含むMap完了通知1を受信し、Map処理タスク「2_m_2」を実行したNode2からReduce処理のデータ量を含むMap完了通知2を受信する(S2)。
続いて、マスタサーバ10は、受信したMap完了通知1とMap完了通知2とから、「JobID=2」におけるReduce処理タスク「2_r_1」と「2_r_2」の処理データ量をそれぞれ「24000」と「13000」と見積もる(S3)。
その後、マスタサーバ10は、処理データ量が閾値「20000」を超えるReduce処理タスク「2_r_1」に対して、フラグ「true」を設定する(S4)。そして、マスタサーバ10は、Reduce処理タスク「2_r_1」と「2_r_2」の割当先をハッシュ関数で決定し、Reduce処理タスク「2_r_1」が割当てられたNodeに、Reduce処理タスクとともにフラグ「true」を送信する(S5)。
このように、マスタサーバ10は、ジョブにおける全てのMap処理タスクが終了する前に、一部のMap処理タスクが完了した時点で、Reduce処理タスクの処理データ量を見積り、見積もった結果に応じてフラグを設定する。
[マスタサーバの処理]
図11は、実施例1に係るマスタサーバが実行する処理の流れを示すフローチャートである。図11に示すように、マスタサーバ10は、管理者等から登録されるジョブ登録の情報にしたがって、ジョブリストDB12aにジョブリストやタスクリストDB12bにタスクリストを追加する(S101)。
その後、マスタサーバ10は、スレーブサーバ30からハートビートなどの通知を受信するまで待機し(S102)、通知を受信した場合に、当該通知がタスク要求かタスクの完了通知かを判定する(S103)。
そして、マスタサーバ10のMap割当部14は、受信された通知がタスク要求であると判定された場合(S103:タスク要求)、ハッシュ関数等を用いてタスク割当を実施する(S104)。その後、Map割当部14は、通知要求元のスレーブサーバ30に、割当てたタスク情報を応答する(S105)。ここで、タスク情報には、タスクに属するジョブに関するジョブリストの該当行の一行分の情報およびタスクリストの該当行の一行分の情報などが含まれる。
一方、マスタサーバ10の制御部13は、受信された通知がタスクの完了通知であると判定された場合(S103:完了通知)、該当タスクの完了処理を実行する(S106)。その後、制御部13は、ジョブの全タスクが完了した場合(S107:Yes)、S101に戻って以降の処理を繰り返す。一方、制御部13は、ジョブの全タスクが完了していない場合(S107:No)、S102に戻って以降の処理を繰り返す。
(タスクの完了処理)
図12は、マスタサーバが実行する該当タスクの完了処理の流れを示すフローチャートである。この処理は、図11のS106で実行される処理である。
図12に示すように、マスタサーバ10の予測部15は、受信された完了通知がMap処理タスクの完了通知であると判定された場合(S201:Map)、終了したMap処理の完了通知からReduce処理タスクの処理データ量を加算する(S202)。
例えば、予測部15は、受信された完了通知のヘッダにMap処理タスクを示す識別子が付与されていた場合に、Map処理タスクの完了通知を判定し、当該完了通知に含まれるReduceデータ量に基づいて、図4に示す該当Reduce処理のデータ量を計算する。
その後、予測部15は、所定のMap処理タスクが完了し、フラグ判定タイミングであると判定すると(S203:Yes)、図4を参照し、処理データ量が所定値を超えるReduce処理タスクが存在するか否かを判定する(S204)。
そして、予測部15は、処理(転送)データ量が所定値を超えるReduce処理タスクにフラグ「true」を設定して、フラグの付いたReduce処理タスクの割当を実行する(S205)。例えば、予測部15は、ハッシュ値等を用いて、フラグ「true」を設定したReduce処理タスクの割当先を決定し、決定した割当先のスレーブサーバ30にReduce処理タスクを送信する。
続いて、予測部15は、完了通知を受信したMap処理タスクの「状態」を「Done」に変更し(S206)、該当Map処理タスクの完了をMap処理タスクの完了通知領域に登録する(S207)。
一方、マスタサーバ10のReduce割当部16は、受信された完了通知がMap処理タスクではなく、Reduce処理タスクの完了通知であると判定された場合(S201:Reduce)、完了通知を受信したReduce処理タスクの「状態」を「Done」に変更する(S208)。
[スレーブサーバの処理]
図13は、実施例1に係るスレーブサーバが実行する処理の流れを示すフローチャートである。図13に示すように、スレーブサーバ30は、マスタサーバ10に、ハートビートでタスク要求を送信する(S301)。
続いて、スレーブサーバ30は、タスク要求の応答としてジョブ情報とタスク情報を取得し(S302)、取得したタスク情報がMap処理タスクの情報か否かを判定する(S303)。
そして、スレーブサーバ30のMap処理部34は、取得したタスク情報がMap処理タスクの情報であると判定された場合(S303:Map)、入力データを読み込み(S304)、Map処理タスクを起動する(S305)。
例えば、Map処理部34は、取得したMap処理タスクの情報における「データのあるスレーブID」で特定されるスレーブサーバ30から入力データを取得し、取得したMap処理タスクの情報によって割当てられたMap処理タスクを起動する。
その後、Map処理部34は、一時ファイルDB32aに、Reduce処理タスクごとに分けて処理結果を保存し(S306)、Map処理タスクが終了するまで待機する(S307)。そして、Map結果送信部35は、ハートビート等でMap処理タスクの完了とReduce向けデータ量をマスタサーバ10に送信する(S308)。
一方、スレーブサーバ30のReduce受信部37が取得したタスク情報がReduce処理タスクの情報であると判定した場合(S303:Reduce)、Shuffle処理部36が、各スレーブサーバ30からMap処理結果を取得して、Shuffle処理を実行する(S309)。
Reduce処理部39は、Reduce受信部37が取得したReduce処理タスクを実行して(S310)、タスクが終了するまで待機し(S311)、タスクが完了すると、ハートビート等で完了通知をマスタサーバ10に送信する(S312)。
(Reduce処理タスクの起動処理)
図14は、スレーブサーバが実行するReduce処理タスクの起動処理の流れを示すフローチャートである。図14に示すように、フラグ判定部38は、Reduce受信部37が受信したReduce処理タスクにフラグ「true」が付加されているか否かを判定する(S401)。
そして、フラグ判定部38がReduce処理タスクにフラグ「true」が付加されていると判定した場合(S401:Yes)、Reduce処理部39は、Reduce処理タスクの入力を分割する(S402)。
続いて、Reduce処理部39は、各分割された入力でS403からS405までループ処理する。具体的には、Reduce処理部39は、各分割されたReduce処理タスクの入力に関して、Reduce処理タスクのサブタスクを起動する(S404)。
そして、Reduce処理部39は、Reduce処理タスクの全サブタスクが完了するまで待機し(S406)、全サブタスクが完了すると、処理を終了する。
一方、S401において、フラグ判定部38がReduce処理タスクにフラグ「true」が付加されていないと判定した場合(S401:No)、Reduce処理部39は、受信されたReduce処理タスクをそのまま実行する(S407)。そして、Reduce処理部39は、Reduce処理タスクが完了すると、処理を終了する。
(Reduce処理タスクの分割処理)
図15は、スレーブサーバが実行するReduce処理タスクの分割処理の流れを示すフローチャートである。図15に示すように、スレーブサーバ30のReduce処理部39は、自サーバ内におけるスレーブの受け入れ可能スロット数を「S」と設定する(S501)。
そして、Reduce処理部39は、変数「i」がS−1となるまで順にS502からS508までを実行するループ処理する。具体的には、Reduce処理部39は、「i×Reduce処理タスクの入力の全レコード数/S」を「開始位置」に設定する(S503)。その後、Reduce処理部39は、Reduce処理タスクの入力「開始位置」が「Key」ではない間、S504からS506の処理を繰り返すループ処理を実行する。
具体的には、Reduce処理部39は、Reduce処理タスクの入力「開始位置」が「Key」になるまで、「開始位置」をインクリメントする(S505)。そして、Reduce処理部39は、Reduce処理タスクの入力「開始位置」が「Key」になると、分割された入力の開始位置「i」に、S504からS506で算出された「開始位置」を代入する(S507)。その後、Reduce処理部39は、S502以降のループ処理を実行する。
上述したように、マスタサーバ10は、一部のMap処理タスクの実行後に、データ量の集中する可能性が高いReduce処理タスクを検知する。そして、マスタサーバ10は、検知したReduce処理タスクをスレーブサーバ30で処理させる際に、スレーブサーバ30内で並列実行させることができる。
このように、マスタサーバ10は、タスク割り当ての際には知ることができないReduceタスクの処理量の不均一性に関する情報を、各スレーブサーバ30に伝えて処理方法を変更させることができる。したがって、該当スレーブサーバのみReduce処理タスクを優先させることにより、ジョブ全体の完了時間を短縮することができる。
また、マスタサーバ10は、全Map処理タスクの所定の割合が終了した場合や最初のMap処理タスクが終了してから所定時間が経過した場合に、Reduce処理タスクの処理量を見積もることができる。この結果、マスタサーバ10は、どの程度のMap処理タスクが終了したところで、フラグ付けの判断を行うかを任意の方式で決定することができるので、ジョブに適した方式を採用することができ、汎用性を高めることができる。
スレーブサーバ30は、処理量の多いReduce処理タスクについては、フラグが通知されるので、当該Reduce処理タスクを分割して実行することができ、処理時間を短縮することができる。また、スレーブサーバ30は、Reduce処理タスクを分割する際に、プロセッサの数、ディスクの数、予め指定された数の少なくとも1つを用いて分割するので、自サーバの処理性能にあわせて分割することができる。
ところで、マスタサーバ10は、フラグ付きのReduce処理タスクを割当てる先のスレーブサーバ30に、他のReduce処理タスクが既に割当てられている場合に、フラグ付きのReduce処理タスクを優先させることができる。
そこで、実施例2では、フラグ付きのReduce処理タスクを優先させる例について説明する。図16は、実施例2に係るReduce処理タスクの割当処理の流れを示すフローチャートである。
図16に示すように、マスタサーバ10のReduce割当部16は、タスクリストDB12b中のReduce処理タスクを処理データ量が多い順に並び替える(S601)。続いて、Reduce割当部16は、タスクリストDB12b中のReduce処理タスクを処理データ量の多い順に、スレーブサーバ30の数だけ選択し、「優先タスクリストP」と設定する(S602)。そして、Reduce割当部16は、「未割当優先タスク数」に「0」を設定する(S603)。
その後、Reduce割当部16は、「優先タスクリストP」の数のReduce処理タスクについて、S604からS608までをループ処理する。具体的には、Reduce割当部16は、処理対象のReduce処理タスクが既に割当済みである場合(S605:Yes)、当該タスクと同じスレーブサーバ30に割当てられた他のReduce処理タスクを中止する(S606)。一方、Reduce割当部16は、処理対象のReduce処理タスクが割当済みではない場合(S605:No)、「未割当優先タスク数」をインクリメントする(S607)。
S605からS608までのループ処理が終了すると、Reduce割当部16は、「未割当優先タスク数」が0より大きいか否かを判定する(S609)。そして、Reduce割当部16は、「未割当優先タスク数」が0である場合(S609:No)、処理を終了する。
一方、Reduce割当部16は、「未割当優先タスク数」が0より大きい場合(S609:Yes)、全スレーブサーバ30に対してS610からS615までをループ処理する。
具体的には、Reduce割当部16は、該当スレーブサーバ30に優先タスクリストのいずれかのReduce処理タスクが割当済みである場合には(S611:Yes)、当該スレーブサーバ30に対するループ処理を終了し(S615)、次のスレーブサーバ30に対してループ処理を実行する。
一方、Reduce割当部16は、該当スレーブサーバ30に、優先タスクリストにおけるいずれのReduce処理タスクも割当てられていない場合には(S611:No)、対象のスレーブサーバ30に割当てられた他のReduce処理タスクを中止する(S612)。続いて、Reduce割当部16は、該当する優先タスクを対象のスレーブサーバ30に割り与え、「未割当優先タスク数」を1減算する(S613)。
その後、Reduce割当部16は、1減算後の「未割当優先タスク数」が0である場合には(S614:Yes)、処理を終了する。一方、Reduce割当部16は、1減算後の「未割当優先タスク数」が0より大きい場合には(S614:No)、次のスレーブサーバ30についてS610以降のループ処理を実行する。
このように、マスタサーバ10は、フラグ付きのReduce処理タスクを割当てる先のスレーブサーバ30に、他のReduce処理タスクが既に割当てられている場合に、フラグ付きのReduce処理タスクを優先させることができる。このため、マスタサーバ10は、後からフラグが付いたReduce処理タスクを優先させて処理させることができるので、Reduce処理タスクの見積り順序に依存せずに、ジョブ全体の完了時間を短縮することができる。
一般には実行中のタスクを中止することで無駄になる計算時間、また送信済みのデータを使わなくなるために無駄になる通信時間やデータの読み書き時間が発生する。しかし、いくつかのMap処理タスクが終了してフラグが立った段階で、フラグの経ったReduce処理タスクと同じスレーブサーバ30に割り当て済みのReduce処理タスクを中止するようにすることで、一部のデータ転送の無駄とそのデータの処理の無駄だけに抑えることができる。また、クリティカルパス上にあってもっとも早く開始したいフラグの立ったReduce処理タスクの開始を従来通り素早く開始できるため全体としての処理時間が短くなる。
ところで、マスタサーバ10は、Reduce処理タスクのフラグが設定されてすぐに割当を実施せずに、いくつかのMap処理タスクが終了して割当てることもできる。そこで、実施例3では、すぐにReduce処理タスクの割当を実行せずに、いくつかのMap処理タスクが終了してからReduce処理タスクの割当を実行する例を説明する。
図17は、実施例3に係るReduce処理タスクの割当処理の流れを示すフローチャートである。図17に示すように、マスタサーバ10のMap割当部14は、タスク要求してきたスレーブサーバ30がMap処理タスクの受け入れが可能である場合(S701:Yes)、未割り当てのローカルMap処理タスクが存在するか否かを判定する(S702)。ここで、ローカルMap処理タスクとは、タスク要求してきたスレーブサーバ30がタスクリスト中の「データがあるスレーブID」の列に含まれているタスクを指す。
そして、Map割当部14は、未割り当てのローカルMap処理タスクが存在すると判定した場合(S702:Yes)、タスク要求してきたスレーブサーバ30に、当該未割り当てのローカルMap処理タスクを割当てる(S703)。その後、Map割当部14は、S701以降の処理を繰り返す。
一方、Map割当部14は、未割り当てのローカルMap処理タスクが存在せず(S702:No)、未割り当てのMap処理タスクが存在すると判定した場合(S704:Yes)、タスク要求してきたスレーブサーバに、未割り当てのMap処理タスクを割当てる(S703)。
そして、Map処理タスクの受け入れが可能ではなく(S701:No)、または、未割り当てのMap処理タスクが存在しない場合(S704:No)、S705を実行する。具体的には、Reduce割当部16は、タスク要求してきたスレーブサーバ30がReduce処理タスクの受け入れが可能であるか否かを判定する。ここで、Reduce処理タスクの受け入れが可能であるとは、「スレーブサーバ30の処理可能なReduce処理タスク数>スレーブサーバ30に割り当て済みReduce処理タスクの必要スロット数の合計」である状態を指す。
Reduce割当部16は、タスク要求してきたスレーブサーバ30がReduce処理タスクの受け入れが可能であると判定した場合(S705:Yes)、S706を実行する。具体的には、Reduce割当部16は、ジョブリストDB12aのReduce割当許可がtrueか否かを参照して、Reduce処理タスクの割当が許可されているか否かを判定する。
そして、Reduce割当部16は、Reduce処理タスクの割当が許可されていると判定した場合(S706:Yes)、未割り当てのReduce処理タスクが存在するか否かを判定する(S707)。
ここで、Reduce割当部16は、未割り当てのReduce処理タスクが存在すると判定した場合(S707:Yes)、タスク要求してきたスレーブサーバ30に、未割り当てのReduce処理タスクを割り当てる(S708)。その後、Reduce割当部16は、S701以降の処理を繰り返す。
一方、Reduce処理タスクの受け入れが可能ではない場合(S705:No)、Reduce処理タスクの割当が許可されていない場合(S706:No)、未割り当てのReduce処理タスクが存在しない場合(S707:No)、Reduce割当部16は、処理を終了する。
このように、マスタサーバ10は、Reduce処理タスクのフラグが設定されてすぐに割当を実施せずに、いくつかのMap処理タスクが終了して割当てることもできる。この方式では、shuffle処理のデータ転送の開始が遅くなる場合もあるが、多くのMap処理タスクのデータ量は均等であり、最初に割り当てられたMapタスクは一斉に終わることが期待される。このため、遅れの影響は限定的である一方、中止されるReduce処理タスクはないので、データ転送とその処理に関する無駄は発生しない。
したがって、若干の余分な処理時間がかかる場合があるが、ボトルネックとなるデータ量の多いReduce処理タスクの処理時間を短縮することで、ジョブ全体の処理時間を短縮できる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
(Reduce処理タスクのフラグ判断)
マスタサーバ10は、所定値以上の処理データ量であるReduce処理タスクをフラグ対象として決定する例を説明したが、これに限定されず、様々な判断基準で決定することができる。
例えば、マスタサーバ10は、Reduce処理タスクのデータ量の平均を「m」とした場合、例えば2などのあらかじめ定められた係数k基づき、「k×m」よりも多くのデータ量を有するReduce処理タスクにフラグを付けることもできる。
また、マスタサーバ10は、Reduce処理タスクのデータ量の平均を「m」、分散を「σ」とした場合に、例えば3などのあらかじめ定められた係数kに基づき、「m+k×σ」よりも多くのデータ量を有するReduce処理タスクにフラグを付けることもできる。
また、マスタサーバ10は、スレーブタスク30の同時実行可能タスク数を「s」、最大のReduce処理タスクのデータ量を「d」とした場合に、サブタスクのデータ量「d/s=d´」とすると、「d´」より多くのデータ量を持つ全てのReduce処理タスクにフラグを付けることもできる。
(システム)
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
(ハードウェア)
次に、各サーバのハードウェア構成例を説明するが、各サーバは同様の構成を有するので、ここでは一例を説明する。図18は、サーバのハードウェア構成例を示す図である。図17に示すように、サーバ100は、通信インタフェース101、メモリ102、複数のHDD(ハードディスクドライブ)103、プロセッサ装置104を有する。
通信インタフェース101は、図2や図6に示した通信制御部に該当し、例えばネットワークインタフェースカードなどである。複数のHDD103は、図2や図6に示した機能を動作させるプログラムやDB等を記憶する。
プロセッサ装置104が有する複数のCPU105は、図2や図6に示した各処理部と同様の処理を実行するプログラムをHDD103等から読み出してメモリ102に展開することで、図2や図6等で説明した各機能を実行するプロセスを動作させる。すなわち、このプロセスは、マスタサーバ10が有するMap割当部14、予測部15、Reduce処理部16と同様の機能を実行する。また、このプロセスは、スレーブサーバ30が有するMap処理部34、Map結果送信部35、Shuffle処理部36、Reduce処理部37、フラグ判定部38、Reduce処理部39と同様の機能を実行する。
このようにサーバ100は、プログラムを読み出して実行することで、タスク割当方法またはタスク実行方法を実行する情報処理装置として動作する。また、サーバ100は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、サーバ100によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
10 マスタサーバ
11 通信制御部
12 記憶部
12a ジョブリストDB
12b タスクリストDB
13 制御部
14 Map割当部
15 予測部
16 Reduce割当部
30 スレーブサーバ
31 通信制御部
32 記憶部
32a 一時ファイルDB
32b 入出力ファイルDB
33 制御部
34 Map処理部
35 Map結果送信部
36 Shuffle処理部
37 Reduce受信部
38 フラグ判定部
39 Reduce処理部

Claims (9)

  1. 複数のMap処理タスクを含むMap処理および複数のReduce処理タスクを含むReduce処理を含むMapReduce処理の各タスクを複数のスレーブサーバに割当てるマスタサーバに、
    前記複数のスレーブサーバ夫々に、前記複数のMap処理タスクを割り当て、
    前記複数のMap処理タスクの全部が完了する前に、対象となる複数のMap処理タスクの実行結果を用いる前記複数のReduce処理タスク夫々が処理対象とするデータ量を、処理が完了した各Map処理タスクから送信される実行結果に含まれるデータ量に基づいて予測し、 前記複数のReduce処理タスクを前記複数のスレーブサーバ夫々に割当てる際に、予測された前記データ量が閾値を超えるReduce処理タスクである高負荷Reduce処理タスクを割当てるスレーブサーバに、前記高負荷Reduce処理タスクの分散処理を指示する
    処理を実行させることを特徴とするタスク割当プログラム。
  2. 前記予測する処理は、全Map処理タスクにおける所定の割合の処理が終了した場合、または、最初のMap処理タスクが終了してから所定時間が経過した場合に、前記複数のReduce処理タスク夫々のデータ量を予測することを特徴とする請求項に記載のタスク割当プログラム。
  3. 複数のMap処理タスクを含むMap処理および複数のReduce処理タスクを含むReduce処理を含むMapReduce処理の各タスクを実行するスレーブサーバに、
    前記各タスクの割当てを実行するマスタサーバからReduce処理タスクが割当てられた場合に、当該Reduce処理タスクが分散処理の実行指示が付された高負荷Reduce処理タスクであるか否かを判定し、
    前記高負荷Reduce処理タスクであると判定された場合、前記高負荷Reduce処理タスクを分散処理で実行し、前記高負荷Reduce処理タスクではない通常のReduce処理タスクと判定された場合、前記通常のReduce処理タスクを分散させずに実行する
    処理を実行させることを特徴とするタスク実行プログラム。
  4. 前記マスタサーバから割り当てられた前記Map処理タスクの実行が完了した場合に、完了した前記Map処理タスクの処理結果を用いるReduce処理タスクに関するデータ量を含む完了結果を前記マスタサーバに送信する処理を、前記スレーブサーバにさらに実行させることを特徴とする請求項に記載のタスク実行プログラム。
  5. 前記実行する処理は、前記スレーブサーバが有するプロセッサの数、ディスクの数、予め指定された数の少なくとも1つを用いて、前記高負荷Reduce処理タスクをサブタスクに分割して、複数のプロセッサで並列実行させることを特徴とする請求項またはに記載のタスク実行プログラム。
  6. 前記実行する処理は、前記高負荷Reduce処理タスクではない通常のReduce処理タスクの実行中に前記高負荷Reduce処理タスクが割当てられた場合、前記通常のReduce処理タスクの実行を中止して、前記高負荷Reduce処理タスクを前記サブタスクに分割して実行することを特徴とする請求項に記載のタスク実行プログラム。
  7. 複数のMap処理タスクを含むMap処理および複数のReduce処理タスクを含むReduce処理を含むMapReduce処理の各タスクを複数のスレーブサーバに割当てるマスタサーバにおいて、
    前記複数のスレーブサーバ夫々に、前記複数のMap処理タスクを割り当てる割当部と、
    前記複数のMap処理タスクの全部が完了する前に、対象となる複数のMap処理タスクの実行結果を用いる前記複数のReduce処理タスク夫々が処理対象とするデータ量を、処理が完了した各Map処理タスクから送信される実行結果に含まれるデータ量に基づいて予測する予測部と、
    前記複数のReduce処理タスクを前記複数のスレーブサーバ夫々に割当てる際に、予測された前記データ量が閾値を超えるReduce処理タスクである高負荷Reduce処理タスクを割当てるスレーブサーバに、前記高負荷Reduce処理タスクの分散処理を指示する送信部と
    を有することを特徴とするマスタサーバ
  8. 複数のMap処理タスクを含むMap処理および複数のReduce処理タスクを含むReduce処理を含むMapReduce処理の各タスクを実行するスレーブサーバにおいて、
    前記各タスクの割当てを実行するマスタサーバからReduce処理タスクが割当てられた場合に、当該Reduce処理タスクが分散処理の実行指示が付された高負荷Reduce処理タスクであるか否かを判定する判定部と、
    前記高負荷Reduce処理タスクであると判定された場合、前記高負荷Reduce処理タスクを分散処理で実行し、前記高負荷Reduce処理タスクではない通常のReduce処理タスクと判定された場合、前記通常のReduce処理タスクを分散させずに実行する処理実行部と
    を有することを特徴とするスレーブサーバ
  9. 複数のMap処理タスクを含むMap処理および複数のReduce処理タスクを含むReduce処理を含むMapReduce処理の各タスクを複数のスレーブサーバに割当てるマスタサーバが、
    前記複数のスレーブサーバ夫々に、前記複数のMap処理タスクを割り当て、
    前記複数のMap処理タスクの全部が完了する前に、対象となる複数のMap処理タスクの実行結果を用いる前記複数のReduce処理タスク夫々が処理対象とするデータ量を、処理が完了した各Map処理タスクから送信される実行結果に含まれるデータ量に基づいて予測し、
    前記複数のReduce処理タスクを前記複数のスレーブサーバ夫々に割当てる際に、予測された前記データ量が閾値を超えるReduce処理タスクである高負荷Reduce処理タスクを割当てるスレーブサーバに、前記高負荷Reduce処理タスクの分散処理を指示する
    処理を実行することを特徴とするタスク割当方法。
JP2014043333A 2014-03-05 2014-03-05 タスク割当プログラム、タスク実行プログラム、マスタサーバ、スレーブサーバおよびタスク割当方法 Expired - Fee Related JP6357807B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2014043333A JP6357807B2 (ja) 2014-03-05 2014-03-05 タスク割当プログラム、タスク実行プログラム、マスタサーバ、スレーブサーバおよびタスク割当方法
US14/632,617 US20150254102A1 (en) 2014-03-05 2015-02-26 Computer-readable recording medium, task assignment device, task execution device, and task assignment method
EP15156783.1A EP2916221A1 (en) 2014-03-05 2015-02-26 Task assignment

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014043333A JP6357807B2 (ja) 2014-03-05 2014-03-05 タスク割当プログラム、タスク実行プログラム、マスタサーバ、スレーブサーバおよびタスク割当方法

Publications (2)

Publication Number Publication Date
JP2015170054A JP2015170054A (ja) 2015-09-28
JP6357807B2 true JP6357807B2 (ja) 2018-07-18

Family

ID=52596790

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014043333A Expired - Fee Related JP6357807B2 (ja) 2014-03-05 2014-03-05 タスク割当プログラム、タスク実行プログラム、マスタサーバ、スレーブサーバおよびタスク割当方法

Country Status (3)

Country Link
US (1) US20150254102A1 (ja)
EP (1) EP2916221A1 (ja)
JP (1) JP6357807B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9513957B2 (en) * 2013-05-21 2016-12-06 Hitachi, Ltd. Management system, management program, and management method
WO2017212504A1 (en) 2016-06-06 2017-12-14 Hitachi, Ltd. Computer system and method for task assignment
CN108965362B (zh) * 2017-05-19 2023-03-24 腾讯科技(深圳)有限公司 一种数据处理方法、服务器及存储介质
CN113094177B (zh) * 2021-04-21 2024-08-09 上海商汤科技开发有限公司 一种任务分发系统、方法、装置、计算机设备及存储介质

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8190610B2 (en) * 2006-10-05 2012-05-29 Yahoo! Inc. MapReduce for distributed database processing
US8726290B2 (en) * 2008-06-12 2014-05-13 Yahoo! Inc. System and/or method for balancing allocation of data among reduce processes by reallocation
US8510538B1 (en) * 2009-04-13 2013-08-13 Google Inc. System and method for limiting the impact of stragglers in large-scale parallel data processing
US8266289B2 (en) * 2009-04-23 2012-09-11 Microsoft Corporation Concurrent data processing in a distributed system
JP2012118669A (ja) * 2010-11-30 2012-06-21 Ntt Docomo Inc 負荷分散処理システム及び負荷分散処理方法
WO2012144985A1 (en) * 2011-04-19 2012-10-26 Hewlett-Packard Development Company, L.P. Scheduling map and reduce tasks of jobs for execution according to performance goals
JP6176111B2 (ja) * 2011-08-15 2017-08-09 日本電気株式会社 分散処理管理装置及び分散処理管理方法
US10860384B2 (en) * 2012-02-03 2020-12-08 Microsoft Technology Licensing, Llc Managing partitions in a scalable environment
US20130253888A1 (en) * 2012-03-22 2013-09-26 Microsoft Corporation One-pass statistical computations
JP5853866B2 (ja) * 2012-06-05 2016-02-09 富士通株式会社 割当プログラム、割当装置、および割当方法
WO2014020735A1 (ja) * 2012-08-02 2014-02-06 富士通株式会社 データ処理方法、情報処理装置およびプログラム
US9342355B2 (en) * 2013-06-20 2016-05-17 International Business Machines Corporation Joint optimization of multiple phases in large data processing

Also Published As

Publication number Publication date
JP2015170054A (ja) 2015-09-28
US20150254102A1 (en) 2015-09-10
EP2916221A1 (en) 2015-09-09

Similar Documents

Publication Publication Date Title
CA3021963C (en) Multi-cluster warehouse
JP6519111B2 (ja) データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置
JP5954074B2 (ja) 情報処理方法、情報処理装置、及びプログラム。
JP6233413B2 (ja) タスク割り当て判定装置、制御方法、及びプログラム
JP6357807B2 (ja) タスク割当プログラム、タスク実行プログラム、マスタサーバ、スレーブサーバおよびタスク割当方法
WO2012105056A1 (ja) 並列分散処理システムのデータ転送制御方法、並列分散処理システム及び記憶媒体
KR102372424B1 (ko) 원격 직접 메모리 접근을 통한 분산 처리 장치 및 그 방법
Garala et al. A performance analysis of load Balancing algorithms in Cloud environment
JP2017037492A (ja) 分散処理プログラム、分散処理方法および分散処理装置
US10164904B2 (en) Network bandwidth sharing in a distributed computing system
JP2016004328A (ja) タスク割当プログラム、タスク割当方法およびタスク割当装置
KR20200080458A (ko) 클라우드 멀티-클러스터 장치
JP2008226023A (ja) ジョブ割当装置、及びジョブ割当方法
JP5549189B2 (ja) 仮想マシン管理装置、仮想マシン管理方法、及び仮想マシン管理プログラム
JP2017191387A (ja) データ処理プログラム、データ処理方法およびデータ処理装置
KR101639947B1 (ko) 하둡 선점 데드라인 제약 스케줄링 방법 및 그 방법을 수행하는 컴퓨터프로그램과, 그 프로그램이 기록된 매체
US11893417B2 (en) Process request management apparatus, process request management method and program
Nzanywayingoma et al. Task scheduling and virtual resource optimising in Hadoop YARN-based cloud computing environment
CN107529696B (zh) 一种存储资源访问控制方法及装置
JP6445876B2 (ja) リソース割当装置、リソース割当システム、および、リソース割当方法
Liu et al. Cooperative job scheduling and data allocation for busy data-intensive parallel computing clusters
CN111459649B (zh) 管理计算资源的存储器的方法、设备和计算机可读介质
JP2021012464A (ja) 切替プログラム、装置、および方法
JP2008004125A (ja) 負荷制御方法および装置並びにその処理プログラム
JP6657703B2 (ja) 業務管理システム、管理装置、業務処理装置、業務管理方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161102

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170821

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170829

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171030

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180313

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180514

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180522

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180604

R150 Certificate of patent or registration of utility model

Ref document number: 6357807

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees