YARN+Capacity Schedulerの基礎知識

CDH4でのYARN+Capacity Schedulerに触れたので記しておきます。

まずは基礎知識のためのリンクとか単語とか。



リンク集

YARNについて

  • MapReduce 2.0 in Hadoop 0.23 | Apache Hadoop for the Enterprise | Cloudera
  • Hadoop Map Reduce Next Generation-0.23.1 – Cluster Setup
  • yarn-default.xml
  • mapred-default.xml

  • YARNでは mapred.*** や mapreduce.*** の設定は使わないものも多くなりましたが、まだ大半は重要なままです。そしてなぜかmapred-default.xmlには yarn.*** の設定も書いてあるので見落とさないようにしましょう


    Capacity Schedulerについて

  • Hadoop Map Reduce Next Generation-0.23.1 – Capacity Scheduler
  • capacity-scheduler.xmlの例

  • Capacity SchedulerはResource Managerの管理画面のSchedulerやActive Nodeのリストを見ながら色々試したほうが理解が早いと思います


    Capacity Schedulerで動かす

    mapred-site.xml のこれと

    yarn-site.xml でこれを有効にするだけです。

    それとNodeManagerのyarn-site.xmlでメモリの上限値をMBで設定しておきます。OSの総メモリからYARN_NODEMANAGER_OPTSの-Xmx値とあと少し引いたくらいがいいです(適当)。

    デフォルトの8192=8GBのままだと、OSメモリが8GB以下のNodeManagerでOOM Killer発動の恐れがあります。また、テスト環境といえど、OSメモリが2GB以上のNodeManagerにすることを推奨します。


    単語集

    CDH3でJobTrackerとかTaskTrackerとかTask(Map/Reduce)と呼んでいたものはガラッと変わっているので、新しい単語を知っておくとResouceManagerの管理画面やClouderaの説明を見るのに役に立ちます。というか、必須。MapReduce 2.0 in Hadoop 0.23 | Apache Hadoop for the Enterprise | Cloudera とResouceManager管理画面を参考にしていますが、間違ってたらごめんなさい。

    Resource Manager

    これはいわゆるJobTrackerと同じ立ち位置と思ってOKです。クライアントからジョブリクエストを受けたり、ジョブプロセスの管理をするデーモンです。

    Applications Manager(AsM)

    Resource Managerの中で動いており、クライアントのジョブリクエストを受けたり、Application Master群を管理します。

    Scheduler

    Resource Managerの中で動いており、リソースの管理をしてMap/Reduceプロセス数などを調整し、Application Masterと通信します。

    Application Master

    Map/Reduceプロセスを管理するプロセスで、乱暴に言えば動的なTaskTrackerという感じです。ジョブ1つにつき1Application Masterが立ち上がります。いままでTaskTrackerがジョブ管理をしていましたが、それが動的にジョブ毎の管理に切りだされたイメージで、これがMRv1とYARNの大きな違いだと思います。Applications Managerによって立ち上げられた後は主にSchedulerとNodeManagerと通信します。

    Application

    ジョブのことを指しています。慣れないですが、例えばHiveで2クエリ同時に打ったら、2Applications動作していることになります。1Applicationにつき1Application Masterになるので似ていますが、単語としては分けたほうがよいです。1Applicationで複数Containerが動くことになります。

    Container

    いわゆるタスクのことで、1mapは1container、1reduceも1containerになります。そして面白いことにApplication Masterも1containerとしてカウントされます。Applicationを動かすためのプロセスが全てContainerというわけです。1Applicationで15Containers Runningの場合は、1つがApplication Masterで、残り14個が実行中のMapとReduceの総数になります。

    Memory Total

    全NodeManagerの yarn.nodemanager.resource.memory-mb の合計値です。

    Used Resouces : memory ***

    実行中のContainerが使用中の総メモリです。Memory Usedとは若干計算方法が違うようで、yarn.nodemanager.resource.memory-mb の値によっては合計値が異なる場合があります。

    管理画面

    イメージを湧きやすくするためにテストサーバの管理画面をキャプっておきました。

    Capacity Schedulerの基本画面

    フルっフルで実行中です。
    ResouceManager Webapp Scheduler

    Active Nodeのリスト

    ResouceManager Webapp ActiveNodes


    これらを踏まえて、次回はメモリ計算や並列処理について触れたいと思います。

    ここまでの大雑把な感触としては、デバイス管理がUUIDになって意外と良かったとか、GRUBがgrub-pcになって意外と良かったとか、慣れたら実は新しいのが良かったという感じに、YARNになって良かったと思えるような気がしています。