Mahout 搭建开发环境 + 实现项目示例

来源:互联网 发布:手机数据恢复大师官网 编辑:程序博客网 时间:2024/05/22 18:55

背景介绍

  笔者我此时是一个完全没用过Mahout的门外汉,对Hadoop也没有实际使用经验,算是真正的零基础。我的目标是希望以最简单的方式搭建起一个Mahout的开发环境,以最快的速度让Mahout工作起来,以方便后续的进一步学习
  于是,经过一番折腾,便有了本文。本文记录了 Linux 下Eclipse+Maven+Mahout单机环境的搭建过程。我不知道这是不是最简单的Mahout开发环境,但它应该算得上是比较简单的。

这里写图片描述

  如上图所示,我们可以选择在win中开发,也可以在linux中开发,开发过程我们可以在本地环境进行调试,标配的工具都是Maven和Eclipse。Maven又是什么?这里只需要知道它是一个项目管理工具就行,有了它,可以非常方面的安装Mahout和相关依赖组件。


开发环境介绍

1. Centos6.5系统 自带版本为 3.6.1的 Eclipse,已经安装的插件如下图

这里写图片描述

2. 安装 Maven
具体可参考笔者博文 Centos6.5 下 Maven 安装


在线安装 Maven 插件(不幸阵亡)

按照网上的教程就是

1. Help -> Install New Software…

这里写图片描述

