萬事開頭難,上午看了一下基於物品的協同過濾的算法的原理,於是下午決定練練手。
本以爲按照書上的命令來敲會很順利,然而好事多磨,花了大半個下午才搞好。
剛開始就發現我看得書上的命令有問題,真是坑,又找了另一本mahout的書來看。
先在hdfs下建好相應的文件夾,並把輸入文件傳上去。
然後敲如下一段正確的命令:
hadoop jar /usr/local/mahout-distribution-0.9/mahout-examples-0.9-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -i /test/input/user_item.txt -o /item/output -n 3 -b false -s SIMILARITY_EUCLIDEAN_DISTANCE --maxPrefsPerUser 7 --minPrefsPerUser 2 --maxPrefsPerUser 2
然而敲命令運行之後,還是報錯了,報錯如下:
java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
at org.apache.mahout.common.HadoopUtil.getCustomJobName(HadoopUtil.java:174)
at org.apache.mahout.common.AbstractJob.prepareJob(AbstractJob.java:614)
at org.apache.mahout.cf.taste.hadoop.preparation.PreparePreferenceMatrixJob.run(PreparePreferenceMatrixJob.java:73)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
上網搜了一下,找到了一篇比較靠譜的博文,發現是mahout下面一個jar包的問題,奈何人家編譯好的jar包是mahout0.9的,所以我只能刪掉原來的0.7,再安裝配置一個0.9的。
然後,把人家編譯好的jar包放到mahout裏面去,再次執行命令,解決了一些小錯誤之後,終於跑出了個結果,也是不容易啊。
參考自下文: