首先在运行贝叶斯算法程序之前,运行环境要求:
1、安装maven(书中没提到的)
2、安装mahout
3、安装hadoop
关于2,3的安装方式可以参考书本里或者网上的方法。
下面说说安装maven过程,网上很多是直接下载 tar包,然后解压出来。 http://apache.etoak.com//maven/binaries/apache-maven-3.0.2-bin.tar.gz
我是直接在终端下通过apt-get指令安装,两者方法区别不大 :
1、sudo apt-get maven2
2、设置环境变量,在/etc/profile中加入
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:${PATH}
以下是我的配置:
- export JAVA_HOME=/usr/lib/jdk/jdk1.7.0_40
- export PATH=$PATH:$JAVA_HOME/bin
- export CLASSPATH=.:$JAVA_HOME/lib/rt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
- export HADOOP_HOME=/root/hadoop-1.2.1
- #export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH:$HADOOP_HOME/hadoop-core-1.2.1.jar
-
- export M2_HOME=/usr/share/maven2
- export PATH=${M2_HOME}/bin:${PATH}
- export HADOOP_CONF_DIR=/root/hadoop-1.2.1/conf
- export MAHOUT_HOME=/root/mahout/mahout-distribution-0.9
- export PATH=${MAHOUT_HOME}/bin:${PATH}
3、修改/usr/share/maven2/conf/settings.xml
因为我是通过apt-get方式安装,所以maven2目录在/usr/share之下,通过解压出来的,只要在相应目录下找到conf/settings.xml即可。
大约在第50行。
添加<localRepository>/root/.m2/repository</localRepository>,因为我这里是root用户,直接把~改成root了。默认是~/.m2/repository
以下是我的配置
- <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
- <localRepository>/root/.m2/repository</localRepository>
- <!-- localRepository
- | The path to the local repository maven will use to store artifacts.
- |
- | Default: ~/.m2/repository
- <localRepository>/root/.m2/repository</localRepository>
- -->
4、查看maven是否安装成功
mvn -version
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.7.0_40
Java home: /usr/lib/jdk/jdk1.7.0_40/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-46-generic" arch: "i386" Family: "unix"
之后就是参考书本的13.4.5章节,运行示例了。
我在运行
bin/hadoop jar /root/mahout/mahout-distribution-0.9/mahout-examples-0.9-job.jar org.apache.mahout.classifier.bayes.TrainClassifier -i 20news-input -o newsmodel -ng 3 -type bayes -source hdfs
报错如下
多次百度,谷歌,未果。。。。
无奈参考其中一篇博文的曲线救国法。
运行~/mahout/mahout-distribution-0.9/examples/bin目录下自带的classify-20newsgroups.sh脚本
首先我们来看看这个脚本的部分代码:
- #WORK_DIR=/tmp/mahout-work-${USER}
- WORK_DIR=/root/hadoop-1.2.1/20news-input
- algorithm=( cnaivebayes naivebayes sgd clean)
- if [ -n "$1" ]; then
- choice=$1
- else
- echo "Please select a number to choose the corresponding task to run"
- echo "1. ${algorithm[0]}"
- echo "2. ${algorithm[1]}"
- echo "3. ${algorithm[2]}"
- echo "4. ${algorithm[3]} -- cleans up the work area in $WORK_DIR"
- read -p "Enter your choice : " choice
- fi
-
- echo "ok. You chose $choice and we'll use ${algorithm[$choice-1]}"
- alg=${algorithm[$choice-1]}
-
- if [ "x$alg" != "xclean" ]; then
- echo "creating work directory at ${WORK_DIR}"
-
- #mkdir -p ${WORK_DIR}
- if [ ! -e ${WORK_DIR}/20news-bayesinput ]; then
- if [ ! -e ${WORK_DIR}/20news-bydate ]; then
- if [ ! -f ${WORK_DIR}/20news-bydate.tar.gz ]; then
- echo "Downloading 20news-bydate"
- curl http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz -o ${WORK_DIR}/20news-bydate.tar.gz
- fi
- mkdir -p ${WORK_DIR}/20news-bydate
- echo "Extracting..."
- cd ${WORK_DIR}/20news-bydate && tar xzf ../20news-bydate.tar.gz && cd .. && cd ..
- fi
- fi
- fi
阅读这段代码,我们会看到一开始会让用户选择 4个选项
1. cnaivebayes
2. naivebayes
3. sgd
4. clean
其中最后一个选项clean是表示清空数据文件所在的临时目录。
当你选择前三项中的一项时,代码将判断工作目录${WORK_DIR}中有没有20news-bydate.tar.gz, 如果没有,通过curl 去http://people.csail.mit.edu取。这里要求你的机器上安装有curl 。
因为这里我的机器没有安装curl,而且已经下载好了20news-bydate.tar.gz(可以从http://qwone.com/~jason/20Newsgroups/下载)。所以我不希望再通过curl去下载,因此我手动修改了这个代码。
修改:WORK_DIR=/root/hadoop-1.2.1/20news-input
注释:#mkdir -p ${WORK_DIR}
这里的20news-input存放有20news-bydate.tar.gz
也不需要再创建这个目录,所以直接注释#mkdir -p ${WORK_DIR}
为了保留原始版本,改完后我另存为myclassify-20newsgroups.sh
然后运行./myclassify-20newsgroups.sh
因为这里有解压,上传到hdfs等等操作,需要等一会儿。。。
等我午饭归来,success!
至于原来的方式的错误,我还没找到解决方法,希望有知道的朋友能指教下,也期待一起学习hadoop的朋友一起交流下,谢谢。
参考资料:
http://f.dataguru.cn/forum.php?mod=viewthread&tid=239064&fromuid=41168
http://log.medcl.net/item/2011/02/mahout_install/
《mahout in action》