2014年2月27日木曜日

Ubuntu 13.10 x64 + Hadoop 1.2.1 + Mahout 0.9

Mahout 0.9 のインストールでいろいろ引っかかったのでメモ。

Ubuntu13.10 x64にmahoutユーザでインストール。

ひっかかってた最大の理由はMahout0.9が前提にしているHadoopのバージョンが1.2.1ってことに気づくのが遅かったからでした(Mahout0.9のパッケージの中にlib/hadoop/hadoop-core-1.2.1.jarってのがあった)。

  • sshd準備

# apt-get install openssh-server
$ ssh-keygen -t rsa -P ""
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys


  • IPv6停止(他サイトの受け売り)

# vi /etc/sysctl.conf
(追加)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# reboot


  • JDKインストール

$ tar zxvf jdk-7u51-linux-x64.tar.gz
# mv jdk1.7.0_51 /usr/local
# ln -s /usr/local/jdk1.7.0_51 /usr/local/jdk


  • Hadoopインストール

$ tar zxvf hadoop-1.2.1.tar.gz
# mv hadoop-1.2.1 /usr/local
# ln -s /usr/local/hadoop-1.2.1 /usr/local/hadoop

$ vi /usr/local/hadoop/conf/hadoop-env.sh
(追加)
export JAVA_HOME=/usr/local/jdk

$ vi /usr/local/hadoop/conf/core-site.xml
(追加)
  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
  </property>

$ vi /usr/local/hadoop/conf/hdfs-site.xml
(追加)
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>dfs.name.dir</name>
    <value>/home/hadoop/dfs/name</value>
  </property>
  <property>
    <name>dfs.data.dir</name>
    <value>/home/hadoop/dfs/data</value>
  </property>

$ vi /usr/local/hadoop/conf/mapred-site.xml
(追加)
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
  </property>
  <property>
    <name>mapred.local.dir</name>
    <value>/home/hadoop/mapred</value>
  </property>

hdfs-site.xmlのdfs.name.dir、dfs.data.dirあたりは書いておかないと/tmpの下に作られるため、システムリブートの度に消されてあとでイラっときます。

  • Mahoutインストール

$ tar zxvf mahout-distribution-0.9.tar.gz
# mv mahout-distribution-0.9 /usr/local
# ln -s /usr/local/mahout-distribution-0.9 /usr/local/mahout


  • 環境設定

(追加)
JAVA_HOME=/usr/local/jdk
HADOOP_HOME=/usr/local/hadoop
MAHOUT_HOME=/usr/local/mahout
PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${MAHOUT_HOME}/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
export JAVA_HOME MAHOUT_HOME PATH
$ exit


  • ネームノードフォーマット

$ hadoop namenode -format


  • Hadoop起動

$ start-all.sh
$ jps
4917 JobTracker
4539 NameNode
5105 Jps
4680 DataNode
4832 SecondaryNameNode
5060 TaskTracker

6つ起動しない場合は/usr/local/hadoop/logsの下の*.logを参照。ちょっとしたことで動かなくなったりします。

で、ここでMahoutのサンプル起動しますがエラーになります。

$ cd /usr/local/mahout/examples/bin
$ ./classify-20newsgroups.sh
Please select a number to choose the corresponding task to run
1. cnaivebayes
2. naivebayes
3. sgd
4. clean -- cleans up the work area in /tmp/mahout-work-mahout
Enter your choice : 2
    :
    :
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/mahout-work-mahout/20news-all


いろいろ調べた結果、このサンプルはデータをネットワークからダウンロードしますが、環境変数HADOOP_HOMEが設定されていないとhdfs上にコピーしてくれません。
HADOOPはHADOOP_HOME設定してると「Warning: $HADOOP_HOME is deprecated.」って文句行ってくるのにMahoutのサンプルはそれを前提にしているってオチでした。


$ export HADOOP_HOME=/usr/local/hadoop


すると今度は動きます。


=======================================================
Statistics
-------------------------------------------------------
Kappa                                       0.8753
Accuracy                                   90.3805%
Reliability                                85.7215%
Reliability (standard deviation)            0.2163

14/02/27 13:45:07 INFO driver.MahoutDriver: Program took 18474 ms (Minutes: 0.3079)


まだ不完全なんだなという印象。

0 件のコメント:

コメントを投稿