halookで始めるHadoop/HBaseトラブルシューティング

第2回halookのセットアップ

第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つです。

  1. HalookJavelinFull_5.0.2.zip
  2. endosnipe-datacollector-5.0.2.tar.gz
  3. 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の起動①
図1 halookの起動①
図2 halookの起動②
図2 halookの起動②

MapReduceのジョブを動かすと、動かした結果が表示されます。試しにsleepジョブを流してみます。

$ hadoop jar /usr/lib/hadoop/hadoop-examples.jar sleep -m 14 -mr 2 -mt  15000 -rt 25000
図3 sleepジョブを流してみたところ①
図3 sleepジョブを流してみたところ①
図4 sleepジョブを流してみたところ②
図4 sleepジョブを流してみたところ②

MapReduceジョブも表示されました。

これで、Hadoop/HBaseを可視化する準備ができました。次回は、より複雑なMapReduceジョブを実行した結果を、halookで解析します。

おすすめ記事

記事・ニュース一覧