Category Archives: Hadoop

[Java]Solr1.4.1をTomcat6へインストール(Windows版)

以前から興味があった全文検索エンジン「Solr」を触ってみる。
この記事ではWindowsへのインストールのみ解説している。

0.前提
Tomcatは、以下のディレクトリにインストールされているものとする。

C:\Program Files\Apache Software Foundation\Tomcat 6.0

1.ダウンロード
以下のURLからダウンロード先を選択し、apache-solr-1.4.1.zipをダウンロード
http://www.apache.org/dyn/closer.cgi/lucene/solr/
※URLによってはSolr1.4.1が無い場合もあるのでよく探す

2.zip解凍
ダウンロードしてきたapache-solr-1.4.1.zipをzip解凍する

3.アプリケーションをTomcatに設置
以下、指定のwarファイルを指定のTomcatディレクトリへ移動する。
・移動するファイル

apache-solr-1.4.1/example/webapps/solr.war

・移動先のTomcatディレクトリ

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps

4.warファイルを解凍し設定ファイル設置
先ほど設置したsolr.warをzip解凍する。

以下2つのフォルダを解凍したフォルダ内に設置する。
移動するフォルダ

apache-solr-1.4.1\example\solr\bin
apache-solr-1.4.1\example\solr\conf

移動先のフォルダ

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\solr

5.Tomcatの設定ファイルを作成
Web画面上からSolrアプリケーションが見れるように、
Tomcatの設定ファイルを作成する。

・作成するファイル

C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\Catalina\localhost\solr.xml

・ファイルの内容

<Context docBase="solr" debug="0" crossContext="true">
	<Environment name="solr/home" type="java.lang.String"
		value="C:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/solr"
		override="true" />
</Context>

6.Tomcatを起動
Tomcatを起動し、以下のURLへ接続する。

http://localhost:8080/solr/admin

この間にエラーが出たらなんか間違えてるので、
一から読み直すかあきらめてください。

7.参考URL
http://ymotoba.blogspot.com/2008/10/solr.html
※まんま同じ作業を行ないました

[お役立ちリンク]Hadoop→HBaseのインストール

先日、HadoopとHBaseをインストールしていた時に
今まで見た中で一番分かりやすい解説ページがあったので紹介する。

■Hadoop/Hbase Clusterの構築
http://lunarium.info/arc/index.php/Hadoop/Hbase_Cluster%E3%81%AE%E6%A7%8B%E7%AF%89

これで簡単に「話題のクラウド化」へ!?

「Hypertable」をインストールしてみた。Hadoopと合体させたい

GigazineでHypertableの記事があったので、

本家のサイトを見ていると「Up and Running with Hadoop」という文字が!

気になるのでHypertableをインストールしてみた。

一応、HowToInstallを見ればインストールできるのだが、

やはり英語なので日本語で解説する。



■環境

インストール先:/home/hadoop/hypertable



■Hypertableをインストールする前に

あらかじめ以下の6つのソフトウェアをインストールする必要がある。

6つのインストール作業は全てrootユーザーで行なう。

