Jubatusのインストール記録

VagrantでJubatusをインストールしたときのメモ。インストールディレクトリがチュートリアルと異なっていたのが印象的。そしてTimeout Errorで盛大にハマりました・・・。

ちょっと分類器を使ってみたいテーマがあったのでJubatusを試してみました。

環境

  • Ubuntu14
  • python3

参考にしたURL

まぁ、まんまなのですがJubatusチュートリアルを参考にしました。この投稿はそのチュートリアルの補完的なものと思ってもらえれば。

Jubatusのレポジトリをレポジトリリストに登録

では早速。まずはaptにJubatusのレポジトリを追加します。

$ sudo vim /etc/apt/sources.list.d/jubatus.list
# 以下の一行を記述
deb http://download.jubat.us/apt binary/

$ sudo apt-get update
$ sudo apt-get install jubatus

クライアントライブラリインストール

次にpython3のクライアントライブラリをインストール。pipのインストールから書いておきます。python3を使っているので、それ前提です。

$ sudo apt-get install python3-pip
$ sudo pip3 install jubatus

環境変数定義

Jubatusを起ち上げるには環境変数を定義しておかねばなりません。 インストールディレクトリ(私は/opt/jubatus/でした)の下にあるprofileを読み込みます。

$ source /opt/jubatus/profile

なお、profileファイルの中身はこんな感じ。

export JUBATUS_HOME="/opt/jubatus"
export PATH="${JUBATUS_HOME}/bin:${PATH}"
export LD_LIBRARY_PATH="${JUBATUS_HOME}/lib:${LD_LIBRARY_PATH}"
export LDFLAGS="-L${JUBATUS_HOME}/lib ${LDFLAGS}"
export CPLUS_INCLUDE_PATH="${JUBATUS_HOME}/include:${CPLUS_INCLUDE_PATH}"
export PKG_CONFIG_PATH="${JUBATUS_HOME}/lib/pkgconfig:${PKG_CONFIG_PATH}"
export MANPATH="${JUBATUS_HOME}/share/man:${MANPATH}"

sourceコマンドで毎回設定するのは面倒という方は、ユーザーディレクトリ以下にある.profileに追記しておきます。末尾に追記しておいていいです。

$ vim ~/.profile

追記後はこんな感じです。

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

export JUBATUS_HOME="/opt/jubatus"
export PATH="${JUBATUS_HOME}/bin:${PATH}"
export LD_LIBRARY_PATH="${JUBATUS_HOME}/lib:${LD_LIBRARY_PATH}"
export LDFLAGS="-L${JUBATUS_HOME}/lib ${LDFLAGS}"
export CPLUS_INCLUDE_PATH="${JUBATUS_HOME}/include:${CPLUS_INCLUDE_PATH}"
export PKG_CONFIG_PATH="${JUBATUS_HOME}/lib/pkgconfig:${PKG_CONFIG_PATH}"
export MANPATH="${JUBATUS_HOME}/share/man:${MANPATH}"

反映するために.profileを読み込みます。

$ source ~/.profile

全てのユーザに環境変数を設定したいという人は/etc/profileに追記すれば良いです。

$ sudo vim /etc/profile
$ sudo source /etc/profile

分類器をバックグラウンドで実行してみる

環境変数が設定されたらJubatusが使えるはずです。チュートリアルに沿って分類器を起動してみましょう。今回はバックグラウンド起動します。

$ jubaclassifier -f /opt/jubatus/share/jubatus/example/config/classifier/pa.json &

# 起動確認
$ ps awx | grep jubaclassifier

# 問題なければkillしておきます
$ kill -9 xxxxx

チュートリアル準備

ここはあまり考えずさくさくいけます。

$ sudo apt-get install git
$ git clone https://github.com/jubatus/jubatus-tutorial-python.git
$ cd jubatus-tutorial-python
$ wget http://qwone.com/~jason/20Newsgroups//20news-bydate.tar.gz
$ tar xvzf 20news-bydate.tar.gz
$ jubaclassifier --configpath config.json &
$ python3 tutorial.py

上手くいけばこんなリストがたくさん出ます。

OK,rec.sport.baseball, rec.sport.baseball, 0.865868091583252
OK,comp.windows.x, comp.windows.x, 0.6095645427703857
NG,comp.os.ms-windows.misc, comp.graphics, 0.67635577917099
OK,comp.sys.mac.hardware, comp.sys.mac.hardware, 0.7203484773635864
NG,sci.crypt, sci.electronics, 0.48412221670150757
NG,rec.motorcycles, sci.space, 0.31272074580192566
OK,comp.sys.ibm.pc.hardware, comp.sys.ibm.pc.hardware, 0.6706023216247559
OK,rec.sport.baseball, rec.sport.baseball, 1.4062193632125854
NG,comp.os.ms-windows.misc, comp.sys.mac.hardware, 1.0363414287567139
OK,sci.crypt, sci.crypt, 1.4429230690002441
OK,rec.autos, rec.autos, 0.3802572786808014
OK,misc.forsale, misc.forsale, 1.2790473699569702
OK,sci.space, sci.space, 1.8048734664916992
NG,talk.politics.misc, talk.politics.guns, 0.5287462472915649
OK,sci.med, sci.med, 0.584435760974884
NG,sci.electronics, soc.religion.christian, 0.3711654841899872
OK,talk.politics.guns, talk.politics.guns, 1.4940108060836792
OK,rec.sport.hockey, rec.sport.hockey, 1.0699224472045898

途中でtimedout errorが出たらtimeoutを伸ばしましょう。

$ jubaclassifier --configpath config.json --timeout 1000 &

それでもダメならVagrantのメモリの割り当てを増やしてみてください。私は1GBでちゃんと動きました。エラーメッセージが分かりにくいのでだいぶハマりましたが・・・。

参考:Jubatusのtimed out errorがtimed out error じゃなくて嵌った件