NameNodeのWebインタフェースについて

新年度も始まり、Hadoopも2.4.0がそろそろリリースということで、ちょっと記事を書いてみます。

NameNodeのWebインタフェースにアクセスしてみると、少々変わりました。 昔からNameNodeのWebインタフェースを見ていた人からすると、驚きかもしれません。

f:id:sinchii:20140402202958p:plain

これまでは、JSPベースでNameNodeのFSNamesystemなどを参照して情報を収集していました。 この仕組みが、Javascriptのテンプレートエンジン(dustjs)を用いた形式に変わっています。 関連するスクリプトを参照すると、NameNodeの"/jmx"にアクセスして、必要な情報を収集し、 HTML内に埋め込まれたパラメータにて取得情報を加工しながら表示する形になりました。

/jmx とは

Hadoopは、JettyベースでHTTPにて情報を表示する仕組みが備わっています。 例えば、ノードの設定情報を確認できる /conf (ConfServlet.class)やノードのスレッド利用状況を示す /stacks (StackServlet.class)があります。 /jmxHadoop標準で利用でき、JMXに沿ってノードの情報をJSON形式で取得することができます(JMXJsonServlet.class)。

f:id:sinchii:20140402212731p:plain

Hadoop 1系では、/metrics でノードの情報を取得していたのですが、2系では、/jmx でノードの詳細な情報を確認することになります。 (2系のNameNodeやDataNodeに至っては、何も取得できなくなっております。)

/jmxではqryパラメータで特定の情報のみを取得することが可能です。Webインタフェースでも全ての情報を取得するのではなく、 qryを利用して特定の情報のみを取得しています。

例: "http://[NameNode:port]/jmx?qry=Hadoop:service=NameNode,name=NameNodeInfo"

metrics2 との違い

Hadoop 2系にも metrics2 という仕組みで、ノードの情報をファイルやGangliaなどに出力する仕組みがあります。 metrics2は、指定した間隔ごとに更新してファイルやGangliaに出力するために利用します。 一方 jmxは、リクエストした瞬間瞬間の値を確認することになります。jmxでも定期的にリクエストすることで、 metrics2と同じようなことを実現することは可能です(自分たちで収集の仕組みは必要ですが...)。

取得できる情報の違いですが、metrics2で取得できる情報は全て/jmxで取得できます。 一方、/jmxのみで取得できる情報もあります。例えば、クラスタに組み込まれたDataNodeの状態を示す情報、 HDFSのスナップショット数に関する情報です。

HDFSファイル情報の取得

以前のWebインタフェースでは、HDFS上の情報はDataNodeのWebページにリダイレクトされて、ディレクトリや ファイルの情報を表示していました。この仕組みも変更になりました。 /jmxのケースと同様に、dustjsベースでWebHDFSを利用してHDFSのディレクトリやファイル情報を取得します。

f:id:sinchii:20140402212921p:plain

おわりに

NameNodeは、HDFSのマスターとしてHDFSの情報を管理します。 もちろんMapReduce/YARN、Sparkなどなど、様々なアプリケーションを実行するときに大変重要です。 metrics2やjmxを活用して、HDFSの状態の変化を確認しつつ運用しましょう。

<補足1> 古いWebインタフェースが良いという人は、画面下部右側にリンクが隠れています。

<補足2> 2.5.0ではスナップショットの詳細情報も同様に取得できるようになります。

<補足3> Webインタフェースの最上部の緑色がHortonworks(HadoopディストリビューションHDPを提供している企業)のコーポレートカラーのように見えるので、変更したほうが良いというような議論がJIRA上で展開されたこともあります。結局変更しないままでした。