Hadoop上で動く機械学習ライブラリMahoutを入れてみる。
# yum -y install mahout
(省略)
====================================================================================================
Package Arch Version Repository Size
====================================================================================================
Installing:
mahout noarch 0.9+cdh5.3.1+18-1.cdh5.3.1.p0.17.el6 cloudera-cdh5 64 M
Installing for dependencies:
hadoop-0.20-mapreduce x86_64 2.5.0+cdh5.3.1+791-1.cdh5.3.1.p0.17.el6 cloudera-cdh5 28 M
hadoop-client x86_64 2.5.0+cdh5.3.1+791-1.cdh5.3.1.p0.17.el6 cloudera-cdh5 31 k
hbase x86_64 0.98.6+cdh5.3.1+74-1.cdh5.3.1.p0.17.el6 cloudera-cdh5 47 M
Transaction Summary
====================================================================================================
Install 4 Package(s)
(省略)
依存関係のあるパッケージも含めて完了。
hadoop-0.20-mapreduceがインストールされたのはちょっと気になる。
なぜMRv1に依存?YARNでは動かないということだろうか。
ただ、MRv1がインストールされてもJobTrackerやTaskTrackerはサービス登録されていない様子。もしこのまま動くならYARN上で動いているということに。
サンプルを動かしてみる。
とりあえず以下のサイトに載っているものを。
Mahoutで体感する機械学習の実践 第3回 Mahoutの環境構築とFP-Growthによるマーケットバスケット分析
$ wget http://image.gihyo.co.jp/assets/files/dev/serial/01/mahout/0003/gihyo-mahout-fpg-sample.csv
$ mahout fpg -i gihyo-mahout-fpg-sample.csv -o output/gihyo-mahout-fpg-sample
(省略)
15/02/25 23:20:00 WARN driver.MahoutDriver: Unable to add class: fpg
java.lang.ClassNotFoundException: fpg
(省略)
エラー。調べたところ、どうやらMahout 0.9からFP-Growthはなくなったらしい。
そんな簡単にアルゴリズムが消えるなんて、怖くて使えない。。。
仕方ないので、別のアルゴリズムのサンプルでも。
今度は以下のサイトのものを。
Mahoutで体感する機械学習の実践 第5回 K-MeansとCanopyクラスタリングでセグメンテーション分析を行う
$ wget http://image.gihyo.co.jp/assets/files/dev/serial/01/mahout/0005/gihyo-mahout-kmeans-sample.arff
$ mahout arff.vector --input gihyo-mahout-kmeans-sample.arff --output gihyo-mahout-kmeans-sample.vector --dictOut gihyo-mahout-kmeans-sample.dict
$ mahout kmeans --input gihyo-mahout-kmeans-sample.vector --output gihyo-kmeans-output --maxIter 50 --numClusters 10 --clusters gihyo-kmeans-null-cluster --clustering -dm org.apache.mahout.common.distance.EuclideanDistanceMeasure
(省略)
15/02/26 00:14:39 INFO driver.MahoutDriver: Program took 684308 ms (Minutes: 11.405133333333334)
–maxIter(クラスタ重心点の最大計算回数)に50をセットしたせいか、MapReduceが33段も動いてえらく時間がかかった。でも、結局MRv1ではなくYARN上のMRv2で動いたよう。
出力結果を見てみる。
$ hadoop fs -ls -R gihyo-kmeans-output
(省略)
drwxr-xr-x - take supergroup 0 2015-02-26 00:14 gihyo-kmeans-output/clusters-33-final
-rw-r--r-- 1 take supergroup 0 2015-02-26 00:14 gihyo-kmeans-output/clusters-33-final/_SUCCESS
-rw-r--r-- 1 take supergroup 194 2015-02-26 00:14 gihyo-kmeans-output/clusters-33-final/_policy
-rw-r--r-- 1 take supergroup 2633 2015-02-26 00:14 gihyo-kmeans-output/clusters-33-final/part-r-00000
(省略)
finalが付いているのが最終出力らしい。
中身を見てみる。
$ mahout clusterdump --input gihyo-kmeans-output/clusters-33-final --output ./gihyo-kmeans-dump.txt
$ cat gihyo-kmeans-dump.txt
VL-699{n=92 c=[74.815, 69.804, 13.402] r=[13.741, 16.057, 9.035]}
VL-733{n=95 c=[23.189, 83.537, 25.747] r=[13.245, 11.736, 13.585]}
VL-124{n=103 c=[18.505, 75.049, 74.388] r=[11.747, 14.355, 14.764]}
VL-669{n=106 c=[21.613, 25.462, 24.311] r=[14.588, 14.396, 14.659]}
VL-992{n=93 c=[50.312, 45.806, 43.602] r=[11.221, 12.955, 11.853]}
VL-90{n=98 c=[23.133, 21.051, 79.714] r=[13.375, 13.353, 13.786]}
VL-172{n=104 c=[66.683, 72.288, 84.462] r=[16.433, 15.380, 10.757]}
VL-977{n=98 c=[80.327, 81.388, 49.092] r=[13.999, 12.359, 13.020]}
VL-329{n=105 c=[73.524, 21.086, 83.914] r=[14.420, 13.686, 11.711]}
VL-864{n=106 c=[79.698, 17.934, 31.972] r=[12.508, 12.466, 16.247]}
無事に動いたようなので今回はこれで終わり。