前回はAmazon Elastic MapReduceから少し離れて、Hadoopの基礎の視点からパフォーマンスについて説明しました。今回からEMRに特化してパフォーマンスの説明をしていきます。
bootstrapでGangliaを設定して監視する
パフォーマンスを出すためにまず重要なのが、パフォーマンスを計測することです。
EC2と同様に、EMRもインスタンスのタイプが選べるので、CPUやメモリなどのスペックが足りていないかどうかを判断することができます。逆に「ノード数20で起動していたが、10ノードで済む」などとわかり、高スペックなものを改善すればコストも削減できます。
EMRのパフォーマンスの監視には、オープンソースの監視ツールであるGangliaを使います。Gangliaは、数千ノードまで対応できるように設計されています。詳しくはGangliaのページを参照してみてください。
EMRは、第6回で紹介したbootstrapでGangliaを設定することができます。WebコンソールでもAPIでも、以下のパスをbootstrapに設定するようにしてください。
Proxyを使って確認するには
GangliaのUIを確認するには2つの方法があります。どちらもいくつか設定が必要です。1つめの方法はProxyを使ってアクセスする方法です。
FoxyProxyをインストール/設定する
本連載の初回でも「AWSはFirefoxを推奨している」と書きましたが、Gangliaの監視ではFirefoxのアドオン「FoxyProxy」)を使います。AWSでもFoxyProxyを推奨しているようです。
インストールが完了したら、以下のようにたどってオプション画面を起動してください。
Firefoxのメニュー⇒ツール⇒FoxyProxy Standard⇒ 「オプション」を選択
起動できたら「新しくプロキシを追加」を押下してください。
設定画面が起動したら、「プロキシ詳細」タブを選択してください。そして「手動プロキシ設定」で以下のように設定してください。
- Host or IP Address ⇒ localhost
- ポート ⇒ 8157(AWSで推奨しているようです)
- 「SOCKSプロキシ」をチェック
- 「SOCKS v5」を選択
次に「URL Patterns」タブを選択し、「新規パターン」を追加を押下します。
画面が起動したら下記のように設定してください。
- パターン名
- ⇒適当なパターン名を入力
- URLパターン
- ⇒ 以下の2つを入力
- *ec2*.amazonaws.com*(AWSのDNSパブリック)
- *ec2.internal*(AWSのDNSプライベート)
- URLの包含と排除
- ⇒「ホワイトリスト」を選択
- パターン内容
- ⇒「ワイルドカード」を選択
上記のURLパターンをそれぞれ登録すると、以下のように2種類のパターンがリストに追加されます。
設定が完了したら「OK」を押下して設定を反映させてください。
最後にもう一度、ツールメニューから、先ほど設定したプロキシを選択してください。なお、プロキシへのアクセスが終了したら元に戻してください。他のサイトへ接続できなくなっています。
SSHトンネルでEMRのマスタに接続する
FoxyProxyの設定が終わったら、以下のようにSSHトンネルを使ってEMRのマスタに接続します。
ポイントは以下の3点です。
- キーファイル
- ⇒ EMR起動時に指定したキーファイルを設定する
- ポート
- ⇒ 8157を設定する(8157にFoxyProxyに設定したため)
- MasterDNSName
- ⇒ 接続先のEMRのマスタを指定する
マスタの確認方法は以下のとおりです。
- Webコンソールでログイン
-
- ⇒EC2タブからインスタンスを選択
- ⇒セキュリティグループが「ElasticMapReduce-master」となっているものを見つける
ほかにも、Rubyクライアントの以下のコマンドで確認する方法もあります。
なお、今回はリモートでコマンドを実行しないので、Nオプションでコマンドを実行しないようにしてあります。あとはhttp://publicMasterDNSName/ganglia/ からGangliaのWeb UIへアクセスするだけです。
SSHトンネルを利用して確認するには
2つめの方法は、単純にSSHトンネルを使用するだけです。
Proxyと違うのは、ただのポートフォワードなのでlocalhostを使用することです。
単純にGangliaだけを確認するのであればポートフォワードのみでも大丈夫です。しかし、HadoopのWeb UIでJobTrackerとHDFSの状態を確認したいのであれば、Proxy設定をしておいてください。確認が1回で済むので楽です。
なお、EMRのWeb UIポートは以下のようにHadoopのデフォルトポートと異なっているので注意してください。
| JobTracker | NameNode |
Hadoopデフォルトポート | 50030 | 50070 |
---|
EMRポート | 9100 | 9101 |
---|
EMRに限らず、性能を限界まで引き出すためには、どこがネックになっているのかを把握することと、「実はまだまだ余裕があった」ということがないように、空きリソースをうまく使い切ることがかなり重要です。
パフォーマンスの評価は、性能を測る上でも初期に行うものです。ぜひ試してみてください。