第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.connectHost=(Datacollectorのホスト名)
javelin.clusterName=mycluster
javelin.clusterNameは、デフォルト値が「default」となっていますが、必ず変更する必要があります。ここでは、「 mycluster」と設定します。設定した名前が、画面表示の際に使われます。また、このクラスタ名を変えることにより、複数のクラスタを同時に監視することができます。
次に、NameNode, JobTracker, HBaseMasterが同じマシン上で動いているときは、それぞれのHalookJavelinインストールディレクトリを分ける必要があるので、ディレクトリごとコピーします。また、Javelin実行時のログ出力の関係上、NameNode用のHalookJavelinインストールディレクトリはhdfsユーザに、JobTracker用はmapredユーザに、HBaseMaster用はhbaseユーザに、オーナーを変更しておきます。NameNode, JobTracker, HBaseMasterが別々のマシン上で動いているときは、ディレクトリ名の変更は必要ありません。オーナーの変更のみが必要です。
# cd /opt/ENdoSnipe
# cp -rp HalookJavelin HalookJavelin_NN
# cp -rp HalookJavelin HalookJavelin_JT
# mv HalookJavelin HalookJavelin_HM
# chown -R hdfs:hdfs HalookJavelin_NN
# chown -R mapred:mapred HalookJavelin_JT
# chown -R hbase:hbase HalookJavelin_HM
続いて、/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プロセス起動時にロードされるようにします。
/etc/hadoop/conf/hadoop-env.sh
export HADOOP_NAMENODE_OPTS="-javaagent:/opt/ENdoSnipe/HalookJavelin_NN/lib/halookJavelin.jar -Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"
export HADOOP_JOBTRACKER_OPTS="-javaagent:/opt/ENdoSnipe/HalookJavelin_JT/lib/halookJavelin.jar -Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"
HBaseMasterについては、-javaagentオプションを加えて、HalookJavelinがJavaプロセス起動時にロードされるように、以下の1行をファイル中に追加します。
/etc/hadoop/conf/hadoop-env.sh
export HBASE_MASTER_OPTS="-javaagent:/opt/ENdoSnipe/HalookJavelin_HM/lib/halookJavelin.jar"
最後に、NameNode、JobTracker、HBaseMasterを再起動すれば、HalookJavelinの適用は完了です。
②データ収集サーバの設定
endosnipe-datacollector-5.0.2.tar.gzを任意のディレクトリに展開します。ここでは、/opt/ENdoSnipeの下に展開したものと仮定します。配置後、設定ファイルを編集します。設定するのは、接続先のPostgreSQL DBサーバのホスト名などの情報と、自分自身が動いているサーバのホスト名です。
設定ファイルは、(DataCollectorインストールディレクトリ) /conf/collector.propertiesになります。
環境に合わせて変更が必要な項目
# Database host address
database.host=(PostgreSQL DBサーバのホスト名)
# Database port number
database.port=5432
# Database Name
database.name=endosnipedb
# Database login user name
database.username=postgres
# Database login password
database.password=postgres
# Host Name
accept.host=(Datacollectorのホスト名)
編集後、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を起動します。
# cd /opt/ENdoSnipe/DataCollector/bin
# ./endosnipe-dc start
③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.xmlの変更箇所付近を抜粋
<init-param>
<param-name>collector.property</param-name>
<!-- 以下の値を、collector.properties があるディレクトリに設定してください -->
<param-value>/opt/ENdoSnipe/DataCollector/conf/collector.properties</param-value>
</init-param>
以上で設定は完了です。
Webブラウザ(今回はFirefox)から、以下のURLを開いてください。
http://(Web APサーバ):8080/HalookDashboard/halook
以下のような画面が現れれば成功です。図は、スレーブが3台の場合の例です。
図1 halookの起動①
図2 halookの起動②
MapReduceのジョブを動かすと、動かした結果が表示されます。試しにsleepジョブを流してみます。
$ hadoop jar /usr/lib/hadoop/hadoop-examples.jar sleep -m 14 -mr 2 -mt 15000 -rt 25000
図3 sleepジョブを流してみたところ①
図4 sleepジョブを流してみたところ②
MapReduceジョブも表示されました。
これで、Hadoop/HBaseを可視化する準備ができました。次回は、より複雑なMapReduceジョブを実行した結果を、halookで解析します。