点了上面菜单后,会弹出如下对话框,点击Add按钮,然后输入Name和Location(http://download.eclipse.org/technology/m2e/releases)

2. 在弹出的界面中点击 Add,然后输入 Repository 新地址
“Name”一栏填入 “m2e”
“Location”一栏填入 http://download.eclipse.org/technology/m2e/releases

这里写图片描述

其中 4 位置的 Available Software Sites 是在出现以下情况时(Duplicate location)再进行操作的

这里写图片描述

然后按照以下的数字顺序进行操作,删除原有的 Duplicate 然后

这里写图片描述

选中 m2e 的位置,然后选中 “Disable”,最后再 “Remove”,这样就可以将历史搜索的地址删除

3. 选中所需 m2e 插件进行安装

这里写图片描述

因为选中了 “Show only the lastest versions of available software”,所以显示的是最新版本的插件(图中显示的1.6.1),如果将其去掉勾选,那么将出现以往版本,如下图

这里写图片描述

笔者我先使用最新的插件来进行安装

4. 出现 error

这里写图片描述

错误分析直接在线安装maven2 会出现依赖插件找不到的问题,无法安装

网上解决方案: 必须先安装gef 插件后才能安装m2eclipse-core 插件,然而安装m2eclipse-extras 插件又依赖subclipse 插件。所以,三个插件的正确的安装顺序是 gef插件 -> subclipse插件 -> m2eclipse插件

  • m2eclipse-core插件 ——依赖——>gef插件
  • m2eclipse-extras插件 ——依赖——>subclipse插件
  • 先安装GEF插件
    • maven插件安装的时会依附这个插件,在Eclipse -> help -> Install New SoftWare中安装,
    • gef http://download.eclipse.org/tools/gef/updates/interim/
  • 安装SVN插件
    • 在Eclipse -> help -> Install New SoftWare中安装, site:http://subclipse.tigris.org/_1.6.x

(反正笔者我怎么试都失败,于是无奈放弃该方案,但不敢说该方法没用)


成功的步骤

根据网上调查的资料,比较可靠的解释是 maven 插件的版本与 eclipse 的版本有冲突,简单的说就是要安装的maven版本相对eclipse版本来说太新了。如果maven是最新的,则提高eclipe版本号;如果maven低, 则降低eclipse版本号

1. 下载最新的 eclipse
在 eclipse 首界面上,选择 Help -> About Eclipse Platform -> http://www.eclipse.org/platform -> Download -> 下载合适的 eclipse 版本
笔者我选择的是 eclipse-SDK-I20150818-0800-linux-gtk-x86_64.tar.gz ,下载地址:http://pan.baidu.com/s/1kTxndB5,密码:n5hb

解压缩到用户目录下,笔者我放在 /home/hadoop/software 目录下

tar -zxvf eclipse-SDK-I20150818-0800-linux-gtk-x86_64.tar.gz 

2. 修改环境
如果原始的 eclipse 版本不删除,但又想在终端直接输入 eclipse 调用最新版本的,而不是自带的 eclipse ,那么修改环境变量是最好的选择。

vim ~/.bash_profile

添加如下语句

export PATH=/home/hadoop/software/eclipse:${PATH}

然后

source ~/.bash_profile

在终端 输入 eclipse,出现如下,即可与说明环境生效

这里写图片描述

3. 删除软件自带插件

Help -> Install New Software… -> Available Software Sites
将 Neon 等这3个取消勾选,然后 ok 继续(主要为了省时间)

这里写图片描述

4. 安装 Eclipse Luna 插件

m2e 1.5.0 需要Eclipse Luna. 在 Add 中输入下列地址
http://download.eclipse.org/releases/luna/

然后按图中数字进行设置

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

检验:Help-> About Eclipse SDK

这里写图片描述

检验:Help-> Installation Details

这里写图片描述

5. 在弹出的界面中点击 Add,然后输入 Repository 新地址
m2e
http://download.eclipse.org/technology/m2e/releases

Note:这里必须用 “m2e” 进行过滤,不然全部安装的话,很可能会出现下面的不幸情况

That does not work for me, after installing all libraries from Luna, my Eclipse cannot be started. Loading Eclipse every time fails, I have to uninstall eclipse and reinstall everything again.

补充说明:
还可以安装 Juno, http://download.eclipse.org/releases/juno/201209280900
然后用 m2e 进行过滤,当然还是上面的那个比较好啦~~~


使用Maven构建Mahout项目

1. 运行Eclipse,通过菜单File > New > Project新建项目,选择Maven Project,然后直接Next

这里写图片描述

2. 选择maven-archetype-quickstart

这里写图片描述

3. 输入GroupId和ArtifactId,可以根据自己喜好随便命名

这里写图片描述

4. 点了Finish后,Eclipse便会创建如下一个工程

这里写图片描述

Note:

默认使用自带的 J2SE-1.5,需要修改为最新的 jdk

  • Project -> Properties -> Java Build Path -> Libraries

这里写图片描述

  • 选择 “Add Library” -> “JRE System Library”

这里写图片描述

5. 双击pom.xml,在右边的面板中选择Dependencies,点击Add,在弹出的对话框中输入mahout,Maven便会搜索相关包,选择mahout-core,确定

这里写图片描述

6. 在 eclipse 中搜索相应的 jar 包
“Window” —> “Show View” —> “Maven Repositories” —> “Local Repositories”
choose “Local Repository” click right and “Rebuild Index”

这里写图片描述

上面是在你的本地 maven 仓库已经下载了相应的东东之后,不然可以采用备选方案
“Window” —> “Show View” —> “Maven Repositories” —> “Global Repositories”
chose “nexus-osc” click right and “Update Index”

接下来直接在下列框中输入 mahout 即可!其他的信息会自动生成,而不用人工生成

这里写图片描述

7. 在出现的各种 jar 包,选择其中两个 mahout-core 和 mahout-math

这里写图片描述

选完之后,按 Ctrl+S 进行保存,在左边的 “Package Explorer” 一栏中 Maven Dependencies 会出现很多包,那就说明基本安装成功了。

Note: 如果出现警告

Index downloads are disabled, search results may be incomplete

解决方案:
“Window” –> “Preferences” and choose Maven in the left side.

Now you have to check the box “Download repository index updates on startup”


测试

1. 数据准备:data.csv,存放在 “/home/hadoop/data.csv” 下

第一列为UserID ,第二列为ItemID,第三列为Preference Value 即评分
1,101,5
1,102,3
1,103,2.5
2,101,2
2,102,2.5
2,103,5
2,104,2
3,101,2.5
3,104,4
3,105,4.5
3,107,5
4,101,5
4,103,3
4,104,4.5
4,106,4
5,101,4
5,102,3
5,103,2
5,104,4
5,105,3.5
5,106,4

2. 在刚才创建的工程下,选中 App.java

这里写图片描述
将其中的代码改写为

package wang.bigdata.www.mahout.wzf;import org.apache.mahout.cf.taste.impl.model.file.*;  import org.apache.mahout.cf.taste.impl.neighborhood.*;  import org.apache.mahout.cf.taste.impl.recommender.*;  import org.apache.mahout.cf.taste.impl.similarity.*;  import org.apache.mahout.cf.taste.model.*;  import org.apache.mahout.cf.taste.neighborhood.*;  import org.apache.mahout.cf.taste.recommender.*;  import org.apache.mahout.cf.taste.similarity.*;  import java.io.*;  import java.util.*;  public class App {      private App(){};      public static void main (String args[])throws Exception{                  // step:1  2  3 k 4           DataModel  model =new FileDataModel(new File("/home/hadoop/data.csv"));//          UserSimilarity similarity =new PearsonCorrelationSimilarity(model);          UserNeighborhood neighborhood =new NearestNUserNeighborhood(2,similarity,model);          Recommender recommender= new GenericUserBasedRecommender(model,neighborhood,similarity);          List<RecommendedItem> recommendations =recommender.recommend(1, 2);//1ItemID          for(RecommendedItem recommendation :recommendations){              System.out.println(recommendation);          }      }  }  

最后得到输出结果如下:

这里写图片描述

可以看到,Mahout为用户1提供了两个推荐商品,分别是104和106

补充:前面的运行结果显示三行红字,说是slf4j里面的StaticLoggerBinder加载失败,虽说它不影响程序运行结果,但看着实在烦人,解决办法是再次编辑pom.xml的dependencies,添加一个slf4j-jcl包即可

这里写图片描述


参考资料

  • 零基础学习Mahout之一:搭建单机环境:http://www.cnblogs.com/freefalcon/p/3893590.html?utm_source=tuicool

  • eclipse中配置maven:http://blog.csdn.net/kjfcpua/article/details/9733829

  • Eclipse安装Maven插件报错:http://bbs.csdn.net/topics/390824532?page=1

  • Maven for Eclipse 1.5.0 plugin cannot be installed under Kepler:http://stackoverflow.com/questions/24479109/maven-for-eclipse-1-5-0-plugin-cannot-be-installed-under-kepler

  • Index downloads are disabled, search results may be incomplete:http://www.cnblogs.com/AloneSword/p/4146884.html

  • Eclipse Json Editor Plugin:http://sourceforge.net/p/eclipsejsonedit/discussion/957258/thread/51b24003/

  • 用Maven构建Mahout项目:http://blog.fens.me/hadoop-mahout-maven-eclipse/

  • Maven插件问题在pom.xml的解决:http://my.oschina.net/hanzhankang/blog/132580

  • Eclipse下mahout实现推荐的简单实例 :http://blog.csdn.net/aidayei/article/details/6626699

1 0
原创粉丝点击