Pivotal Knowledge Base

フォローする

PHDクラスタでのYARNフェアスケジューラの設定方法

目的

この記事は基本的なYARN フェアスケジューラ設定における基本的なクイックリファレンスである。

  1. resource manager ノードの/etc/gphd/hadoop/conf/yarn-site.xmlに下記パラメータを追加するか、icm_client の reconfigure で下記パラメータを追加する。 
    <property>
      <name>yarn.resourcemanager.scheduler.class</name>
      <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    </property>

    メモ: デフォルトでは、Pivotal Hadoop Distributionはキャパシティスケジューラを使用しているので、 yarn.resourcemanager.scheduler.class の値をorg.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler に変更すること

  2. yarn-site.xml に Fair Scheduler allocation file パラメータを含める
    <property>
      <name>yarn.scheduler.fair.allocation.file</name>
      <value>/etc/gphd/hadoop/conf/fair-scheduler.xml</value>
    </property>

    Yarn-site.xml内のプロパティを追加することでより多くの制御ができる。例えばコンテナへのアサインなどを制御できる。
    リファレンス先へは ここ をクリック。

  3. allocation fileで設定される5つの要素がある
    • Queue element -- キューを表す。キューの要素はプロパティを持っている:
      • minResources -- キューのための最小リソースを設定
      • maxResources -- キューのための最大リソースを設定
      • maxRunningApps -- 1度にキューで動作するアプリケーションの最大数を設定
      • weight -- クラスタ全体でのキューの優先度。デフォルト 1
      • schedulingPolicy -- 値は "fifo"/"fair"/"drf" もしくは拡張する任意のクラス org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy
      • aclSubmitApps -- キューにアプリをサブミットできるユーザ一覧
      • minSharePreemptionTimeout -- 他のキューからリソースを取得するために、コンテナを確保する前に、キューの最小リソース共有比率を下回ることを許容する時間を指定する
    • User elements -- ユーザの振る舞いを表す。特定のユーザのための起動アプリケーションの設定を1つのプロパティに含める。
    • userMaxAppsDefault element -- もし、他の箇所で制限が明示的に設定されていなければ、これがデフォルトのユーザのためのアプリケーション実行の制限である。
    • fairSharePreemptionTimeout element -- 他のキューがリソースコンテナを取得する前に、フェアシェア状態を下回ることを許容する時間の設定
    • defaultQueueSchedulingPolicy element -- キューのデフォルトのスケジューリングポリシーを定義する。定義された場合、キュー毎のscheduling Policy element の設定を優先する。

    下記は test と呼ばれるキューの割当設定ファイルの例である(yarn.scheduler.fair.allocation.fileについて)。フェアスケジューラはYARNキャパシティスケジューラと同様にサブキューに対応している。

    <?xml version="1.0"?>
    <allocations>
      <queue name="test">
        <minResources>1000 mb</minResources>
        <maxResources>5000 mb</maxResources>
        <maxRunningApps>10</maxRunningApps>
        <aclSubmitApps>hdfs,gpadmin</aclSubmitApps>
        <weight>2.0</weight>
        <schedulingPolicy>fair</schedulingPolicy>
        <queue name="test-sub">
            <aclSubmitApps>root</aclSubmitApps>
            <minResources>500 mb</minResources>
        </queue>
      </queue>
      <user name="root">
        <maxRunningApps>10</maxRunningApps>
      </user>
     <user name="hdfs">
        <maxRunningApps>5</maxRunningApps>
      </user>
      <user name="gpadmin">
        <maxRunningApps>5</maxRunningApps>
      </user>
      <userMaxAppsDefault>5</userMaxAppsDefault>
     <fairSharePreemptionTimeout>30</fairSharePreemptionTimeout>
    </allocations>

    メモ: 全てのキューはrootと呼ばれる定義済みの子である。キューパスはrootから始まり、区切りとしてドットを使用している。例えば、root下のqueue1というキューはqueue1-subと呼ばれるキューを持っている。queue1-subはqueue1-subのキューパスはroot.queue1.queue1-subと定義する必要がある。子キューは親キューの許容内容を継承する。

  4. Resourcemanagerの再起動
    service hadoop-yarn-resourcemanager restart
  5. テストキューにジョブを投入
    hadoop jar /usr/lib/gphd/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount -D mapreduce.job.queuename=test /input /output/


resource manager の web インターフェースを通じてキューやアプリケーションの状態を確認できる。

http://<Resource_manager>:8088/cluster/scheduler

 

コメント

Powered by Zendesk