mahout

一直都没用java写过hadoop程序(除了wordcount),后来发现不用java有些问题处理不了。现在The Apache Software Foundation的开发速度也不是太快不太清楚是不是人手不够,其他语言的api不是太多,而且还有很多bug。这两周遇到的2个bug,都是hive的bug真的是郁闷啊,insert overwrite 和 set hive.optimize.skewjoin=tru遇到的,很是无奈啊。

一直都用streaming和perl和shell,这样的程序都比较好写。遇到一些聚类的时候发现这个好像不是太好用啊。其实像kmeans在分布式环境下的聚类过程很好想像,就是需要一批向量的数据,和一批随机中心点的数据,map读数据看看和哪个中心点近将key设置成最近的中心点的序号,reduce设置和k相同的个数,reduce里将每个送过来的向量计算求出新的中心点,修正老的中心点。输出向量这样就形成了一次聚类的过程然后再来一次mapreduce,循环下去知道中心点不动了聚类就结束了。可是用streaming+perl实现起来还是比较困难的,但是应该也是可以实现的,这里面主要是修正中心点需要reduce去修改或是形成新的中心点。其实reduce可以在自己的运行目录里创建临时文件然后放到HDFS里,下个循环再用 。-file 这个可以用一下

 


 

MAHOUT

既然已经有了分布式环境下的轮胎我们就不必发明轮胎了,mahout这个被很多人吹捧的东东,我们可以试一下。现在只讨论0.4版本的。

其实我是先在单机环境下实验的,还可以直接可以将例子运行。在集群上也是可以运行的。

官网运行例子的连接


编译示例程序

  • Apache software foundation’s website
  • http://mahout. mahout的官方地址
    http://hadoop. hadoop的官方地址
    http://hive. hive的官方地址
    http://svn. 代码地址 包含了所有的开源项目
    http://archeve. 归档地址:所有软件的历史版本都可以在这里找到


  • mahout几个有用的参考连接
  • 命令运行kmeans:

    https://cwiki./confluence/display/MAHOUT/k-means-commandline

    历史版本源代码地址:

    https://github.com/apache/mahout/blob/mahout-0.3/examples/src/main/java/org/apache/mahout/clustering/syntheticcontrol/kmeans/Job.java

    https://github.com/apache/mahout/branches

    从文本创建向量:

    https://cwiki./MAHOUT/creating-vectors-from-text.html

    快速开始;

    http://cwiki./MAHOUT/quickstart.html

    比较重要示例运行:

    https://cwiki./confluence/display/MAHOUT/Clustering+of+synthetic+control+data

    http://webcache./search?q=cache:9kvXlIJ3lc0J:https://cwiki./MAHOUT/clustering-of-synthetic-control-data.html+Clustering%2Bof%2Bsynthetic%2Bcontrol%2Bdata&cd=1&hl=zh-CN&ct=clnk&source=www.google.com.hk (google快照)


  • eclipse编译打包运行示例程序
  • 1. 首先是eclipse我用的是官方下载的HELIOS版本的
    2. 创建一个java project
    3. 找到mahout0.4源代码中的 kmeans聚类实例。路径是(\src\examples\src\main\java\org\apache\mahout\clustering\syntheticcontrol\kmeans
    )。创建一个类为kmeansjob,然后将示例代码贴过来。修改代码中的类名称为kmeansjob。
    4. 添加引用包。
    hadoop-0.20.2\hadoop-0.20.2-core.jar
    hadoop-0.20.2\lib\log4j-1.2.15.jar
    mahout-distribution-0.4\mahout-core-0.4-job.jar
    mahout-distribution-0.4\mahout-core-0.4.jar
    mahout-distribution-0.4\mahout-utils-0.4.jar
    mahout-distribution-0.4\lib\commons-cli-1.2.jar
    mahout-distribution-0.4\lib\slf4j-api-1.6.0.jar
    mahout-distribution-0.4\lib\commons-cli-2.0-mahout.jar
    加入编译0.3版本的需要添加一下包:
    hadoop-0.19.2\hadoop-0.19.2-core.jar
    hadoop-0.19.2\lib\log4j-1.2.15.jar
    mahout-0.3\mahout-core-0.3.jar
    mahout-0.3\lib\commons-cli-1.2.jar
    mahout-0.3\lib\commons-cli-2.0-mahout.jar
    mahout-0.3\mahout-utils-0.3.jar
    mahout-0.3\lib\slf4j-api-1.5.8.jar
    mahout-0.3\mahout-examples-0.3.jar


    5. 将项目export runnable jar file

    export jar 1export jar2

    6. 然后就是运行了hadoop jar k22.jar
    7. 输入是示例程序提供输入的数据。