JP6519111B2 - データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置 - Google Patents

データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置 Download PDF

Info

Publication number
JP6519111B2
JP6519111B2 JP2014148139A JP2014148139A JP6519111B2 JP 6519111 B2 JP6519111 B2 JP 6519111B2 JP 2014148139 A JP2014148139 A JP 2014148139A JP 2014148139 A JP2014148139 A JP 2014148139A JP 6519111 B2 JP6519111 B2 JP 6519111B2
Authority
JP
Japan
Prior art keywords
reduce
task
processing
key
map
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.)
Active
Application number
JP2014148139A
Other languages
English (en)
Other versions
JP2016024612A (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 JP2014148139A priority Critical patent/JP6519111B2/ja
Priority to US14/790,368 priority patent/US9535743B2/en
Publication of JP2016024612A publication Critical patent/JP2016024612A/ja
Application granted granted Critical
Publication of JP6519111B2 publication Critical patent/JP6519111B2/ja
Active 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
    • 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/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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/5072Grid computing

Description

本発明は、データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置に関する。
クラウドコンピューティングの普及に伴い、クラウド上に保存される大量のデータを複数のサーバで分散して処理を実行する分散処理システムが利用されている。分散処理システムとしては、HDFS(Hadoop Distributed File System)とMapReduce処理とを基盤技術とするHadoop(登録商標)が知られている。
HDFSは、複数のサーバにデータを分散格納するファイルシステムである。MapReduceは、HDFS上のデータをタスクと呼ばれる単位で分散処理する仕組みであり、Map処理、Shuffleソート処理、Reduce処理を実行する。
MapReduceによる分散処理においては、複数のスレーブノードにMap処理やReduce処理のタスクが割り当てられて、各スレーブノードで分散して処理が実行される。例えば、マスタサーバが、複数のスレーブノードに対してMap処理のタスクを割り当てて、各スレーブノードが、割り当てられたMapタスクを実行する。各スレーブノードで実行されるPatitionerは、Mapタスクの中で、キーのハッシュ値を計算し、その計算で得られた値によって振分先のReduceタスクを決定する。
このようにスレーブノードに対するReduceタスクの割り当ては、ハッシュ関数等を用いることにより均等に行われるが、各Reduceタスクに対応する処理量は、Reduceタスクに対応するキー等に関連づけられたReduce対象のデータ量等により均等になるとは限らない。
例えば、各スレーブノードに振分キーが均等に振り分けられたとしても、Reduceタスクごとに処理量が異なる。つまり、Reduceタスクで処理する単位、すなわちReduceスロット間で処理時間が相違し、全体の処理時間が延びる場合がある。このように、各スレーブノードでの処理完了時間が異なるので、複数タスクからなるジョブ全体の完了が最も処理の遅いスレーブノードの処理完了に左右される。
このため、各スレーブノードに割り当てるReduceタスクを調整する技術として、例えば、入力データのサンプリング等によりキーの出現数を調査し、処理量の異なるReduceタスクを事前に割り当てる技術が知られている。
特開2012−190078号公報 国際公開第2010/114006号 特開2013−235515号公報
しかしながら、サンプリング等によりキーの出現数が既知であり、Reduceタスクの事前割り当てが適切であっても、キーに対応するデータをReduceタスクで処理する際の処理時間が種々の要因により相違する場合がある。この場合、Reduceスロット間で処理時間が相違し、全体の処理時間が延びる状況が生じる。
また、入力データの調査時間を短縮するために、サンプリングや過去のデータの利用によるキーの出現数の推測を行う場合、推測から生じる偏りや推測時には含まれないキーに対する対応により、処理時間が延びる状況が生じる。
1つの側面では、処理時間を短縮することができるデータ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置を提供することを目的とする。
第1の案では、データ処理制御装置は、MapReduce処理におけるデータ処理制御方法を実行する。データ処理制御装置は、Map処理の結果を用いて実行される第1のReduceタスクおよび第2のReduceタスクに入力データを割り当てる際に、前記第1のReduceタスクのいずれよりも少ない量の入力データを前記第2のReduceタスクに割り当てる。データ処理制御装置は、前記第2のReduceタスクが前記第1のReduceタスクのいずれよりも後に開始されるように、前記入力データが割り当てられた前記第1のReduceタスクおよび前記第2のReduceタスクを、前記MapReduce処理におけるReduce処理を実行するサーバに割り当てる。
1つの側面では、処理時間を短縮することができる。
図1は、実施例1に係る分散処理システムの全体構成例を示す図である。 図2は、Hadoopの仕組みを説明する図である。 図3は、Map処理を説明する図である。 図4は、Shuffle処理を説明する図である。 図5は、Reduce処理を説明する図である。 図6は、管理サーバの機能構成を示す機能ブロック図である。 図7は、サンプリング結果テーブルに記憶される情報の例を示す図である。 図8は、パーティションテーブルに記憶される情報の例を示す図である。 図9は、マスタノードの機能構成を示す機能ブロック図である。 図10は、ジョブリストDBに記憶される情報の例を示す図である。 図11は、タスクリストDBに記憶される情報の例を示す図である。 図12は、スレーブノードの機能構成を示す機能ブロック図である。 図13は、割当確定テーブルに記憶される情報の例を示す図である。 図14は、パーティションテーブルの生成処理の流れを示すフローチャートである。 図15は、キーの振分け先のReduceタスクを決定する処理の流れを示すフローチャートである。 図16は、マスタノードが実行する処理の流れを示すフローチャートである。 図17は、スレーブノードが実行する処理の流れを示すフローチャートである。 図18は、Map処理の流れを示すフローチャートである。 図19は、Reduceタスクの割当による処理時間の短縮例を説明する図である。 図20は、Reduceタスクのデータ転送の短縮例を説明する図である。 図21は、装置のハードウェア構成例を示す図である。
以下に、本願の開示するデータ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。各実施例は、矛盾のない範囲内で適宜組み合わせることができる。
[全体構成]
図1は、実施例1に係る分散処理システムの全体構成例を示す図である。図1に示すように、この分散処理システムは、マスタノード30、複数のスレーブノード50がネットワーク1を介して互いに通信可能に接続される。
この分散処理システムでは、Hadoop(登録商標)などの分散処理フレームワークを使用した分散処理アプリケーションが各サーバで実行されており、データ基盤としてHDFSなどを使用する。
マスタノード30は、分散処理システムを統括的に管理するサーバであり、MapReduce処理におけるジョブトラッカーとして機能する。例えば、マスタノード30は、メタ情報などを用いて、どのデータがいずれのスレーブノード50に格納されているのかを特定する。また、マスタノード30は、各スレーブノード50に割当てるタスクやジョブなどを管理し、Map処理やReduce処理などのタスクをスレーブノード50に割当てる。
このマスタノード30には管理サーバ10が接続される。管理サーバ10は、Redcuceタスクの割当に関するルール等を生成して、各ノードに配布するサーバである。ここでは、管理サーバ10がマスタノード30に接続される例を説明するが、これに限定されるものではなく、管理サーバ10はいずれかのスレーブノード50に接続されていてもよく、各ノードに接続されていてもよい。また、管理サーバ10の機能をマスタノード30やスレーブノード50が有していてもよい。
各スレーブノード50は、Map処理およびReduce処理を実行するサーバであり、MapReduce処理におけるデータノードやタスクトラッカー、ジョブクライアントとして機能する。また、各スレーブノード50は、マスタノード30によって割り当てられたMapタスクを実行し、Mapタスクの中でキーのハッシュ値を計算し、その計算で得られた値によって振分先のReduceタスクを決定する。その後、各スレーブノード50は、マスタノード30に割り当てられたReduceタスクを実行する。
ここで、各スレーブノード50が実行するMapタスク、Reduceタスクについて説明する。図2は、Hadoopの仕組みを説明する図である。
図2に示すように、MapReduce処理は、MapタスクとReduceタスクから構成されMapタスクは、Map処理から構成され、ReduceタスクはShuffle処理とReduce処理とから構成される。マスタノード30は、MapタスクキューとReduceタスクキューを有し、スレーブノード50に対して、MapタスクやReduceタスクの割り当てを行う。
各スレーブノード50は、少なくとも1つのMapスロットと少なくとも1つのReduceスロットを有する。各スレーブノード50は、1つのMapスロット内でMapアプリとPartitonerを実行する。Mapアプリは、ユーザが所望する処理を実行するアプリケーションであり、Partitonerは、Mapアプリの実行結果によって振分先のReduceタスクを決定する。
さらに、各スレーブノード50は、1つのReduceスロット内でSort処理とReduceアプリとを実行する。Sort処理は、割り当てられたReduceタスクに使用するデータを各スレーブノード50から取得してソートし、ソートした結果をReduceアプリに入力する。Reduceアプリは、ユーザが所望する処理を実行するアプリケーションである。このようにして各スレーブノード50が実行した結果を収集して出力結果が得られる。
ここで、Map処理、Shffule処理、Reduce処理の一例を説明する。なお、ここで示す処理や入力データはあくまで一例であり、処理を限定するものではない。
(Map処理)
図3は、Map処理を説明する図である。図3に示すように、各スレーブノード50は、入力データとして「Hello Apple!」と「Apple is red」を受信し、それぞれの入力データに対してMap処理を実行して、「キー、Value」のペアを出力する。
図3の例では、スレーブノード50は、「Hello Apple!」に対してMap処理を実行して、入力データの各要素の数を計数し、要素を「キー」、計数結果を「Value」とする「キー、Value」のペアを出力する。具体的には、スレーブノード50は、入力データ「Hello Apple!」から「Hello、1」、「Apple、1」、「!、1」を生成する。同様に、スレーブノード50は、入力データ「Apple is red」から「Apple、1」、「is、1」、「red、1」を生成する。
(Shuffle処理)
図4は、Shuffle処理を説明する図である。図4に示すように、各スレーブノード50は、各スレーブノードからMap処理結果を取得してShuffle処理を実行する。
図4の例では、スレーブノード(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処理)
次に、スレーブノード50が実行するReduce処理について説明する。図5は、Reduce処理を説明する図である。図5に示すように、各スレーブノード50は、各スレーブノードの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」を生成する。
このような状態において、管理サーバ10は、Map処理の結果を用いて実行される通常のReduceタスクおよびスペアReduceタスクに入力データを割り当てる際に、通常のReduceタスクのいずれよりも少ない量の入力データをスペアReduceタスクに割り当てる。マスタノード30は、スペアReduceタスクが通常のReduceタスクのいずれよりも後に開始されるように、入力データが割り当てられた通常のReduceタスクおよびスペアReduceタスクを、MapReduce処理におけるReduce処理を実行するスレーブノード50に割り当てる。
したがって、実施例1に係る分散処理システムは、スペアのReduceタスクを設け、出現数の少ないキーやサンプルに含まれなかったキーを割り当て、通常のReduceタスクよりも後に処理を実行させる。この結果、各タスクの実行時間が平準化され、処理を短縮できる。
[管理サーバの機能構成]
図6は、管理サーバの機能構成を示す機能ブロック図である。図6に示すように、管理サーバ10は、通信制御部11、記憶部12、制御部15を有する。
通信制御部11は、マスタノード30との通信を制御する処理部であり、例えばネットワークインタフェースカードなどである。この通信制御部11は、制御部15によって生成された割当てルールなどをマスタノード30に送信する。
記憶部12は、制御部15が実行するプログラムや各種データを記憶する記憶部であり、例えばハードディスクやメモリなどである。この記憶部12は、サンプリング結果テーブル13とパーティションテーブル14を記憶する。なお、本実施例において、管理サーバ10は、Reduceタスクとして5つ設定可能であり、そのうち1つをスペアReduceタスクに設定することを示す情報を記憶部12等に予め記憶する。なお、この情報は、各スレーブノード50のPartitionerが最低限保持していればよい。
サンプリング結果テーブル13は、入力データにおけるキーの出現数のサンプリング結果を記憶する。図7は、サンプリング結果テーブルに記憶される情報の例を示す図である。図7に示すように、サンプリング結果テーブル13は、「主キー、出現数」を対応付けて記憶する。
ここで記憶される「主キー」は、入力データに含まれるキーを特定する情報であり、「出現数」は、当該主キーが入力データに登場する数である。図7は、入力データをサンプリングした結果、A銀行が100回、B銀行が80回、C銀行が60回、D銀行が30回、E銀行が20回登場したことを示す。
パーティションテーブル14は、Reduceタスクの振分先に関する情報を記憶する。図8は、パーティションテーブルに記憶される情報の例を示す図である。図8に示すように、パーティションテーブル14は、「ReduceID、処理するキー、合計件数」を対応付けて記憶する。ここで記憶される「ReduceID」は、主キーを処理するReduceタスクを特定する情報であり、合計件数が多い順に割り与えられる。「処理するキー」は、Reduceタスクで処理対象となるキーであり、「合計件数」は、サンプリング結果で得られたキーの出現数である。
図8の例では、ReduceID=0のReduceタスクには、サンプリング時に合計件数が100件であったキー(A銀行)が割り与えられ、ReduceID=1のReduceタスクには、サンプリング時に合計件数が80件であったキー(B銀行)が割り与えられたことを示す。同様に、ReduceID=2のReduceタスクには、サンプリング時に合計件数が60件であったキー(C銀行)が割り与えられ、ReduceID=3のReduceタスクには、サンプリング時に合計件数が30件と20件であったキー(D銀行とE銀行)が割り与えられたことを示す。
制御部15は、管理サーバ10全体の処理を司る処理部であり、例えばプロセッサなどである。この制御部15は、サンプリング実行部16、実行数取得部17、割合決定部18、タスク決定部19、テーブル配布部20を有する。なお、サンプリング実行部16、実行数取得部17、割合決定部18、タスク決定部19、テーブル配布部20は、プロセッサが有する電子回路の一例やプロセッサが実行するプロセスの一例である。
サンプリング実行部16は、入力データをサンプリングしてキーの出現数を調査する処理部である。具体的には、サンプリング実行部16は、入力データの所定数を参照して、登場するキーおよび当該キーの出現数を取得して、サンプリング結果テーブル13に格納する。なお、サンプリングするタイミングは、例えばMap処理の開始前でもよく、Map処理において入力データの読み出しが実行されるタイミングでもよく、任意に設定できる。
実行数取得部17は、実行環境の並列実行数を取得する処理部である。具体的には、実行数取得部17は、各スレーブノード50から、各スレーブノード50に予め設定されているReduceスロットの数を取得する。
割合決定部18は、スペアReduceタスクを除くReduceタスクに割り当てるキーの割合を決定する処理部である。具体的には、割合決定部18は、サンプリング結果テーブル13に記憶される主キー情報、実行数取得部17によって取得された並列実行数、並列実行可能なReduceタスクの数等を用いて、Reduceタスクに詰め合わせるキーの割合を決定する。
例えば、割合決定部18は、BinPackingなどのアルゴリズムが対象とするキーの割合を、主キーの数がReduceタスクの数以下の場合は割合(rate)=0.99とし、主キーの数がReduceタスクよりも多い場合は割合(rate)=1−1/Reduceタスク数とする。
一例として、図7のサンプリング結果、Reduceタスクが5つ(1つはスペアReduceタスク)を例にして説明する。この場合、割合決定部18は、図7の主キーが5個であり、通常のReduceタスクが4つであることから、「割合(rate)=1−1/通常のReduceタスク数=0.75」と算出する。なお、主キーが5個であり、Reduceタスクが5つ以上である場合、割合決定部18は、「割合(rate)=0.99」と決定する。
また、割合決定部18は、例えば主キーの種類数が並列実行数よりも少ない場合もしくは主キーの種類数が並列実行数以下の場合は、割合を0.99に設定し、主キーの種類数が並列実行数よりも多い場合は、上記処理を実行することもできる。
タスク決定部19は、割合決定部18によって割合を用いて、Reduceタスクにキーを割り当てる処理部である。具体的には、タスク決定部19は、まず、Reduceタスクに割り当てる件数の閾値を算出し、次に、各Reduceタスクへのキーの割当ルールを作成する。
例えば、図7のサンプリング結果、通常のReduceタスクが4つ、割合(rate)が0.99とした例で説明する。まず、タスク決定部19は、サンプリング結果の主キーの合計である「totalRecord」を「290」と算出し、totalRecord(290)×割合(0.9)=261を閾値として算出する。
次に、タスク決定部19は、Reduceタスクが4つあることから、ReduceID=0、1、2、3に設定する。そして、タスク決定部19は、割当てられた合計件数が最小でReduceIDの値が最小であるReduceID=0のタスクに、最も件数の多いキー(A銀行)を割り当て、「ReduceID、処理するキー、合計件数」=「0、A銀行、100」を設定する。
続いて、タスク決定部19は、割り当て済み合計件数が100であり、閾値261を超えていないことから割当てを続行し、例えば割り当て済み合計件数が261以上である場合、割当てを終了する。具体的には、タスク決定部19は、割当てられた合計件数が最小でReduceIDの値が最小であるReduceID=1のタスクに、未割当のキーのうち最も件数の多いキー(B銀行)を割り当て、「ReduceID、処理するキー、合計件数」=「1、B銀行、80」を設定する。
同様に、タスク決定部19は、ここまでの割り当て済み合計件数が180であり、閾値261を超えていないことから、割当てを続行する。具体的には、タスク決定部19は、割当てられた合計件数が最小でReduceIDの値が最小であるReduceID=2のタスクに、未割当のキーのうち最も件数の多いキー(C銀行)を割り当て、「ReduceID、処理するキー、合計件数」=「2、C銀行、60」を設定する。
同様に、タスク決定部19は、ここまでの割り当て済み合計件数が240であり、閾値261を超えていないことから、割当てを続行する。具体的には、タスク決定部19は、割当てられた合計件数が最小でReduceIDの値が最小であるReduceID=3のタスクに、未割当のキーのうち最も件数の多いキー(D銀行)を割り当て、「ReduceID、処理するキー、合計件数」=「3、D銀行、30」を設定する。
同様に、タスク決定部19は、ここまでの割り当て済み合計件数が260であり、閾値261を超えていないことから、割当てを続行する。具体的には、タスク決定部19は、割当てられた合計件数が最小でReduceIDの値が最小であるReduceID=3のタスクに、未割当のキー(E銀行)を割り当てる。そして、タスク決定部19は、「ReduceID、処理するキー、合計件数」=「3、E銀行、20」を追加し、「ReduceID、処理するキー、合計件数」=「3、D銀行+E銀行、50(30+20)」と設定する。
ここで、タスク決定部19は、ここまでの割り当て済み合計件数が280であり、閾値261を超えたことから、割当てを終了する。このようにして、タスク決定部19は、Reduceタスクの割当ルールとして、図8に示したパーティションテーブル14を生成することができる。
テーブル配布部20は、パーティションテーブル14をマスタノード30に配布する処理部である。具体的には、テーブル配布部20は、タスク決定部19から処理が終了したことが通知されると、タスク決定部19が生成して記憶部12に格納したパーティションテーブル14を読み出して、マスタノード30に配布する。
[マスタノードの機能構成]
図9は、マスタノードの機能構成を示す機能ブロック図である。図9に示すように、マスタノード30は、通信制御部31、記憶部32、制御部40を有する。
通信制御部31は、管理サーバ10や各スレーブノード50との通信を制御する処理部であり、例えばネットワークインタフェースカードなどである。この通信制御部31は、管理サーバ10からパーティションテーブル14などを受信し、マスタノード30に送信する。
記憶部32は、制御部40が実行するプログラムや各種データを記憶する記憶部であり、例えばハードディスクやメモリなどである。この記憶部32は、パーティションテーブル33、ジョブリストDB34、タスクリストDB35を記憶する。
パーティションテーブル33は、管理サーバ10が送信したパーティションテーブル14を記憶する。このパーティションテーブル33は、図8で説明したパーティションテーブル14と同様なので詳細な説明を省略する。
ジョブリストDB34は、分散処理対象のジョブ情報を記憶するデータベースである。図10は、ジョブリストDBに記憶される情報の例を示す図である。図10に示すように、ジョブリストDB34は、「JobID、総Mapタスク数、総Reduceタスク数、スペアReduceタスク数」を対応付けて記憶する。
ここで記憶される「JobID」は、ジョブを識別する識別子である。「総Mapタスク数」は、ジョブに含まれるMap処理タスクの総数である。「総Reduceタスク数」は、ジョブに含まれるReduce処理タスクの総数である。「スペアReduceタスク数」は、総Reduceタスク数のうちスペアReduceタスクに使用されるタスクの数である。なお、「JobID、総Mapタスク数、総Reduceタスク数、スペアReduceタスク数」は、管理者等によって設定更新される。
図10の例では、「JobID」が「Job001」のジョブは、6つのMap処理タスクと5つのReduce処理タスクで構成され、1つがスペアReduceタスクに用いられることを示す。同様に、「JobID」が「Job002」のジョブは、4つのMap処理タスクと2つのReduce処理タスクで構成され、1つがスペアReduceタスクに用いられることを示す。
タスクリストDB35は、Map処理タスクやReduce処理タスクに関する情報を記憶するデータベースである。図11は、タスクリストDBに記憶される情報の例を示す図である。図11に示すように、タスクリストDB35は、「JobID、TaskID、種別、データのあるスレーブID、状態、割り当てスレーブID、必要スロット数」を記憶する。
ここで記憶される「JobID」は、ジョブを識別する識別子である。「TaskID」は、タスクを識別する識別子である。「種別」は、Map処理やReduce処理を示す情報である。「データのあるスレーブID」は、Map処理対象のデータを保持するスレーブノードを識別する識別子であり、例えばホスト名などである。「状態」は、該当タスクが処理完了(Done)状態、実行中(Running)、割り当て前(Not assigned)のいずれであるかを示す。
「割当スレーブID」は、タスクが割当てられたスレーブノードを識別する識別子であり、例えばホスト名などである。「必要スロット数」は、タスクを実行するのに使用するスロット数である。
図11の場合、「JobID」が「Job001」であるジョブで、1スロットを用いるMap処理タスク「Map000」が「Node1」のスレーブノード50に割当てられる。そして、この「Node1」のスレーブノード50は、「Node1」のスレーブノードと「Node2」のスレーブノードとからデータを取得して、Map処理を実行し、実行が完了していることを示す。
また、「JobID」が「Job001」であるジョブで、1スロットを用いて実行されるReduce処理タスク「Reduce002」が、Partionerによる割り当て前であることを示す。
なお、JobID、TaskID、種別については、ジョブリストDB34に記憶される情報にしたがって生成される。データのあるスレーブIDは、メタ情報等により特定することができる。状態は、タスクの割り当て状況やスレーブノード50からの処理結果等によって更新される。割当スレーブIDは、タスクの割当時点で更新される。必要スロット数は、1タスクについて1スロットなどのように予め指定することができる。
制御部40は、マスタノード30全体の処理を司る処理部であり、配布部41、Map割当部42、Reduce割当部43を有する。制御部40は、例えばプロセッサなどの電子回路であり、配布部41、Map割当部42、Reduce割当部43は、電子回路の一例や制御部40が実行するプロセスの一例である。
配布部41は、管理サーバ10からパーティションテーブル33を受信して記憶部32に格納し、各スレーブノード50に配布する処理部である。この処理により、管理サーバ10が生成したパーティションテーブル14、すなわちReduceタスクの割当ルールが各ノードで共有に保存される。
Map割当部42は、各ジョブにおけるMap処理のタスクであるMapタスクをスレーブノード50のMapスロットに割当てる処理部である。そして、Map割当部42は、図11に示した「割当スレーブID」や「状態」等を更新する。
一例を挙げると、Map割当部42は、スレーブノード50等からMapタスクの割当要求を受信した場合に、タスクリストDB35を参照して「状態」が「Not assigned」のMapタスクを特定する。続いて、Map割当部42は、割当要求を送信したスレーブノード50のIDが「データのあるスレーブID」に含まれるMapタスクがあればそのMapタスクを優先して選ぶ。Map割当部42は、そのようなMapタスクがなければ任意の方法でMapタスクを選び、割当対象のMapタスクとする。その後、Map割当部42は、割当要求を送信したスレーブノード50のIDを、割当対象のMapタスクの「割当スレーブID」に格納する。
その後、Map割当部42は、特定した割当先のスレーブノード50に、TaskID、データのあるスレーブID、必要スロット数等を通知して、Mapタスクを割当てる。また、Map割当部42は、割当てたMapタスクの「状態」を「Not assigned」から「Running」に更新する。
Reduce割当部43は、Reduceタスクをスレーブノード50のReduceスロットに割り当てる処理部である。具体的には、Reduce割当部43は、パーティションテーブル33に記憶されるReduceタスクの割当ルールや管理するスペアReduceタスクの数等にしたがって、各ReduceタスクをReduceスロットに割り当てる。割り当てに伴って、Reduce割当部43は、タスクリストDB35を随時更新する。つまり、Reduce割当部43は、Reduceタスク(ReduceID)とスレーブノード50との対応付けを実行し、ハッシュ値ではなく主キーによる割り当てを実行する。
例えば、Reduce割当部43は、パーティションテーブル33のうちReduceIDが小さい順にReduceタスクをReduceスロットに割り当てる。このとき、例えば、Reduce割当部43は、任意のReduceスロットに割り当ててもよく、Map処理が終わっているReduceスロットを優先して割当ててもよい。
ここで、図8と同様の情報を記憶するパーティションテーブル33であり、割当て対象のReduceタスクが4つ、スペアReduceタスクが1つ、Reduceスロットが3つ、各スレーブノードが1つのReduceスロットを有する場合を例にして説明する。
この場合、Reduce割当部43は、Reduceタスクが5つでReduceスロットが3つあることから、Reduce=0のReduceタスク、Reduce=1のReduceタスク、Reduce=2のReduceタスクを各スレーブノード50に割り当てる。その後、Reduce割当部43は、いずれかのスレーブノード50のReduceタスクが終了すると、未割当のReduce=3のReduceタスクを当該スレーブノード50に割り当てる。
さらに、Reduce割当部43は、いずれかのスレーブノード50のReduceタスクが終了すると、未割当のスペアReduceタスクを当該スレーブノード50に割り当てる。なお、Reduce割当部43は、スペアReduceタスク含むReduceタスクのReduceIDと処理対象のキーとを対応付けた情報について、いずれかのスレーブノード50から取得してもよく、自装置内で判断することもできる。
例えば、ReduceIDが1つずつ増加するIDである場合、Reduce割当部43は、5つのタスクのうち通常のReduceタスクが4つ、スペアReduceタスクが1つであるので、スペアReduceタスクのReduceIDが4であることを特定できる。したがって、Reduce割当部43は、Reduceタスクが終了したスレーブノード50に、ReduceID=4のスペアReduceタスクを割り当てることもできる。
このように、Reduce割当部43は、ReduceIDが小さいReduceタスク、すなわち出現数の多いReduceタスクから順に、各スレーブノード50のReduceスロットに割り当てていき、最後にスペアReduceタスクを割り当てる。この結果、スペアReduceタスクは、通常のReduceタスクのいずれよりも後に開始される。
[スレーブノードの構成]
図12は、スレーブノードの機能構成を示す機能ブロック図である。図12に示すように、スレーブノード50は、通信制御部51と、記憶部52と、制御部60とを有する。
通信制御部51は、マスタノード30や他のスレーブノード50などと通信を実行する処理部であり、例えばネットワークインタフェースカードなどである。例えば、通信制御部51は、マスタノード30から各種タスクの割当やパーティションテーブル33を受信し、各種タスクの完了通知を送信する。また、通信制御部51は、各種タスク処理の実行に伴って、該当するスレーブノード50から読み出されたデータを受信する。
記憶部52は、制御部60が実行するプログラムや各種データを記憶する記憶部であり、例えばハードディスクやメモリなどである。この記憶部52は、パーティションテーブル53、割当確定テーブル54を記憶する。また、記憶部52は、各種処理の実行時にデータを一時的に記憶する。さらに、記憶部52は、Map処理の入力およびReduce処理の出力を記憶する。
パーティションテーブル53は、マスタノード30が送信したパーティションテーブル33を記憶する。このパーティションテーブル53は、図8で説明したパーティションテーブル14と同様なので詳細な説明を省略する。
割当確定テーブル54は、Reduceタスクとキーの対応付けを記憶するデータベースである。具体的には、割当確定テーブル54は、通常の各Reduceタスクと処理対象のキーの対応付け、および、スペアReduceタスクと処理対象のキーの対応付けを記憶する。図13は、割当確定テーブルに記憶される情報の例を示す図である。図13に示すように、割当確定テーブル54は、「ReduceID、処理するキー」を対応付けて記憶する。なお、ReduceIDおよび処理するキーは、図6と同様の項目なので詳細な説明は省略する。
図13の例では、ReduceID=0のReduceタスクがキー(A銀行)を処理するタスクであることを示し、ReduceID=1のReduceタスクがキー(B銀行)を処理するタスクであることを示す。また、ReduceID=2のReduceタスクがキー(C銀行)を処理するタスクであることを示し、ReduceID=3のReduceタスクがキー(D銀行+E銀行)を処理するタスクであることを示す。
さらに、ReduceID=4のReduceタスクがスペアReduceタスクであり、キー(F銀行)を処理するタスクであることを示す。なお、スペアReduceタスクへのキーの割り当てについては後述する。
制御部60は、スレーブノード50全体の処理を司る処理部であり、取得部61、Map処理部62、Reduce処理部63を有する。制御部60は、例えばプロセッサなどの電子回路であり、取得部61、Map処理部62、Reduce処理部63は、電子回路の一例や制御部60が実行するプロセスの一例である。
取得部61は、マスタノード30からパーティションテーブル33を取得して、記憶部52に格納する処理部である。例えば、取得部61は、MapReduce処理の開始タイミングや予め設定されたタイミング、もしくはマスタノード30からプッシュ式で送信されたパーティションテーブル33を取得する。
Map処理部62は、Mapアプリ実行部62aとReduce割当部62bを有し、これらによって、マスタノード30から割り当てられたMapタスクを実行する。
Mapアプリ実行部62aは、ユーザが指定した処理に対応するMapアプリケーションを実行する処理部である。具体的には、Mapアプリ実行部62aは、ハートビートなどを用いて、マスタノード30にMapタスクの割当を要求する。このとき、Mapアプリ実行部62aは、スレーブノード50の空きスロット数も通知する。そして、Mapアプリ実行部62aは、マスタノード30から、「TaskID、データのあるスレーブID、必要スロット数」などを含むMap割当情報を受信する。
その後、Mapアプリ実行部62aは、受信したMap割当情報にしたがって、「データのあるスレーブID」で特定されるスレーブノード50が処理を行っているスレーブノードであれば、記憶部52からデータを取得する。そうでなければ、Mapアプリ実行部62aは、「データのあるスレーブID」で特定されるスレーブノード50からデータを取得して記憶部52等に保存する。その後、Mapアプリ実行部62aは、「必要スロット数」で指定されるスロット数を用いてMap処理を実行する。
例えば、Mapアプリ実行部62aは、割り当てられたMapタスクの処理対象データを1つずつ、保存先のスレーブノード50から取得して該当処理を実行する。そして、Mapアプリ実行部62aは、処理した結果をReduce割当部62bに出力する。また、Mapアプリ実行部62aは、処理対象の入力データすべてに処理を実行した場合、すなわちMapタスクの実行を完了した場合、実行の完了通知をマスタノード30に通知する。
Reduce割当部62bは、Reduceタスク(ReduceID)と処理対象のキーとの対応付けを実行する処理部である。具体的には、Reduce割当部62bは、管理サーバ10が生成したパーティションテーブル53に記憶されるReduceタスクの割当ルールを確定し、スペアReduceタスクの割当ルールの生成および確定を実行する。なお、Reduce割当部62bは、確定した割当ルールをマスタノード30に送信することもできる。
例えば、Reduce割当部62bは、Mapアプリ実行部62aから入力された処理結果のキーを取得し、取得したキーがパーティションテーブル53に記憶されているか否かを判定する。そして、Reduce割当部62bは、処理結果のデータのキーがパーティションテーブル53に記憶されている場合、当該キーとReduceIDとの組み合わせを確定して割当確定テーブル54に格納する。
一方、Reduce割当部62bは、処理結果のデータのキーがパーティションテーブル53に記憶されていない場合、スペアReduceタスクの数を使用して当該キーのハッシュ値を計算し、スペアReduceタスクの割当ルールを生成して割当確定テーブル54に格納する。本実施例では、スペアReduceタスクが1つであることからハッシュ値は4となる。このハッシュ値は、ReduceタスクやスペアReduceタスクの数が予め決まっていることから、各スレーブノード50で同じ値となる。
一例を挙げると、Reduce割当部62bは、Mapアプリ実行部62aから入力された処理結果のキーがA銀行である場合、A銀行とReduceID=0とが対応付けられていることから、この組み合わせをReduceタスクの処理内容として確定する。一方、Reduce割当部62bは、Mapアプリ実行部62aから入力された処理結果のキーがF銀行である場合、F銀行に対応するReduceIDがパーティションテーブル53に存在しないことから、F銀行のハッシュ値「4」とキー(F銀行)との組み合わせをスペアReduceタスクの処理内容として確定する。
Reduce処理部63は、Shuffle処理部63aとReduceアプリ実行部63bを有し、これらによってReduceタスクを実行する処理部である。このReduce処理部63は、マスタノード30から割り当てられたReduceタスクを実行する。
Shuffle処理部63aは、Map処理の結果をキーでソートし、同じキーを有するレコード(データ)をマージして、Reduceタスクの処理対象を生成する処理部である。具体的には、Shuffle処理部63aは、マスタノード30からMap処理が終了したことを通知されると、当該Map処理が属するジョブのReduceタスクを実行する準備として、各スレーブノード50から該当するMap処理結果を取得する。そして、Shuffle処理部63aは、Map処理の結果を予め指定されたキーでソートし、同じキーを有する処理結果をマージして、記憶部52に格納する。
例えば、Shuffle処理部63aは、「JobID」が「Job001」のMapタスクである「Map000、Map001、Map002、Map003」が終了したこと、つまり、「JobID」が「Job001」のReduce処理タスクの実行開始をマスタノード30から受信する。すると、Shuffle処理部63aは、Node1、Node2、Node3、Node4等からMap処理結果を取得する。続いて、Shuffle処理部63aは、Map処理結果のソートおよびマージを実行して記憶部52等に格納する。
Reduceアプリ実行部63bは、ユーザが指定した処理に対応するReduceアプリケーションを実行する処理部である。具体的には、Reduceアプリ実行部63bは、マスタノード30から割当てられたReduceタスクを実行する。
例えば、Reduceアプリ実行部63bは、「JobID、TaskID、必要スロット数」などから構成されるReduceタスクの情報を受信する。そして、Reduceアプリ実行部63bは、受信した情報を記憶部52等に格納する。その後、Reduceアプリ実行部63bは、各スレーブノード50から該当データを取得してReduceアプリケーションを実行し、その結果を記憶部52に格納する。なお、Reduceアプリ実行部63bは、Reduceタスクの結果をマスタノード30に送信してもよい。
[処理の流れ]
次に、本実施例の分散処理システムが実行する処理の流れを説明する。
(パーティションテーブルの生成処理)
図14は、パーティションテーブルの生成処理の流れを示すフローチャートである。この処理は、管理サーバ10が実行する。
図14に示すように、管理サーバ10の実行数取得部17は、主キーを用いた振分け機能が有効であるか否かを判定する(S101)。例えば、実行数取得部17は、ユーザの手動設定がされているか否か、または、主キーの数が主キーによる振分効果が期待できる所定数以上か否かを判定する。
そして、実行数取得部17は、主キーを用いた振分け機能が有効である場合(S101:Yes)、実行環境の並列実行数情報を取得する(S102)。例えば、実行数取得部17は、タスクトラッカーやジョブクライアントとして機能する各スレーブノード50から、Reduceスロットの数を取得する。また、実行数取得部17は、管理者等により予め指定されるReduceタスクの数等を取得する。
続いて、割合決定部18は、BinPacking等により詰め合わせるキーの割合を決定する(S103)。例えば、割合決定部18は、サンプリング結果テーブル13に記憶される主キー情報や並列実行可能なReduceタスクの数等を用いて、Reduceタスクに詰め合わせるキーの割合を決定する。
そして、タスク決定部19は、決定した割合だけキーの振分け先のReduceタスクを決定する(S104)。例えば、タスク決定部19は、Reduceタスクに割り当てる件数の閾値を算出し、次に、各Reduceタスクへのキーの割当ルールを作成する。
その後、テーブル配布部20は、決定したキーと振分け先のReduceタスクの関係をパーティションテーブルファイルとして各スレーブノード50に配布する(S105)。例えば、テーブル配布部20は、生成されたパーティションテーブル14を、マスタノード30を介して各スレーブノード50に配布する。
そして、管理サーバ10の制御部15は、割当て方を制御したMapReduceジョブを実行する(S106)。例えば、管理サーバ10は、パーティションテーブル14を用いてReduce処理を実行する指示を含む、MapReduceジョブの実行をマスタノード30に送信する。
一方、S101において主キーを用いた振分け機能が有効ではない場合(S101:No)、管理サーバ10の制御部15は、割当てにハッシュ値を使うMapReduceジョブを実行する(S107)。つまり、管理サーバ10は、一般的なMapReduceジョブの実行をマスタノード30に送信する。
(Reduceタスクの決定処理)
図15は、キーの振分け先のReduceタスクを決定する処理の流れを示すフローチャートである。この処理は、図14のS104に該当する。
図15に示すように、管理サーバ10のタスク決定部19は、サンプリング結果の主キー情報に含まれる各キーの件数から、キーの出現数の合計値(totalRecord)を求める(S201)。例えば、タスク決定部19は、サンプリング結果の各キーの出現数を合算する。
続いて、タスク決定部19は、BinPackingによって詰め合わせる割合(rate)から、制御するキーの出現数の閾値を「totalRecord×rate」で求める(S202)。例えば、タスク決定部19は、S201で得られた合計値(totalRecord)とS103で算出した割合とを乗算する。
その後、タスク決定部19は、各Reduceタスクの中から、詰め合わせたキーが最も少ないReduceタスクのIDを調べる(S203)。例えば、タスク決定部19は、パーティションテーブル14を参照して、割り当てられたキーの件数が最小のReduceタスクのID(ReduceID)を特定する。
そして、タスク決定部19は、特定したReduceIDに対応するReduceタスクに対して、キーを割り当て、そのReduceタスクに詰め合わせたキーの数を更新する(S204)。例えば、タスク決定部19は、ReduceIDに新たに割り当てたキーの出現数と、当該ReduceIDに既に割り当てられているキーの出現数とを合算する。
その後、タスク決定部19は、詰め合わせたキーの数が閾値を超えた場合(S205:Yes)、処理を終了し、詰め合わせたキーの数が閾値を超えない場合(S205:No)、S203以降を繰り返す。例えば、タスク決定部19は、各Reduceタスクに割り当て済みの全キーの出現数の合算値がS202で算出した閾値を超える場合は、割当てを終了し、超えない場合、閾値を超えるまで新たな割り当てを実行する。
(マスタノードの処理)
図16は、マスタノードが実行する処理の流れを示すフローチャートである。この処理は、なお、ここで説明する処理の流れはあくまで一例であり、例えば各タスクの割当、Map処理、Reduce処理は、MapReduceの制約の中において矛盾がない範囲内で並列に実行することができる。
図16に示すように、処理が開始されると(S301:Yes)、マスタノード30のMap割当部42は、Mapタスクを各スレーブノード50に割り当てる(S302)。
その後、Map割当部42は、Mapタスクの完了通知をスレーブノード50から受信すると(S303:Yes)、未処理のMapタスクがあるか否かを判定する(S304)。
そして、Map割当部42は、未処理のMapタスクがある場合(S304:Yes)、スロットが空いているスレーブノード50に、未処理のMapタスクを割り当てて(S305)、S303以降を繰り返す。
一方、未処理のMapタスクがない場合(S304:No)、Reduce割当部43は、スペアReduce情報を受信しているか否かを判定する(S306)。なお、マスタノード30は、スペアReuceIDが存在していることを認識しており、実際にスペアReduceIDにキーが割り当てられているか否かに関わらず、以降の処理を実行するので、S306の処理を必ずしも実行しなくてもよい。
そして、Reduce割当部43は、スペアReduce情報を受信している場合(S306:Yes)、Reduceタスクをスレーブノード50に割り当てる(S307)。
その後、Reduce割当部43は、Reduceタスクの完了通知をスレーブノード50から受信すると(S308:Yes)、未処理のReduceタスクがあるか否かを判定する(S309)。
そして、Reduce割当部43は、未処理のReduceタスクがある場合(S309:Yes)、スロットが空いているスレーブノード50に、未処理のReduceタスクを割り当てて(S310)、S308以降を繰り返す。
一方、Reduce割当部43は、未処理のReduceタスクがない場合(S309:No)、スロットが空いているスレーブノード50に、スペアReduceタスクを割り当てる(S311)。
(スレーブノードの処理)
図17は、スレーブノードが実行する処理の流れを示すフローチャートである。図17に示すように、スレーブノード50は、マスタノード30に、ハートビートでタスク要求を送信する(S401)。
続いて、スレーブノード50は、タスク要求の応答としてジョブ情報とタスク情報を取得し(S402)、取得したタスク情報がMapタスクの情報か否かを判定する(S403)。
そして、スレーブノード50のMap処理部62は、取得したタスク情報がMapタスクの情報であると判定された場合(S403:Yes)、入力データを読み込み(S404)、Mapタスクを起動して(S405)、Map処理を実行する(S406)。
その後、Map処理部62は、Mapタスクが終了するまで待機し(S407)、Mapタスクが終了すると、ハートビートを利用してMapタスクの完了通知等をマスタノード30に送信する(S408)。
一方、取得したタスク情報がReduceタスクの情報である場合(S403:No)、Shuffle処理部63aは、Reduceタスクを実行して、各スレーブノード50からMap処理結果を取得してShuffle処理を実行する(S409)。
続いて、Reduceアプリ実行部63bは、Shuffle処理結果を用いてReduceアプリを実行する(S410)。そして、Reduceアプリ実行部63bは、Reduceタスクが終了するまで待機し(S411)、Reduceタスクが終了すると、ハートビートを利用してReduceタスクの完了通知等をマスタノード30に送信する(S412)。
(Map処理)
図18は、Map処理の流れを示すフローチャートである。この処理は、図17のS406で実行される処理である。
図18に示すように、スレーブノード50のMapアプリ実行部62aは、入力データからレコードを読み取り(S501)、当該レコードを用いてMapアプリケーションを実行し、出力結果を得る(S502)。
その後、Reduce割当部62bは、出力結果のキーに対応する振分り先のReduceIDがパーティションテーブル53に登録されているか否かを判定する(S503)。そして、Reduce割当部62bは、出力結果のキーに対応する振分り先のReduceIDがパーティションテーブル53に登録されている場合(S503:Yes)、登録されているReduceIDを当該キーの振分け先に決定して、割当確定テーブル54に格納する(S504)。
一方、Reduce割当部62bは、出力結果のキーに対応する振分り先のReduceIDがパーティションテーブル53に登録されていない場合(S503:No)、S505を実行する。すなわち、Reduce割当部62bは、出力結果のキーのハッシュ値を求める。なお、ハッシュ値の計算には、スペアReduceタスクの数を使用する。
続いて、Reduce割当部62bは、算出したハッシュ値に通常のReduceタスクの数を加算した値を、振分け先のReduceタスクIDとして、割当確定テーブル54に格納する(S506)。例えば、Reduce割当部62bは、算出したハッシュ値「0」+通常のReduceタスクの数「4」を加算した値「4」をスペアReduceのIDとする。
その後、Reduce割当部62bは、未処理の入力データが残っている場合(S507:No)、S501以降を繰り返す。一方、Reduce割当部62bは、入力データを全て処理し終えた場合(S507:Yes)、処理を終了する。このとき、Reduce割当部62bは、生成した割当確定テーブル54を、マスタノード30に送信することもできる。
[効果]
上述したように、スレーブノード50は、スペアReduceタスクの数と通常のReduceタスクの数、検出されたキーの情報に基づいて、スペアReduceタスクに対してハッシュ値を用いてスロットに割当てることができる。このため、スレーブノード50は、通信する仕組みを加えることなく、全て一意のReduceタスクにキーを振分けることができる。
さらに、マスタノード30は、スペアReduceタスクのスケジューリングを通常のReduceタスクのスケジューリングが全て終わった後に行うことで、サンプリング時のキー情報が不正確であっても最適なReduceスロット毎にスペアReduceタスクを割当てる。この結果、Reduceスロットが実行するReduceタスクの実行が完了する時間を平準化することができ、MapReduceのジョブ実行からジョブ完了までの時間を短縮できる。
また、管理サーバ10は、ReduceIDの番号が小さい順に処理件数の多いキーを割り当て、マスタノード30は、処理件数の多いReduceタスクから順にReduceスロットに割り当てる。この結果、処理件数を考慮せずにReduceタスクを割り当てる場合に比べて、処理時間を短縮することができる。
図19は、Reduceタスクの割当による処理時間の短縮例を説明する図である。図19では、3つのReduceスロットに対して、スペアReduceタスクを含む5つのReduceタスクを割り当てる例を説明する。
図19の上図に示すように、出現数の少ないキーから順に、F銀行(10000件)、D銀行+E銀行(50000件)、C銀行(60000件)、B銀行(80000件)、A銀行(100000件)と割当てていく例である。この場合、はじめに、F銀行(10000件)、D銀行+E銀行(50000件)、C銀行(60000件)がReduceスロット1、2、3に順に割り当てられる。
その後、最も件数の少ないF銀行の処理が終了すると、次にB銀行(80000件)がF銀行を処理していたReduceスロット1に割り当てられる。さらに、次に件数の少ないD銀行+E銀行の処理が終了すると、次にA銀行(100000件)がD銀行+E銀行を処理していたReduceスロット2に割り当てられる。したがって、Reduce処理の完了時間は、D銀行+E銀行(50000件)の処理時間とA銀行(100000件)の処理時間の合計となる。
一方、図19の下図は、出現数の多いキーから順に、A銀行(100000件)、B銀行(80000件)、C銀行(60000件)、D銀行+E銀行(50000件)、F銀行(10000件)を割当てていく例である。この場合、はじめに、A銀行、B銀行、C銀行がReduceスロット1、2、3に順に割り当てられる。
その後、割り当て済みキーのうち最も件数の少ないC銀行の処理が終了すると、次にD銀行+E銀行がC銀行を処理していたReduceスロット3に割り当てられる。さらに、次に件数の少ないB銀行の処理が終了すると、次にF銀行がB銀行を処理していたReduceスロット2に割り当てられる。したがって、Reduce処理の完了時間は、C銀行(60000件)の処理時間とD銀行+E銀行(50000件)の処理時間との合計となる。
上図と下図とを比較すると、上図では、150000件の処理時間がかかり、下図ででは110000件の処理時間がかかる。つまり、出現数の多いキーから順に、Reduceタスクを割り当てることで、全体の処理時間の短縮が実現できる。
また、MapReduceは、Mapタスクのバックグラウンドで実行されるReduceタスクへのデータ転送がMapタスク実行時間によって隠される特性を有する。この特性を利用して、出現数が多いキーのReduceタスクを先に割り当てることで、MapタスクからReduceタスクへのデータ転送(Shuffle処理)にかかる時間の隠ぺいを最大化することができる。
図20は、Reduceタスクのデータ転送の短縮例を説明する図である。図20では、2つのReduceスロットに対して、スペアReduceタスクを含む4つのReduceタスクを割り当てる例を説明する。また、図20では、データ転送時間を件数の4割とする。つまり、入力データ量を100とした場合、40がデータ転送時間であり、60が実際の処理時間とする。なお、Mapタスクの処理時間は一律とする。
図20の上図は、出現数の少ないキーから順に割当てた場合であり、具体的には、入力データ量(30)と(50)を先に割り当て、その後(80)と(100)を割り当てる例である。この場合、Mapタスクの実行中に、データ量(50)のうちの10とデータ量(30)のうちの6のデータ転送を実行することができる。すなわち、合計16のデータ転送をMapタスク中に実行できる。
一方、図20の下図は、出現数の多いキーから順に割当てた場合であり、具体的には、入力データ量(100)と(80)を先に割り当て、その後(50)と(30)を割り当てる例である。この場合、Mapタスクの実行中に、データ量(100)のうちの20とデータ量(80)のうちの16のデータ転送を実行することができる。すなわち、合計36のデータ転送をMapタスク中に実行できる。
したがって、出現数の多いキーから順に割当てた方がMapタスクの実行中により多くのReduce処理対象のデータを転送することができるので、Reduceタスクの準備にかかる処理時間を短縮できる。この結果、全体の処理時間が短縮できる。
さらに、このスケジューリングの効果は、スペアReduceタスクの効果の向上にもつながる。スペアReduceタスクは、入力データのうち出現数が少ないことが分かっているキー、または、サンプリングで検出できなかった程出現数が少ないキーが割り当てられるため、実行時間が短い。この短い実行時間を使って有効に平準化するには、各Reduceスロットの終了時刻の差が短い程よい。したがって、図20の上図と下図を比較して分かるように、入力データ件数が多いReduceタスクを優先して割り当てる方が、各Reduceスロットの終了時刻の差が短くなるため、スペアReduceタスクの効果が高くなる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
[スペアReduceタスクの数]
上記実施例では、スペアReduceタスクが1つの例で説明したが、これに限定されるものではなく、複数のスペアReduceタスクを有していてもよい。その場合、各スレーブノード50は、スペアReduceタスクの数でハッシュ値の計算を行うことで、システム内で共通のReduceIDを割り当てることができる。
[スペアReduceタスクへの割当]
また、上記例では、サンプリング時に含まれなかった主キーをスペアReduceタスクに割り当てる例を説明したが、これは一例であり、割当てを限定するものではない。例えば、算出された割合によって、通常のReduceタスクが割り当てられなかった出現数の少ない主キーがスペアReduceタスクに割り当てられる場合もある。さらに、スペアReduceタスクに割り当てられる主キーは、1つに限られず、2つ以上が割り当てられる場合もある。
[割当る入力データ量]
上記実施例で説明したスペアReduceタスクに割り当てる入力データ量は、Reduceタスクのいずれよりも小さい例で説明した。ここで、入力データ量とは、例えばレコードの数やペイロードの大きさなどを任意に指定することができ、入力データ量が少ないとは、例えばレコードの数が少ない、ペイロードが小さいなどで判定することができる。
[システム]
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
[ハードウェア]
次に、各サーバのハードウェア構成例を説明するが、各装置は同様の構成を有するので、ここでは一例を説明する。図21は、装置のハードウェア構成例を示す図である。図21に示すように、装置100は、通信インタフェース101、メモリ102、複数のHDD(ハードディスクドライブ)103、プロセッサ装置104を有する。
通信インタフェース101は、各機能部の説明時に示した通信制御部に該当し、例えばネットワークインタフェースカードなどである。複数のHDD103は、各機能部の説明時に示した処理部を動作させるプログラムやDB等を記憶する。
プロセッサ装置104が有する複数のCPU105は、各機能部の説明時に示した各処理部と同様の処理を実行するプログラムをHDD103等から読み出してメモリ102に展開することで、図6、図9、図12等で説明した各機能を実行するプロセスを動作させる。すなわち、このプロセスは、管理サーバ10が有するサンプリング実行部16、実行数取得部17、割合決定部18、タスク決定部19、テーブル配布部20と同様の機能を実行する。また、このプロセスは、マスタノード30が有する配布部41、Map割当部42、Reduce割当部43と同様の機能を実行する。また、このプロセスは、スレーブノード50が有する取得部61、Map処理部62、Reduce処理部63と同様の機能を実行する。
このように装置100は、プログラムを読み出して実行することで、データ処理制御方法またはタスク実行方法を実行する情報処理装置として動作する。また、装置100は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、装置100によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
10 管理サーバ
11 通信制御部
12 記憶部
13 サンプリング結果テーブル
14 パーティションテーブル
15 制御部
16 サンプリング実行部
17 実行数取得部
18 割合決定部
19 タスク決定部
20 テーブル配布部
30 マスタノード
31 通信制御部
32 記憶部
33 パーティションテーブル
34 ジョブリストDB
35 タスクリストDB
40 制御部
41 配布部
42 Map割当部
43 Reduce割当部
50 スレーブノード
51 通信制御部
52 記憶部
53 パーティションテーブル
54 割当確定テーブル
60 制御部
61 取得部
62 Map処理部
62a Mapアプリ実行部
62b Reduce割当部
63 Reduce処理部
63a Shuffle処理部
63b Reduceアプリ実行部

Claims (4)

  1. MapReduce処理におけるデータ処理制御方法を実行するコンピュータが、
    前記MapReduce処理の処理対象である入力データをサンプリングして得られた各キーの出現数に基づく割当てルールを生成し、
    前記割当てルールに含まれる各キー用のタスクとして、Map処理の結果を用いて実行される各第1のReduceタスクを割当て、前記割当てルールに含まれないキー用または事前に取得したキーごとの入力データ量が最も少ないキー用のタスクとして、第2のReduceタスクを割り当て、
    前記第2のReduceタスクが前記各第1のReduceタスクのいずれよりも後に開始されるように、前記入力データが割り当てられた前記各第1のReduceタスクおよび前記第2のReduceタスクを、前記MapReduce処理におけるReduce処理を実行するサーバに割り当てる
    処理を含んだことを特徴とするデータ処理制御方法。
  2. 前記割り当てる処理は、前記入力データ量が大きい順に実行されるように、前記各第1のReduceタスクおよび前記第2のReduceタスクの属性を設定することを特徴とする請求項に記載のデータ処理制御方法。
  3. MapReduce処理を実行するコンピュータが、
    前記MapReduce処理の処理対象である入力データをサンプリングして得られた各キーの出現数に基づく割当てルールを生成し、
    前記割当てルールに含まれる各キー用のタスクとして、Map処理の結果を用いて実行される各第1のReduceタスクを割当て、前記割当てルールに含まれないキー用または事前に取得したキーごとの入力データ量が最も少ないキー用のタスクとして、第2のReduceタスクを割り当て、
    前記第2のReduceタスクが前記各第1のReduceタスクのいずれよりも後に開始されるように、前記入力データが割り当てられた前記各第1のReduceタスクおよび前記第2のReduceタスクを、前記MapReduce処理におけるReduce処理を実行するサーバに割り当てる
    処理を実行させることを特徴とするデータ処理制御プログラム。
  4. MapReduce処理を実行するデータ処理制御装置において、
    前記MapReduce処理の処理対象である入力データをサンプリングして得られた各キーの出現数に基づく割当てルールを生成し、前記割当てルールに含まれる各キー用のタスクとして、Map処理の結果を用いて実行される各第1のReduceタスクを割当て、前記割当てルールに含まれないキー用または事前に取得したキーごとの入力データ量が最も少ないキー用のタスクとして、第2のReduceタスクを割り当てる第1割当部と、
    前記第2のReduceタスクが前記各第1のReduceタスクのいずれよりも後に開始されるように、前記第1割当部によって前記入力データが割り当てられた前記各第1のReduceタスクおよび前記第2のReduceタスクを、前記MapReduce処理におけるReduce処理を実行するサーバに割り当てる第2割当部と
    を有することを特徴とするデータ処理制御装置。
JP2014148139A 2014-07-18 2014-07-18 データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置 Active JP6519111B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014148139A JP6519111B2 (ja) 2014-07-18 2014-07-18 データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置
US14/790,368 US9535743B2 (en) 2014-07-18 2015-07-02 Data processing control method, computer-readable recording medium, and data processing control device for performing a Mapreduce process

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014148139A JP6519111B2 (ja) 2014-07-18 2014-07-18 データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置

Publications (2)

Publication Number Publication Date
JP2016024612A JP2016024612A (ja) 2016-02-08
JP6519111B2 true JP6519111B2 (ja) 2019-05-29

Family

ID=55074658

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014148139A Active JP6519111B2 (ja) 2014-07-18 2014-07-18 データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置

Country Status (2)

Country Link
US (1) US9535743B2 (ja)
JP (1) JP6519111B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10831546B2 (en) * 2017-11-27 2020-11-10 International Business Machines Corporation Computing task management using tree structures
US11870840B2 (en) * 2018-01-12 2024-01-09 Workday, Inc. Distributed partitioned map reduce using a data fabric
US10838998B2 (en) * 2018-03-31 2020-11-17 Insight Services, Inc. System and methods for evaluating material samples
CN109947559B (zh) * 2019-02-03 2021-11-23 百度在线网络技术(北京)有限公司 优化MapReduce计算的方法、装置、设备和计算机存储介质
WO2020180291A1 (en) * 2019-03-04 2020-09-10 Hitachi Vantara Llc Metadata routing in a distributed system
US11360821B1 (en) * 2019-05-17 2022-06-14 Ent. Services Development Corporation Lp Systems and methods for resource utilization control
CN113608859A (zh) * 2021-08-24 2021-11-05 京东科技控股股份有限公司 节点任务的执行方法、装置及存储介质

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010114006A1 (ja) 2009-03-31 2010-10-07 日本電気株式会社 ストレージシステムとストレージアクセス方法とプログラム
JP5659880B2 (ja) 2011-03-08 2015-01-28 富士通株式会社 処理装置、分散処理システム、及び処理プログラム
WO2013153620A1 (ja) * 2012-04-10 2013-10-17 株式会社日立製作所 データ処理システム及びデータ処理方法
CN103379114B (zh) * 2012-04-28 2016-12-14 国际商业机器公司 用于在MapReduce系统中保护隐私数据的方法和装置
JP5818263B2 (ja) 2012-05-10 2015-11-18 日本電信電話株式会社 データの分散管理システム及び装置及び方法及びプログラム
JP5853866B2 (ja) * 2012-06-05 2016-02-09 富士通株式会社 割当プログラム、割当装置、および割当方法
US8924977B2 (en) * 2012-06-18 2014-12-30 International Business Machines Corporation Sequential cooperation between map and reduce phases to improve data locality
JP2014044677A (ja) * 2012-08-28 2014-03-13 Fujitsu Ltd 送信制御プログラム、通信ノード、および送信制御方法
JP5935622B2 (ja) * 2012-09-18 2016-06-15 富士通株式会社 情報処理装置,監視装置,情報処理方法,及び監視プログラム
JP5939123B2 (ja) * 2012-10-09 2016-06-22 富士通株式会社 実行制御プログラム、実行制御方法および情報処理装置
US9268716B2 (en) * 2012-10-19 2016-02-23 Yahoo! Inc. Writing data from hadoop to off grid storage
EP2746941A1 (en) * 2012-12-20 2014-06-25 Thomson Licensing Device and method for optimization of data processing in a MapReduce framework
US9471390B2 (en) * 2013-01-16 2016-10-18 International Business Machines Corporation Scheduling mapreduce jobs in a cluster of dynamically available servers
CN103970604B (zh) * 2013-01-31 2017-05-03 国际商业机器公司 基于MapReduce架构实现图处理的方法和装置
JP2015001828A (ja) * 2013-06-14 2015-01-05 富士通株式会社 割当プログラム、割当装置および割当方法
US8819335B1 (en) * 2013-08-30 2014-08-26 NXGN Data, Inc. System and method for executing map-reduce tasks in a storage device

Also Published As

Publication number Publication date
US20160019090A1 (en) 2016-01-21
US9535743B2 (en) 2017-01-03
JP2016024612A (ja) 2016-02-08

Similar Documents

Publication Publication Date Title
JP6519111B2 (ja) データ処理制御方法、データ処理制御プログラムおよびデータ処理制御装置
US9092266B2 (en) Scalable scheduling for distributed data processing
Rajguru et al. A comparative performance analysis of load balancing algorithms in distributed system using qualitative parameters
JP5664098B2 (ja) 複合イベント分散装置、複合イベント分散方法および複合イベント分散プログラム
JP6233413B2 (ja) タスク割り当て判定装置、制御方法、及びプログラム
CN106326002B (zh) 资源调度方法、装置及设备
JP6083290B2 (ja) 分散処理システム
JP6172649B2 (ja) 情報処理装置、プログラム、及び、情報処理方法
JP5121936B2 (ja) リソース割り当て装置及びリソース割り当てプログラム及び記録媒体及びリソース割り当て方法
Rupprecht et al. SquirrelJoin: Network-aware distributed join processing with lazy partitioning
JP6129290B1 (ja) 分散計算におけるアプリケーションパラメータ設定およびシステム仕様設定を推奨する方法およびシステム
JP2017037492A (ja) 分散処理プログラム、分散処理方法および分散処理装置
JP6492977B2 (ja) 並列演算装置、並列演算システム、ノード割当プログラム及びノード割当方法
Hou et al. Dynamic workload balancing for hadoop mapreduce
US20150365474A1 (en) Computer-readable recording medium, task assignment method, and task assignment apparatus
Elshater et al. A study of data locality in YARN
KR101656706B1 (ko) 고성능 컴퓨팅 환경에서의 작업 분배 시스템 및 방법
US10334028B2 (en) Apparatus and method for processing data
JP6357807B2 (ja) タスク割当プログラム、タスク実行プログラム、マスタサーバ、スレーブサーバおよびタスク割当方法
JP5879117B2 (ja) 情報処理システムおよび運用管理方法
WO2017018978A1 (en) Scheduling jobs in a computing cluster
US10824640B1 (en) Framework for scheduling concurrent replication cycles
US20160014198A1 (en) Information processing apparatus
KR101639947B1 (ko) 하둡 선점 데드라인 제약 스케줄링 방법 및 그 방법을 수행하는 컴퓨터프로그램과, 그 프로그램이 기록된 매체
KR101654969B1 (ko) 가상화 클러스터 환경에서 네임 노드를 할당하는 방법 및 장치

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180227

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180427

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20180925

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181225

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20190108

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: 20190326

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190408

R150 Certificate of patent or registration of utility model

Ref document number: 6519111

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150