第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で解析します。