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以降にアップグレードした方がいいかも。
以上、疲れた。