CDH4でのYARN+Capacity Schedulerに触れたので記しておきます。
まずは基礎知識のためのリンクとか単語とか。
リンク集
YARNについて
YARNでは mapred.*** や mapreduce.*** の設定は使わないものも多くなりましたが、まだ大半は重要なままです。そしてなぜかmapred-default.xmlには yarn.*** の設定も書いてあるので見落とさないようにしましょう
Capacity Schedulerについて
Capacity SchedulerはResource Managerの管理画面のSchedulerやActive Nodeのリストを見ながら色々試したほうが理解が早いと思います
Capacity Schedulerで動かす
mapred-site.xml のこれと
1 2 3 4 5 |
<property> <name>mapreduce.framework.name</name> <value>yarn</value> <description>Execution framework set to Hadoop YARN.</description> </property> |
yarn-site.xml でこれを有効にするだけです。
1 2 3 4 |
<property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property> |
それとNodeManagerのyarn-site.xmlでメモリの上限値をMBで設定しておきます。OSの総メモリからYARN_NODEMANAGER_OPTSの-Xmx値とあと少し引いたくらいがいいです(適当)。
1 2 3 4 |
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> |
デフォルトの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の基本画面
フルっフルで実行中です。Active Nodeのリスト
これらを踏まえて、次回はメモリ計算や並列処理について触れたいと思います。
ここまでの大雑把な感触としては、デバイス管理がUUIDになって意外と良かったとか、GRUBがgrub-pcになって意外と良かったとか、慣れたら実は新しいのが良かったという感じに、YARNになって良かったと思えるような気がしています。