火曜日, 12月 21, 2010

mahoutでkmeans!

以下HADOOP_CLASSPATHを設定して、

$ export HADOOP_CLASSPATH=dependency/mahout-math-0.4.jar:dependency/mahout-core-0.4.jar:dependency/mahout-utils-0.4.jar:dependency/google-collections-1.0-rc2.jar:dependency/gson-1.3.jar:dependency/mahout-collections-1.0.jar:dependency/commons-cli-2.0-mahout.jar

以下を実行。なぜかKMeansはhadoopがローカルで待ち受けていないと動かない様子。

$ ~/hadoop-0.20.2/bin/hadoop jar mahout-examples-0.4.jar org.apache.mahout.clustering.display.DisplayKMeans

以下は、Hadoopが待ち受けていなくても動きますが、クラスがpublic宣言されていないのでソースを書きかえる必要がありました。

$ ~/hadoop-0.20.2/bin/hadoop jar mahout-examples-0.4.jar org.apache.mahout.clustering.display.DisplayCanopy

mahoutにGUIが付いていることは、意外にしられていないのでは、と思います。

火曜日, 12月 07, 2010

mahoutでTSP!

mahoutの中には、TSP(Travelling Salesman Problem / 巡回セールスマン問題)のが入っています。一応GUIも付いてます。でも、なぜかsrc版からコンパイルしないと動きません。


うーん。。地味。もっと派手なのかと思ったのですが(AWT入ってるからバイナリのやつだと動かないのかな)。ちなみにmahoutはTESTを回すと準備にかなり時間がかかるので、
$ mvn install -Dmaven.test.skip=true

とやるのが良いようです。そして以下で起動。
$ ~/hadoop-0.20.2/bin/hadoop jar examples/target/mahout-examples-0.4-job.jar org.apache.mahout.ga.watchmaker.travellingsalesman.TravellingSalesman

しかし、Hadoopでやらせる(チェックをつける)と、outputパスがもうあるから書けないよ!と文句を言われるのだけど、これはどうすればよいのだろう。
MahoutEvaluator.javaの中でoutputって定義してあるから、複数回(Generationの分だけ)この評価を回したら、そらバッティングすると思うんだけど。。?(これはHDFS上のホームディレクトリというか、/user/~/outputとかのようにできる)
このディレクトリを、ランダム文字列付きとして実行したら最後まで動くことは動いた。

なお、cygwinなどでローカル実行するときは、Generationを(デフォルトの100から)低い数字にしておかないと大変な時間がかかるので注意。