ページの先頭行へ戻る
Interstage Big Data Parallel Processing Server V1.2.0 ユーザーズガイド
FUJITSU Software

17.5.2 Hadoopタスクスケジューラ

Hadoopは、タスクスケジューラにより、Hadoopジョブの処理時のMapReduceスロットの使用量を制御することができます。タスクスケジューラは以下の3つから選択します。

タスクスケジューラは、以下のプロパティで指定します。

プロパティ名

説明

デフォルト値

設定ファイル

mapred.jobtracker.taskScheduler

使用するタスクスケジューラのクラス名を指定します。

org.apache.hadoop.mapred.CapacityTaskScheduler

mapred-site.xml

FIFOスケジューラ

Hadoopジョブを依頼された順に、すべてのスロットを用いて実行することができます。先行のHadoopジョブのMapタスクがすべて終了(Mapスロットをすべて解放)した時点で、後続のジョブのMapタスクが開始されます。Reduceタスクも同様です。


上図は、3台のスレーブサーバにMap/Reduceスロットを計3つずつ定義している場合に、2つのHadoopジョブを時間をおいて実行した例です。

    時刻 t0: (Hadoopジョブ1) 実行を依頼
                             すべてのMapスロットを使用して、Mapタスクが開始
    時刻 t1: (Hadoopジョブ2) 実行を依頼
                             Hadoopジョブ1でMapスロット使用中のため、Mapタスクはスロットの解放待ち
    時刻 t2: (Hadoopジョブ1) Mapタスクが終了
                             すべてのReduceスロットを使用して、Reduceタスクが開始
             (Hadoopジョブ2) Mapスロットを2つ使用して、Mapタスクが開始
    時刻 t3: (Hadoopジョブ1) Reduceタスクが終了し、ジョブ全体が終了
    時刻 t4: (Hadoopジョブ2) Mapタスクが終了
                             2つのReduceスロットを使用して、Reduceタスクが開始
    時刻 t5: (Hadoopジョブ2) Reduceタスクが終了し、ジョブ全体が終了

参照

Hadoopジョブの実行については、以下を参照してください。

  • http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html

Capacityスケジューラ

事前に定義したキューを指定してHadoopジョブの実行を依頼します。キューには、すべてのスロットを使用可能な場合を100%とした時に、そのキューで最大限使用することができる割合を定義します。


上図は、3台のスレーブサーバにMap/Reduceスロットを計3つずつ定義している場合に、2つのHadoopジョブを時間をおいて実行した例です。

    時刻 t0: (Hadoopジョブ1) キューAを指定して実行を依頼
                             キューAで使用可能な2つのMapスロット(67%)を使用して、Mapタスクが部分的に開始
    時刻 t1: (Hadoopジョブ2) キューBを指定して実行を依頼
                             キューBで使用可能な1つのMapスロット(33%)を使用して、Mapタスクが部分的に開始
    時刻 t2: (Hadoopジョブ1) 先行のMapタスクが終了
                             スロットの解放を待っていた残りのMapタスクが開始
    時刻 t3: (Hadoopジョブ2) 先行のMapタスクが終了
                             スロットの解放を待っていた残りのMapタスクが開始
    時刻 t4: (Hadoopジョブ1) 残りのMapタスクが終了
                             キューAで使用可能な2つのReduceスロット(67%)を使用して、Reduceタスクが部分的に開始
    時刻 t5: (Hadoopジョブ1) 先行のReduceタスクが終了
                             スロットの解放を待っていた残りのReduceタスクが開始
             (Hadoopジョブ2) Mapタスクが終了
                             キューBで使用可能な1つのReduceスロット(33%)を使用して、Reduceタスクが部分的に開始
    時刻 t6: (Hadoopジョブ1) 残りのReduceタスクが終了し、ジョブ全体が終了
             (Hadoopジョブ2) 先行のReduceタスクが終了
                             スロットの解放を待っていた残りのReduceタスクが開始
    時刻 t7: (Hadoopジョブ2) 残りのReduceタスクが終了し、ジョブ全体が終了