1.cmake-2.4.8.tar.gz(http://www.cmake.org/)

2.boost_1_34_1.tar.gz(http://www.boost.org/)

3.log4cpp-1.0.tar.gz(http://log4cpp.sourceforge.net/)

4.expat-2.0.1.tar.gz(http://sourceforge.net/projects/expat)

5.google-perftools-0.94.1.tar.gz(http://code.google.com/p/google-perftools/)

6.git-1.5.4.tar.gz(http://git.or.cz/)


$ wget パッケージ
$ tar -xvzf パッケージ.tar.gz
$ cd パッケージ/
$ ./configure
$ make
$ make install



■Hypertableのインストール

これからインストールを行なう。

私の場合はhadoopというユーザーで処理を行なう。

$ su - hadoop
$ mkdir ~/src
$ cd ~/src
$ git clone git://scm.hypertable.org/pub/repos/hypertable.git
$ mkdir ~/hypertable
$ mkdir -p ~/build/hypertable
$ cd ~/build/hypertable
$ cmake -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE="Debug" ~/src/hypertable

さて、ここまでで正常に動いている人は、その後勝手にしてもらってよい。

私の場合、cmakeの時点でエラーが発生し、インストールできない事態になった。



結論からいうと、「gccのバージョンが3.4だったから」っぽい。

詳細は次項で。



■cmake時にエラー発生

前項で行なったcmake時に以下のようなエラーが発生した。

Boost thread library was not found

cmakeは指定したディレクトリ以下のソースをコンパイルする的な話らしいが、

それがうまくいかなかった。

エラーの通り「Boost thread」が無いとのこと。



どの辺でエラーがでているのか確認する。

vi /home/hadoop/src/hypertable/cmake/FindBoost.cmake

先ほどのエラー文「Boost thread library…」を検索する。

するとIF文が14通りくらい存在し、どうにかしてlibboost_threadを

探そうとしているようだ。

ちなみに「${Boost_LIBRARY_DIR}」を出力してみたが「/usr/local/lib」となっていた。

で、viは閉じてlibboost_threadがどこに存在するかを確認する。

$ locate libboost_thread
/usr/local/lib/libboost_thread-gcc34-mt-1_34_1.a
/usr/local/lib/libboost_thread-gcc34-mt.a
/usr/local/lib/libboost_thread-gcc34-mt-1_34_1.so
/usr/local/lib/libboost_thread-gcc34-mt-d-1_34_1.so.1.34.1
/usr/local/lib/libboost_thread-gcc34-mt-d.so
/usr/local/lib/libboost_thread-gcc34-mt-d-1_34_1.a
/usr/local/lib/libboost_thread-gcc34-mt-1_34_1.so.1.34.1
/usr/local/lib/libboost_thread-gcc34-mt-d-1_34_1.so
/usr/local/lib/libboost_thread-gcc34-mt.so
/usr/local/lib/libboost_thread-gcc34-mt-d.a
/usr/lib/libboost_thread.so.1
/usr/lib/libboost_thread.a
/usr/lib/libboost_thread.so.1.32.0

14通りほどのIF文の先頭が一応「libboost_thread-mt.a」だったので、

それを優先して読み込ませるようにしたい。

だが「libboost_thread-mt.a」が存在しない。

多分「libboost_thread-gcc34-mt.a」が「libboost_thread-mt.a」に相当するものっぽいので、

シンボリックリンクでごまかす。

$ su -
$ ln -s /usr/local/lib/libboost_thread-gcc34-mt.a /usr/local/lib/libboost_thread-mt.a
$ ln -s /usr/local/lib/libboost_thread-gcc34-mt.so /usr/local/lib/libboost_thread-mt.so
※2つシンボリックリンクをつける必要はないのだが、失敗したくないので。



再度、cmakeを行なう・・・うまくいった。

では、次の段階makeを行なう。

$ make

違うエラーが発生した。エラーを見ると以下が駄目っぽい。

-Wno-variadic-macros

それならオプション部分を除去しちゃう。

$ vi /home/hadoop/src/hypertable/CMakeLists.txt

この中から以下の部分を探す。(29行目あたり)

修正前:add_definitions(-Wall -pedantic -Wno-long-long -Wno-variadic-macros)
修正後:add_definitions(-Wall -pedantic -Wno-long-long)

これで再度cmakeから実行。

$ cd ~/build/hypertable
$ rm ./* ←※前回cmakeを行なった時のファイルが残っているので消去する
$ cmake -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE="Debug" ~/src/hypertable

はい、成功。

$ make
$ make install DESTDIR=/home/hadoop/hypertable

はい、成功。



■よくわかんねぇけどマウント設定

Hypertableのインストールがやっと終わったのに、

なんだかmountを行なわなくてはいけない?

これを行なうことでどうなるかは知ったことではないが、ここまできたら行くところまで行く。

インストールしたディレクトリのmountを行なう。

私の場合は/home/hadoop/hypertableにインストールしたので、

「/」以下がmount対象となるのかな?

$ vi /etc/fstab

該当するパスにuser_xattrを追加する。

修正前:LABEL=/	/	ext3	defaults	1	1
修正後:LABEL=/	/	ext3	defaults,user_xattr	1	1

マウント実行。

$ mount -o remount /

何も出力されないからうまくいったっぽい。



■最後にHypertable起動

やっとここまできた。

Hypertableを起動しちゃう。

$ su - hadoop
$ cd ~/hypertable
$ bin/kill-servers.sh
$ bin/start-all-servers.sh local



というわけで結果的にgccのバージョン4以降にアップグレードした方がいいかも。

以上、疲れた。

Apache HadoopでClusterをセットアップしてみた。でも・・・

Hadoop Clusterについて試してみた。



■今回の環境

・JAVA_HOME=/usr/java/j2sdk

・Java version 1.5.0_10

・HADOOP_HOME=/home/hadoop/hadoop-0.15.3

・hadoop起動で出力されるファイルたちの保存ディレクトリ

  /home/hadoop/filesystem

・マスターサーバ1台、スレーブサーバ1台で

  masterが192.168.0.5

  slaveが192.168.0.8



■必須項目

Java 1.5がインストールされているか確認する。

sshがインストールされてて、sshdが動いているか確認する。



■インストール

http://lucene.apache.org/hadoop/releases.htmlからパッケージをダウンロード。



対象とするマシン全てに設置する。

この時、設置するディレクトリは全て同じにすべし。

今回の場合は、HADOOP_HOME=/home/hadoop/hadoop-0.15.3とする。



■conf/hadoop-env.sh

JAVA_HOMEを編集する。マスター側だけ?

export JAVA_HOME=/usr/java/j2sdk



■conf/hadoop-site.xml

編集が必須の設定ファイル。マスター側だけ?

<configuration>
	<property>
		<name>fs.default.name</name>
		<value>localhost:9000</value>
	</property>
	<property>
		<name>mapred.job.tracker</name>
		<value>localhost:9001</value>
	</property>
	<property>
		<name>dfs.name.dir</name>
		<value>/home/hadoop/filesystem/dfs/name</value>
	</property>
	<property>
		<name>dfs.data.dir</name>
		<value>/home/hadoop/filesystem/dfs/data</value>
	</property>
	<property>
		<name>mapred.system.dir</name>
		<value>/home/hadoop/filesystem/mapred/system</value>
	</property>
	<property>
		<name>mapred.local.dir</name>
		<value>/home/hadoop/filesystem/mapred/local</value>
	</property>
</configuration>

Hadoop Cluster Setupには上記以外のパラメータも存在しているが、

設定しなくてもよいみたいなので無視。



■conf/slaves

スレーブとなるマシンのIPを入力する。マスター側だけ?

なお1行1IPで記述する。

192.168.0.8



■Hadoopの起動

ひとまず初期化。多分これは一度のみしか行なってはいけないっぽい。マスター側だけ?

$ ./bin/hadoop namenode -format



マスターにしか存在してはいけない「NameNode」と

マスターにしか存在してはいけない「JobTracker」を起動する。

秘密鍵を作成していないので、パスワードを入力することになる。

$ ./bin/start-dfs.sh
starting namenode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-namenode-hoge.out
hadoop@192.168.0.8's password:
192.168.0.8: starting datanode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-datanode-hoge.out
hadoop@localhost's password:
localhost: starting secondarynamenode, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-secondarynamenode-hoge.out

$ ./bin/start-mapred.sh
starting jobtracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-jobtracker-hoge.out
hadoop@192.168.0.8's password:
192.168.0.8: starting tasktracker, logging to /home/hadoop/hadoop/hadoop-0.15.3/bin/../logs/hadoop-hadoop-tasktracker-hoge.out



これでスレーブ(slave)側にもプロセスが立ち上がっているかチェックしてみる。

(スレーブ側)
$ ps -ux
hadoop   29702  0.1  1.4 1324880 45176 ?     Sl   01:29   0:00 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.log.dir=/home
hadoop   30199  0.3  1.6 1329036 50108 ?     Sl   01:31   0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhadoop.log.dir=/home



これで一通りの「Hadoop Cluster Setup」が完了したっぽい。

で?どうするか。

Apache Hadoopの「Hadoop Quickstart」をそのまま試してみた。でも・・・

以前から興味があったので、Hadoopを触ってみた。

Hadoopとは、要はGoogle File System (GFS)をパクッたようなもん。

もしこれでパフォーマンスが向上するならば、今後使用するかも。



■Hadoop Quickstart

http://hadoop.apache.org/core/docs/current/quickstart.html



1.環境変数にJAVA_HOMEを設定する。



2.http://hadoop.apache.org/core/releases.htmlからhadoop-0.15.3.tar.gzをダウンロード



3.${HADOOP_HOME}/conf/hadoop-env.shを開き、JAVA_HOMEを設定

export JAVA_HOME=/usr/java/j2sdk



4.新しく作成したinputディレクトリに

設定ファイル(hadoop-default.xml,hadoop-site.xml)をコピーする。

$ mkdir input
$ cp conf/*.xml input



5.よく分かんないけど、コマンド打ってみる。

$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
$ cat output/*



6.${HADOOP_HOME}/conf/hadoop-site.xmlを開く。

configurationの中身が書いていないので、ひとまずマニュアル通り埋めてみる。

<configuration>
        <property>
                <name>fs.default.name</name>
                <value>localhost:9000</value>
        </property>
        <property>
                <name>mapred.job.tracker</name>
                <value>localhost:9001</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>



7.sshのpassphraseを設定する。

マニュアルをそのまま実行する。

$ ssh localhost
ssh_exchange_identification: Connection closed by remote host

こんなエラーが出たので/etc/hosts.allowに127.0.0.1を追加して接続許可。



8.よくわからんけど、マニュアルにしたがってコマンド実行。

$ bin/hadoop namenode -format
$ bin/start-all.sh
starting namenode, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-namenode-hoge.out
hoge@localhost's password:XXXXXXXXXXXXXX
localhost: starting datanode, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-datanode-hoge.out
hoge@localhost's password:XXXXXXXXXXXXXX
localhost: starting secondarynamenode, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-secondarynamenode-hoge.out
starting jobtracker, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-jobtracker-hoge.out
hoge@localhost's password:XXXXXXXXXXXXXX
localhost: starting tasktracker, logging to /home/hoge/hadoop/bin/../logs/hadoop-hadoop-tasktracker-hoge.out



無事起動したようだ。psコマンドでプロセスを見るとなんか動いてる。

hoge    4546  0.4  1.5 1253468 31960 pts/1 Sl   01:08   0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home...
hoge    4654  0.3  1.3 1245276 28476 ?     Sl   01:08   0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home...
hoge    4754  0.4  1.4 1244016 29280 ?     Sl   01:08   0:02 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home...
hoge    4815  0.4  1.4 1252616 30092 pts/1 Sl   01:08   0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home...
hoge    4933  0.4  1.4 1247276 29020 ?     Sl   01:08   0:01 /usr/java/j2sdk/bin/java -Xmx1000m -Dhoge.log.dir=/home...



9.ブラウザで起動状況を確認できるようだ。







「Hadoop Quickstart」を行ってみたが、これで何ができるかはまだ不明。

どうするか。