mahout

  • 格式:doc
  • 大小:18.92 KB
  • 文档页数:20

mahoutmahout目录preface1 使用kmeans算法实例2 mahout杂记3 mahout聚类算法4 mahout运行bayes(贝叶斯)算法preface运行自带的例子来进行测试第1章使用kmeans算法实例(1)/ml/databases/synthetic_control /synthetic_control.data点击链接,下载数据集synthetic_control.data。

将数据集synthetic_control.data放到MAHOUT_HOME目录下面,(注意:这里一定要放到此目录下,否则会异常报错)(2)启动Hadoophadoop@master:~$ start-all.sh(3)创建测试目录testdata(这里的目录的名字只能是testdata)hadoop@master:~$ hadoop dfs -mkdir testdata (创建后的路径为:/user/hadoop/testdata)(4)并把数据导入到这个tastdata目录中hadoop@master:~$ hadoop fs -put/home/hadoop/mahout/mahout-distribution-0.7/synthetic_c ontrol.data testdata(5)使用kmeans算法hadoop@master:~$ hadoop jar$MAHOUT_HOME/mahout-examples-0.7-job.jarorg.apache.mahout.clustering.syntheticcontrol.kmeans.Jo b(方法有:kmeans canopy fuzzykmeans dirichlet meanshift) (6)查看运行结果。

依次运行下列命令: (运行结果保存在:/user/hadoop/output)hadoop@master:~$ hadoop dfs -ls outputhadoop@master:~$ hadoop dfs -get output$MAHOUT_HOME/examples (从hdfs上下载到本地) hadoop@master:~$ cd$MAHOUT_HOME/examples/outputhadoop@master:~/mahout/mahout-distribution-0.7/exampl es/output$ ls如果看到以下结果,那么算法运行成功,你的安装也就成功了:canopies clusters-1 clusters-3 clusters-5clusters-7 pointsclusters-0 clusters-2 clusters-4 clusters-6 data(这些文件都是sequenceFile的方式,直接打开会出现乱码!)(7)对测试结果进行分析:<1>数据类型分析:<a>clusteredPoints:存放的是最后聚类的结果,将cluster-id和documents-id都展示出来了,用mahout seqdumper读clusteredPoints结果的key-value类型是(IntWritable,WeightedVectorWritable)<b>clusters-N:是第N次聚类的结果,其中n为某类的样本数目,c为各类各属性的中心,r为各类属性的半径。

clusters-N结果类型是(Text,Cluster)<c>data:存放的是原始数据,这个文件夹下的文件可以用mahout vectordump来读取,原始数据是向量形式的,其它的都只能用mahout seqdumper来读取,向量文件也可以用mahout seqdumper来读取,只是用vectordump读取出来的是数字结果,没有对应的key,用seqdumper读出来的可以看到key,即对应的url,而value读出来的是一个类描述,而不是数组向量<2>命令类型分析:mahout seqdumper:将SequenceFile文件转成可读的文本形式,对应的源文件是org.apache.mahout.utils.SequenceFileDumper.java mahout vectordump:将向量文件转成可读的文本形式,对应的源文件是org.apache.mahout.utils.vectors.VectorDumper.java mahout clusterdump:分析最后聚类的输出结果,对应的源文件是org.apache.mahout.utils.clustering.ClusterDumper.java<3>实际命令如下(-i <hdfs上的路径> -o <本地路径>):hadoop@master:~$ mahout seqdumper -i/user/hadoop/output/clusteredPoints/part-m-00000 -o/home/hadoop/data/result_points.txthadoop@master:~$ mahout vectordump -i/user/hadoop/output/data/part-m-00000 -o/home/hadoop/data/result_data.txthadoop@master:~$ mahout seqdumper -i/user/hadoop/output/clusters-2/part-r-00000 -o/home/hadoop/data/result_clusters2.txthadoop@master:~$ mahout clusterdump --input/user/hadoop/output/clusters-0 --pointsDir/user/hadoop/output/clusteredPoints --output/home/hadoop/data/result_clusters0.txt(这个命令会将每一类的点列出来,input指向的目录存放的是某类有几个点和该类的质心点及半径,即clusters-N目录,pointsDir指向的是所有输入点归于哪一类,即clusteredPoints目录,两者联合起来,就可以列举出属于同一类的所有点)(注意input指向的目录,要是最后一次迭代的结果目录,最后一次迭代的结果才是最终的结果)第2章mahout杂记(1)SequenceFile介绍SequeceFile是Hadoop API提供的一种二进制文件支持。

这种二进制文件直接将<key, value>对序列化到文件中。

一般对小文件可以使用这种文件合并,即将文件名作为key,文件内容作为value序列化到大文件中。

这种文件格式有以下好处:支持压缩,且可定制为基于Record或Block压缩(Block 级压缩性能较优)本地化任务支持:因为文件可以被切分,因此MapReduce任务时数据的本地化情况应该是非常好的。

难度低:因为是Hadoop框架提供的API,业务逻辑侧的修改比较简单。

坏处是需要一个合并文件的过程,且合并后的文件将不方便查看。

(2)mahout与SequenceFile首先简单说明下,mahout下处理的文件必须是SequenceFile格式的,所以需要把txtfile转换成sequenceFile。

SequenceFile是hadoop中的一个类,允许我们向文件中写入二进制的键值对,具体介绍请看eyjian写的/viewthread.php?tid=144&hi ghlight=sequencefile输入命令(--input和--output的路径必须一样):<1>把txt文本文件转换成sequenceFilehadoop@master:~$ mahout seqdirectory --input /test/--output /test/ --charset UTF-8结果可以看到:在test目录下多了1个文件(chunk-0),这就是我们要的SequenceFile格式文件问题:在我的测试中并没有用到这个命令??????????<2>将SequenceFile文件转成文本形式:hadoop@master:~$ mahout seqdumper -s /test/chunk-0 -o test.txt注意1:mahout-0,5中-s:表示输入文件路径,mahout-0.8中-i:表示输入文件路径。

输入路径是指HDFS上的路径注意2:输出路径test.txt----存放在/home/hadoop中,也就是本地路径(3)mahout中的测试数据下载数据源:/databases/里面有大量经典数据提供下载(4)maven编译mahout的源文件下载mahout-0.7的源文件(src文件:mahout-distribution-0.7-src.tar.gz)://mahout/0.7/ 解压,我放在/home/hadoop/mahout-src下,<1>进入mahout-0.7源文件目录:cd$MAHOUT_HOME,<2>编译mahout源文件的命令:mvn install 或mvn install -Dmaven.test.skip=true注意1:因为maven是编译mahout的源文件,所以要下载mahout-distribution-0.7-src.tar.gz版本,如果下载的是mahout-distribution-0.7.tar.gz版本,在mahout的安装目录下执行命令:mvn install时,会提示错误,找不到pom.xml。

注意2:使用mvn install:会比较慢,因为测试过程会比较慢,而且容易失败!!注意3:使用mvn install -Dmaven.test.skip=true:Maven 提供了跳过单元测试的能力,只需要使用Surefire 插件的skip 参数。

在命令行,只要简单的给任何目标添加maven.test.skip 属性就能跳过测试第3章mahout聚类算法(1)kmeans算法简介同一聚类中的对象相似度较高,而不同聚类中的对象相似度较小。