なお、上図ではキューAとスレーブサーバ1、2のスロットがキューBとスレーブサーバ3のスロットがそれぞれ対応づいているように見えますが、実際にはキューとスレーブサーバやスロットに対応づけはありません。キューに定義された割合をもとに、いずれかのスレーブサーバのいずれかのスロットを使用してHadoopジョブが実行されます。


Capacityスケジューラの設定は、以下のプロパティで指定します。

プロパティ名

説明

デフォルト値

設定ファイル

mapred.queue.names

キュー名を定義します。カンマで区切って複数指定することができます。

default

mapred-site.xml

mapred.capacity-scheduler.queue.<キュー名>.capacity

<キュー名>のキューで最大限使用可能なスロットの割合を100以下の整数で指定します。

mapred.queue.namesに指定したキューごとに、総和が100以下になるように指定します。

100

mapred-site.xml

mapred.job.queue.name

Hadoopジョブ実行時に使用するキュー名を指定します。Hadoopジョブ起動時に指定することで、使用するキューを選択します。

default

mapred-site.xml

参考

本製品でのデフォルトの指定値では、1つのキュー(default)に100%のスロットを割り当てているため、動作はFIFOスケジューラと同等になります。

参照

Capacityスケージューラの詳細やHadoopジョブの実行については、以下を参照してください。

  • http://hadoop.apache.org/docs/r1.2.1/capacity_scheduler.html

  • http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html

Fairスケジューラ

Hadoopジョブを実行するユーザごとにプールが提供されます。、プールには、全スロットに対してその時点でそのユーザが使用可能なスロット数が割り当てられます。ユーザが1人の場合にはプールに対してすべてのスロットが配分されますが、異なるユーザが同時にHadoopジョブを実行した場合にはプール内のスロット数はすべてのユーザ(プール)で均等になるように配分されます。また、同じユーザが同時に複数のHadoopジョブを実行した場合、プールに配分されたスロット数の範囲内でさらに各Hadoopジョブに均等化されて配分されます。


上図は、3台のスレーブサーバにMap/Reduceスロットを計3つずつ定義している場合に、ユーザXとユーザYが時間をおいてHadoopジョブを実行した例です。

    時刻 t0: (Hadoopジョブ1) ユーザXが実行を依頼
                             プールXに配分されたすべてのMapスロットを使用してMapタスクが開始
    時刻 t1: (Hadoopジョブ2) ユーザYが実行を依頼
                             プール間のスロット均等化のために、Hadoopジョブ1のMapタスクを停止することで
                             確保(Preemtion)したMapスロットがプールYに配分され、Mapタスクが部分的に開始
    時刻 t2: (Hadoopジョブ1) Mapタスクが部分的に終了
                             プールXに配分された1つのMapスロットを使用して、t1で停止された残りのMapタスクが開始
             (Hadoopジョブ2) プールXで不要となりプールYに配分されたMapスロットを利用し
                             残りのMapタスクが開始
    時刻 t3: (Hadoopジョブ2) 先行のMapタスクが終了
    時刻 t4: (Hadoopジョブ2) 残りのMapタスクが終了
                             プールYに配分された2つのReduceスロットを使用して、Reduceタスクが開始
             (Hadoopジョブ1) 残りのMapタスクが終了
                             プールXに配分された1つのReduceスロットを使用して、Reduceタスクが部分的に開始
    時刻 t5: (Hadoopジョブ2) Reduceタスクが終了し、ジョブ全体が終了
             (Hadoopジョブ1) プールYで不要となりプールXに配分されたReduceスロットを利用し
                             残りのReduceタスクが開始
    時刻 t6: (Hadoopジョブ1) 残りのReduceタスクが終了し、ジョブ全体が終了

Fairスケジューラの設定は、以下のプロパティで指定します。

プロパティ名

説明

デフォルト値

設定ファイル

mapred.fairscheduler.preemption

スロットを配分するために他の実行中のタスクを停止するか、タスクの完了を待って配分するかをbool値で指定します。

false
※タスクの完了を待つ

mapred-site.xml


参照

Fairスケジューラの詳細やHadoopジョブの実行については以下を参照してください。

  • http://hadoop.apache.org/docs/r1.2.1/fair_scheduler.html

  • http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html