在Hadoop1.2.1分布式集群环境下安装Mahout0.9框架
友情提醒:大家最好通读一遍过后,在理解的基础上按照步骤一步一步设置,因为后面的会对前面的有所启示。
一、前提条件
Hadoop1.2.1分布式集群环境搭建成功,并且Hadoop集群服务器正常运行。
二、所需环境和软件
1. Hadoop分布式集群环境:
见《在VMware下安装Ubuntu并部署Hadoop1.2.1分布式环境》。
2. Mahout0.9框架: mahout-distribution-0.9.tar.gz
3. 测试数据(自行下载,并另存为 synthetic_control.data.txt 格式):
http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data
三、安装Mahout
1. 拷贝下载下来的mahout-distribution-0.9.tar.gz包,到Hadoop集群的masters机器的桌面上。
2. 解压mahout-distribution-0.9.tar.gz包,解压有二种方法。
方法一:使用命令 tar -zxvf mahout-distribution-0.9.tar.gz
方法二:见(图1)
(图1)
3. 移动生成的mahout-distribution-0.9文件夹到opt下,如(图2)所示。
sudo mv mahout-distribution-0.9 /opt/mahout-distribution-0.9
(图2)
4. 配置mahout环境变量,如(图3)所示。
使用命令:sudo gedit /etc/profile
打开文件后在里面添加如下内容:
export HADOOP_CONF_DIR=${HADOOP_HOME}/conf
export MAHOUT_HOME=/opt/mahout-distribution-0.9
export MAHOUT_CONF_DIR=${MAHOUT_HOME}/conf
export PATH=${PATH}:${MAHOUT_HOME}/conf:${MAHOUT_HOME}/bin
(图3)
5. 使用命令: source /etc/profile 使环境变量立即生效,如(图4)所示。
(图4)
6. 到此,Mahout安装好了,下面运行一个案例来验证一下。
四、运行一个Mahout案例
1. 准备测试数据
从下面网站下载测试数据,另存为 synthetic_control.data.txt 格式,并拷贝到Hadoop集群的masters机器的桌面上,如(图5)所示。
http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data
(图5)
2. 启动hadoop集群
使用命令 start-all.sh 启动hadoop集群,并使用jps命令查看是否启动成功,如(图6)所示。
(图6)
3. 使用以下命令创建测试目录testdata,如(图7)所示。
hadoop fs -mkdir testdata
备注:这里的目录名称只能为testdata,为什么我也不知道。
(图7)
4. 使用命令 hadoop fs -ls 查看创建testdata目录情况,如(图8)所示。
(图8)
5. 把测试数据synthetic_control.data.txt,导入testdata中,并查看导入情况,如(图9)所示。
hadoop fs -put /home/hadoop/桌面/synthetic_control.data.txt testdata
(图9)
6. ,使用以下命令,运行k-means算法,如(图10)所示。
hadoop jar /opt/mahout-distribution-0.9/mahout-examples-0.9-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
备注:这个算法需要运行3到5分钟,启动10个MapReduce Job任务。
(图10)
7. 运行生成的结果,如(图11)所示,而且运行的结果比较多已经超出了缓冲区的范围,下面只截取一小部分。
(图11)
8. 查看结果,如(图12)所示。
使用命令: hadoop fs -ls output
(图12)
9. 出现如(图11、12)所示页面,说明mahout的案例运行成功了。
备注:
/user/hadop/output/data:存放的是原始数据,这个文件夹下的文件可以用mahout vectordump来读取,原始数据是向量形式的,其它的都只能用mahout seqdumper来读取,向量文件也可以用mahout seqdumper来读取,只是用vectordump读取出来的是数字结果,没有对应的key,用seqdumper读出来的可以看到key,即对应的url,而value读出来的是一个类描述,而不是数组向量。
命令:
mahout vectordump -i /user/hadoop/output/data/part-m-00000
mahout seqdumper -i /user/hadoop/output/data/part-m-00000
有的书上或者资料上要运行下面命令,我在mahout0.9版本测试通不过(可能的原因是版本问题)。
mahout vectordump --seqFile /user/hadoop/output/data/part-m-00000