概述
Mahout底层依赖Hadoop,部署Mahout过程中最困难的就是Hadoop的部署
本文假设用户本身没有进行Hadoop的部署,记述部署Mahout的过程
关于Mahout
目录:
1. 准备工作
2. 部署Hadoop
3. 部署测试Mahout
一. 准备工作
0. 工具列表及版本
(1) 平台:Linux Ubuntu 13.10 64-bit
1. Java and Maven
这一步假设已经完成,完成路径配置,$ java -version,$ javac -version,$ mvn -version输出正确版本号
二. Hadoop的编译、部署和运行
1. 编译Hadoop源代码
(1) 问题引入
Hadoop官方只提供了32位的预编译包,如果将32位Hadoop部署在64位服务器上,运行时会报错:
Java HotSpot(TM) 64-BitServer VM warning: You have loaded library/usr/local/bin/hadoop/lib/native/libhadoop.so.1.0.0 which might havedisabled stack guard. The VM will try to fix the stack guard now.
It's highly recommendedthat you fix the library with 'execstack -c <libfile>', or link it with'-z noexecstack'.
如果在运行时看到这段话,那不好意思,你需要重新编译Hadoop,本人就是经历了这个过程。
可以确定一下服务器上的Hadoop是多少位构建的:
$ file $HADOOP_HOME/lib/native/libhadoop.so.1.0.0
(2) 编译过程
A. 准备工作
$ sudo apt-get install autoconf automake libtool cmake
$ sudo apt-get install libssl-dev
$ sudo apt-get install libncurses5-dev
$ sudo apt-get install gcc*
B. 安装protobuf
准备步骤中下载好的protobuf-2.5.0.tar.gz,解压,./configure , make ,make install,检查protoc --version
如果成功,则会输出版本号信息,例如:libprotoc 2.5.0
如果有问题,则会输出错误内容:protoc: error while loading shared libraries: libprotoc.so.8: cannot open shared
错误原因:protobuf的默认安装路径是/usr/local/lib,而/usr/local/lib 不在Ubuntu体系默认的 LD_LIBRARY_PATH 里,所以就找不到该lib
解决方法:
1. 创建文件 /etc/ld.so.conf.d/libprotobuf.conf 包含内容:/usr/local/lib
2. 输入命令: $ sudo ldconfig
C. 修改源码中的hadoop-common-project/hadoop-auth/pom.xml文件
添加:
- <dependency>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- <scope>test</scope>
- </dependency>
说明:不添加上述配置直接进行编译,会遇到
[ERROR] class file for org.mortbay.component.AbstractLifeCycle not found
[ERROR] 找不到org.mortbay.component.AbstractLifeCycle的类文件
D. 使用Maven编译Hadoop源码
yusong@yusong-ps:~/下载/hadoop-2.2.0-src$ mvn package -Pdist,native -DskipTests -Dtar
大约需要15分钟,视网络情况而定,直至提示success编译完成
编译后可以在hadoop-dist/target里边找到压缩包hadoop-2.2.0.tar.gz
2. 部署Hadoop
要注意,一定要进行HADOOP_HOME与HADOOP_CONF_DIR的路径配置,/etc/profile相关内容如下:
如后在使用Hadoop的时候遇到类似 mkdir: `./testdata': No such file or directory 这样的提示,那就回去设置一下吧,设置完就好了
3. 运行Hadoop
按照步骤2中参考博文上的操作即可,确保执行$ jps 能看到 NameNode和DataNode
三. 部署测试Mahout
1. 解压,设置好MAHOUT_HOME和bin的PATH
2. 确保Hadoop运行正常,因为Mahout是依赖Hadoop进行计算的
$ cd $MAHOUT_HOME
$ hadoop fs -mkdir /testdata # mahout会默认找这个文件名的目录
$ hadoop fs -put synthetic_control.data testdata
$ hadoop fs -lsr testdata
4. 执行聚类算法,输入mahout命令会有列出很多算法,其输入目录默认为testdata
mahout org.apache.mahout.clustering.syntheticcontrol.canopy.Job
mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
mahout org.apache.mahout.clustering.syntheticcontrol.fuzzykmeans.Job
mahout org.apache.mahout.clustering.syntheticcontrol.dirichlet.Job
mahout org.apache.mahout.clustering.syntheticcontrol.meanshift.Job
使用mahout org.apache.mahout.clustering.syntheticcontrol.canopy.Job进行计算
5. 命令行输出计算结果,默认输出结果在output/目录下
四. 参考文章