snuffkinの遊び場

IT関係、スポーツ、数学等に関することを、気が向いたときに書いてます。

YARNの新機能 Capacity Scheduler

Hadoopアドベントカレンダー2011 on Zusaarの12/18を担当する@snuffkinです。

さて、先日、Hadoop 0.23がリリースされました。
今回のリリースでは、HDFSフェデレーションや次世代MapReduce(YARN)といった新機能が導入され、アーキテクチャに大きな改良が加えられました。そのため、Hadoop 0.23は「メジャーバージョンアップのためのRC版」といった感じです。

そんなHadoop 0.23の中で私が注目している機能のひとつに「Capacity Scheduler」があります。以下のApacheのサイトを見るとCapacity Schedulerについて解説が書いてあります。

Hadoop MapReduce Next Generation - Capacity Scheduler

Overviewの部分に書いてありますが、Capacity Schedulerは「マルチテナントなクラスタで、スループットやリソース使用量の最大値を設定できるようにする」ということを目的に開発された機能です。Hadoopクラスタを利用するorganizationごとにSLAを設定して、その範囲内でHadoopクラスタを利用できるようにしたいようです。Hadoopがインフラ化つつあり、マルチテナントなクラスタとして組みたい需要が出てきているということですね。

将来的には様々なリソース使用量をサポートするようですが、Hadoop 0.23のCapacity Schedulerではメモリ使用量のみがサポートされています。

YARNのインストール方法については、hishidamaさんのページが分かりやすかったです。書いてある通りに進めれば、すんなりインストールできます。

YARNの中で、私が実用上便利だと思った機能はコレ(というか、ないと使いものにならない?)。Changing Queue Configurationの部分に書いてありますが、Capacity Schedulerの設定はHadoopクラスタ稼働中に動的に変更可能です。設定変更する場合はconfディレクトリのcapacity-scheduler.xml(デフォルトのインストールでは存在しないので、自分で書く必要があります)を書き換え、$YARN_HOME(いわゆる$HADOOP_HOMEですね)で以下のコマンドを実行してください。

bin/yarn rmadmin -refreshQueues

Apacheのサイトには「bin/rmadmin -refreshQueues」を実行するように書かれていますが、そのまま実行しても「そのようなファイルやディレクトリはありません」と怒られてしまいます。誤記だと思います。

で、開発者としてやってみたくなるのは「実際にCapacity Schedulerを書いてみたい」ってことですね。さて、書いてみよう!
って思ったのですが、意外とヘビーですね。CapacitySchedulerはorg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacityパッケージに入っているのですが、実装しないといけないメソッドが多そう^^; 自分でCapacity Schedulerを実装する方法については、今後何度かに分けて書いていきます。

さて、明日は、@aoetkさんです。よろしくお願いします〜(すみません。最初、翌日書く人を間違えていました^^;)