Hadoop家族系列文章,主要介绍Hadoop家族产品,常用项目包括Hadoop,Pig,HBase,Sqoop,Mahout,Zookeeper,Avro,Ambari,Chukwa新增加的项目包括YARN,Hcatalog,Oozie,Cassandra,Hama,Whirr,Flume,Bigtop,Crunch,Hue等。
前言
基于Hadoop的项目,不管是MapReduce开发,还是Mahout的开发都是一个复杂的编程环境中开发。Java的环境问题,是困扰着每个程序员的噩梦。Java程序员,不仅要写Java程序,还要会调linux,会配Hadoop,启动Hadoop,还要会自己运维。所以,新手想玩起Haoop真不是件简单的事。
不过,我们可以尽可能的简化环境问题,让程序员只关注写程序。特别是像算法程序员,把精力投入在算法设计上,要比花时间解决环境问题有价值的多!
目录
- Maven介绍和安装
- Mahout单机开发环境介绍
- 用Maven构建Mahout开发环境
- 用Mahout实现协同过滤userCF
- 用Mahout实现kmeans
- 模板项目上传github
1. Maven介绍和安装
请参考文章:用Maven构建Hadoop项目
开发环境
Win7 64bit
Java 1.6.0_45
Maven 3
Eclipse Juno Service Release 2
Mahout 0.6
这里说明一下mahout的运行版本。
mahout-0.5,mahout-0.6,mahout-0.7,是基于hadoop-0.20.2x的。
mahout-0.8,mahout-0.9,是基于hadoop-1.1.x的。
mahout-0.7,有一次重大升级,去掉了多个算法的单机内存运行,并且部分API不向前兼容。
注:本文中两个例子都是基于单机的内存实现,因此选择0.6版本。Mahout在Hadoop集群中运行会在下一个文章中介绍。
2.Mahout单机开发环境介绍
如上图所示,我们可以选择在win中开发,也可以在Linux中开发,开发过程我们可以在本地环境进行调试,标配的工具都是Maven和eclipse。
3.用Maven构建Mahout开发环境
1.用Maven创建一个标准化的Java项目
2.导入项目到eclipse
3.增加mahout依赖,修改pom.xml
4.下载依赖
1).用Maven创建一个标准化的Java项目
~ D:\workspace\java>mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes
-DgroupId=org.conan.mymahout -DartifactId=myMahout -DpackageName=org.conan.mymahout -Dversion=1.0-SNAPSHOT -DinteractiveMode=false
进入项目,执行mvn命令
~ D:\workspace\java>cd myMahout
~ D:\workspace\java\myMahout>mvn clean install
2).导入项目到eclipse
我们创建好了一个基本的maven项目,然后导入到eclipse中。这里我们最好已经安装好了Maven的插件。
3).增加mahout依赖,修改pom.xml
这里我使用hadoop-0.6版本,同时去掉对junit的依赖,修改文件:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.conan.mymahout</groupId>
<artifactId>myMahout</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>myMahout</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mahout.version>0.6</mahout.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>${mahout.version}</version>
</dependency>
<dependency