第2回では、第1回で紹介したhalookのセットアップ方法を紹介します。これにより、HDFSの使用状況、MapReduceジョブの実行状況、HBaseの情報を可視化できるようになります。なお、halookの最新版はこちらからダウンロードできます。
また、設定手順はこちらにあります。
この記事では、各コンポーネントの説明を加えながら、実際にセットアップする様子を追っていきます。
halookの構成
セットアップの前に、halookの構成と仕組みについて簡単に説明します。まず、halookを構成する要素は次の3つです。
1.HalookJavelin
NameNode, JobTracker, HBaseMasterに適用するエージェントです。可視化のためのデータを収集して次のDataCollectorに渡します。
動作環境:Hadoop/HBaseの動作環境(Linux)に準じます
2.DataCollector
HalookJavelinから受け取ったデータをDB(PostgreSQL)に書き込みます。また同時に、次のHalookDashboardがリアルタイム描画を実現するためのデータ中継を行います。
- 動作環境:WindowsまたはLinux、Java5以降、PostgreSQL 9.1以降
3.HalookDashboard
Webブラウザからのアクセスで可視化画面を表示するためのWebアプリケーションです。Tomcat上で動作します。
- 動作環境:WindowsまたはLinux、Java6以降、Tomcat 7.0.29 以降
ちなみにhalookは、Javaシステムの可視化・診断ツールであるENdoSnipeのプラグインとして開発されています。ENdoSnipeは、Acroquest Technology株式会社が、Javaシステムの障害解決コンサルティングサービス(JaTS)のノウハウを基に開発した製品ですが、halookの公開と同時にOSS化されました。このENdoSnipeが元々、Javelin―DataCollector―WebDashboardという構成をしており、それぞれが、収集―保存―表示の役割を持っています。
データの収集部分と、表示部分にHadoopやHBase用の機能を追加したものが、halookです。取得するデータの追加や、新しいビューの作成が、統一的な枠組みの中で実現可能になっているため、今後はhalookの機能追加だけでなく、他のOSSに対する可視化ツールの開発も予定されています。
halookのセットアップ
それではいよいよ、halookをセットアップしてみましょう。今回は、以下のマシン構成を例に、セットアップ手順を紹介します。
①Hadoopマスターサーバ
CDH3u5のNameNode, JobTracker, HBaseMasterが全てこのサーバ上で動いているとします。HalookJavelinを設定します。
②データ収集サーバ
次に、データを収集するDataCollectorの設定を行います。①でHalookJavelinはすでに起動しているので、DataCollectorを起動するとすぐにDB
へのデータ蓄積が始まります。
ここではPostgreSQL 9.2がインストールされているとし、DataCollectorを設定します。
③Web APサーバ
Tomcat 7.0 がインストールされているとします。HalookDashboardを設定します。
こちらの構成は例ですので、NameNode, JobTracker, HBaseMasterが別々のサーバで動いている場合、データ収集サーバとWebAPサーバが同じサーバで動いている場合などは、適宜設定内容を読み替えてください。
セットアップに必要な資材は、こちらからダウンロードすることができます。
必要なのは、以下の3つです。
- HalookJavelinFull_5.0.2.zip
- endosnipe-datacollector-5.0.2.tar.gz
- HalookDashboard.war
なお、DataCollectorをWindows上で動かす場合は、2の代わりに
- endosnipe-datacollector-5.0.2.zip
を使ってください。
①Hadoopマスターサーバの設定
まず、HalookJavelinFull_5.0.2.zip を任意のディレクトリに展開します。ここでは、/opt/ENdoSnipe の下に展開したものと仮定します。配置後、設定ファイルを編集します。設定するのは、データを送る先のDataCollectorが動くサーバのホスト名と、監視対象のHadoop/HBaseクラスタ名です。
設定ファイルは、(HalookJavelinインストールディレクトリ)/conf/javelin.propertiesになります。
javelin.clusterNameは、デフォルト値が「default」となっていますが、必ず変更する必要があります。ここでは、「mycluster」と設定します。設定した名前が、画面表示の際に使われます。また、このクラスタ名を変えることにより、複数のクラスタを同時に監視することができます。
次に、NameNode, JobTracker, HBaseMasterが同じマシン上で動いているときは、それぞれのHalookJavelinインストールディレクトリを分ける必要があるので、ディレクトリごとコピーします。また、Javelin実行時のログ出力の関係上、NameNode用のHalookJavelinインストールディレクトリはhdfsユーザに、JobTracker用はmapredユーザに、HBaseMaster用はhbaseユーザに、オーナーを変更しておきます。NameNode, JobTracker, HBaseMasterが別々のマシン上で動いているときは、ディレクトリ名の変更は必要ありません。オーナーの変更のみが必要です。
続いて、/etc/hadoop/conf/hadoop-env.shと /etc/hbase/conf/hbase-env.shを編集し、NameNode、JobTracker、HBaseMasterの起動時に、HalookJavelinが適用されるようにします。NameNode、JobTrackerについては、
「export HADOOP_NAMENODE_OPTS=……」
「export HADOOP_JOBTRACKER_OPTS=……」の部分に、-javaagentオプションを加えて、HalookJavelinがJavaプロセス起動時にロードされるようにします。
HBaseMasterについては、-javaagentオプションを加えて、HalookJavelinがJavaプロセス起動時にロードされるように、以下の1行をファイル中に追加します。
最後に、NameNode、JobTracker、HBaseMasterを再起動すれば、HalookJavelinの適用は完了です。
②データ収集サーバの設定
endosnipe-datacollector-5.0.2.tar.gzを任意のディレクトリに展開します。ここでは、/opt/ENdoSnipeの下に展開したものと仮定します。配置後、設定ファイルを編集します。設定するのは、接続先のPostgreSQL DBサーバのホスト名などの情報と、自分自身が動いているサーバのホスト名です。
設定ファイルは、(DataCollectorインストールディレクトリ) /conf/collector.propertiesになります。
編集後、collector.propertiesは、HalookDashboardが動くWeb APサーバにコピーしてください。ここで指定したdatabase.host、accept.hostに対し、HalookDashboardが接続します。そのため、今回のマシン構成では、database.host=localhost、accept.host=localhost としてもDataCollectorは動きますが、別サーバであるWeb APサーバ上に置くcollector.propertiesには、両方ともDataCollectorの動いているサーバのホスト名を設定する必要があります。DataCollectorと、HalookDashboardを同じサーバ上で動かす場合は、collector.propertiesのコピーは必要ありません。
設定が完了したら、DataCollectorを起動します。
③Web APサーバの設定
②で編集・コピーした、collector.propertiesが、 /opt/ENdoSnipe/DataCollector/conf/に配置されていることを確認します。確認後、TomcatのwebappディレクトリにHalookDashboard.war を配置し、Tomcatを起動します。
collector.propertiesを、/opt/ENdoSnipe/DataCollector/conf/以外の場所に配置する場合は、一旦Tomcatを停止し、webapp/HalookDashboard/WEB-INF/web.xmlを編集し、collector.propertiesの場所を指定した後Tomcatを再起動します。
以上で設定は完了です。
Webブラウザ(今回はFirefox)から、以下のURLを開いてください。
- http://(Web APサーバ):8080/HalookDashboard/halook
以下のような画面が現れれば成功です。図は、スレーブが3台の場合の例です。
MapReduceのジョブを動かすと、動かした結果が表示されます。試しにsleepジョブを流してみます。
MapReduceジョブも表示されました。
これで、Hadoop/HBaseを可視化する準備ができました。次回は、より複雑なMapReduceジョブを実行した結果を、halookで解析します。