http://blog.csdn.net/feitongxunke
一定要大概浏览完,有个整体的布局才行!写这篇文章花了2天,犯了很多错误,比如hadoop版本,比如配置信息,下次一定要注意,留个完整记录。
1.java
安装java,去官网上下载,这个没什么好说的。
2.Maven
2.1安装Maven
先从http://maven.apache.org/download.cgi ,下载Maven 3.2.2 (Binary tar.gz),然后解压,并将解压出来的文件夹放到环境变量里面。
vi .bash_profile
MAVEN_HOME=/Users/ericxk/dev/maven/apache-maven-3.2.2
PATH=$PATH:$MAVEN_HOME/bin
export MAVEN_HOME
export PATH
source .bash_profile //使配置文件生效
2.2给eclipse安装m2eclipse插件
在eclipse marketplace中安装Maven Integration for Eclipse(Juno and newer)即可,这里要根据自己的eclipse版本来选择,最新的eclipse是Luna。
安装好之后在preference->maven->installations里面添加maven文件夹位置,然后在user settings里面指向apache-maven-3.2.2/conf/settings.xml,在指向之前要把setting.xml这个文件里面repository的位置修改了,注意改了之后要把注释去掉才能生效。
3.Hadoop2.4.0
3.1下载Hadoop
http://hadoop.apache.org 到这个网站上面下载,这里下载的是hadoop-2.4.0。
3.2配置Hadoop,伪分布节点
要修改5个文件,分别是core-site.xml,yarn-site.xml,mapred-site.xml,hdfs-site.xml,hadoop-env.sh。网上说前4个文件在conf目录里面,但那是对应Hadoop 0.20版本,这里几个文件都在etc/hadoop/目录里面,其中hadoop2.4.0没有mapred-site.xml,可以直接修改mapred-site.xml.template。
core-site.xml,其中tmp.dir是临时目录,为了方便管理自己给他们都放在一个文件了。
<property>
<name>hadoop.tmp.dir</name>
<value>/Users/ericxk/dev/hadoop/tmp/hadoop-${user.name}</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
创建和配置mapred-site.xml,可以利用mapred-site.xml.template,然后另存为mapred-site.xml。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
hdfs-site.xml,其中name.dir和data.dir单独建立了文件夹,方便管理。
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/Users/ericxk/dev/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/Users/ericxk/dev/hadoop/hdfs/data</value>
</property>
hadoop-env.sh,第一条语句是mac os下添加的,不添加容易出现“Unable to load realm info from SCDynamicStore”。这里的意思是设置启动hadoop时设定相关的JVM参数。
export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk"
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
export HADOOP_INSTALL=/Users/ericxk/dev/hadoop/hadoop-2.4.0
export PATH=$PATH:$HADOOP_INSTALL/bin
3.3验证,运行wordcount
3.3.1. 首先格式化namenode
终端执行
~/dev/hadoop/hadoop-2.4.0/bin/hadoop namenode -format
注意问题:
- 这个里面有个问题就是ssh连接不上,原来是host里面没有添加localhost 127.0.0.1。
3.3.2. 启动hadoop
终端执行
~/dev/hadoop/hadoop-2.4.0/sbin/start-dfs.sh
~/dev/hadoop/hadoop-2.4.0/sbin/start-yarn.sh
3.3.3. 查看hadoop管理界面
可以在http://localhost:50070 看到hdfs管理页面,http://localhost:8088 看到hadoop进程管理页面。
3.3.4. wordcount验证
- dfs上创建input目录
~/dev/hadoop/hadoop-2.4.0/bin/hadoop fs -mkdir -p input
- 把hadoop目录下的README.txt拷贝到dfs新建的input里
~/dev/hadoop/hadoop-2.4.0/bin/hadoop fs -copyFromLocal ~/dev/hadoop/hadoop-2.4.0/README.txt input
- 运行WordCount
hadoop jar ~/dev/hadoop/hadoop-2.4.0/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.4.0-sources.jar org.apache.hadoop.examples.WordCount input output
- 运行完毕后,查看单词统计结果
~/dev/hadoop/hadoop-2.4.0/bin/hadoop fs -cat output/*
参考文章:
http://www.cnblogs.com/kinglau/p/3796164.html
http://andy-ghg.iteye.com/blog/1165453
http://www.cnblogs.com/gamix/archive/2012/12/02/install-hadoop-on-mac-osx-lion.html
http://www.aboutyun.com/thread-7779-1-1.html
http://blog.csdn.net/zhangzhaokun/article/details/17427835
3.4. 配置eclipse
进行到这一步,可以松一口气,前面的步骤挺繁琐的,容易出了一些小错误,不过看看调试信息改改一般没问题,实在不行baidu google之。
结果我发现还是不能松一口气,这个eclipse hadoop插件也是挺繁琐的。。。。。。应该是相当繁琐,因为版本的问题。下面接着再战。
[github]https://github.com/winghc/hadoop2x-eclipse-plugin 上面有个hadoop2x-eclipse-plugin,download下来看看,发现要用ant编译。
3.4.1安装ant
在官网上下载http://ant.apache.org/bindownload.cgi ,把解压出来的目录加入环境变量。
export ANT_HOME=/usr/local/apache-ant-1.9.3
export PATH=${PATH}:${ANT_HOME}/bin
3.4.2编译hadoop-eclipse-plugin-2.4.0
这个时候执行下面语句,前面是eclipse的路径,后面是hadoop的路径:
$ ant jar -Dversion=2.4.0 -Declipse.home=/Users/ericxk/dev/eclipse -Dhadoop.home=/Users/ericxk/dev/hadoop/hadoop-2.4.0
但是发现一些错误,下面的历程就是过五关斩六将了。
主要更改两个配置文件,
hadoop2x-eclipse-plugin-master\src\contrib\eclipse-plugin\build.xml
hadoop2x-eclipse-plugin-master\ivy\libraries.properties(变量配置信息存放地点)
首先要更改libraries.properties,里面hadoop的版本型号2.4.0,然后是commons-lang.version为2.6,然后还要在build.xml里面修改。原因是build.xml里面有些没有使用配置变量信息,直接用的版本号,所以里面也有要修改的地方。
最后还要在build.xml里面添加:
lib/commons-collections-${commons-collections.version}.jar,
<copy file="${hadoop.home}/share/hadoop/common/lib/commons-collections-${commons-collections.version}.jar" todir="${build.dir}/lib" verbose="true"/>
上面修改方法参考了csdn的博客,下面有链接,但是这里也有些地方和博客不一样,具体环境具体分析,并不难,就是有些繁琐。
生成的插件路径在输出结果有提到,将插件放到eclipse的plugins文件夹即可。
3.4.3测试hadoop-eclipse-plugin-2.4.0
这里有几点要注意:
①启动hadoop守护进程
②启动eclipse,在preference的hadoop map/reduce填写好hadoop路径
③配置map/reduce locations,然后新建一个hadoop location。
④这里的map/reduce master就填写localhost 9001,dfs master填写localhost 9000。
这里分别对应的mapred-site.xml、core-site.xml中配置的地址及端口。
⑤这个时候可以新建项目,然后上传模拟数据文件,最后跑一下wordcount。具体的命令这里就不说了。可以参考下面给的链接。
注意问题:
- hadoop fs -ls 查看文件
- hadoop fs -put 上传目录
- run的时候要新建个java application 然后在参数里面填写上输入和输出的路径。
- 还有个问题就是,这个版本的插件十分不稳定,容易出现nullpointexception,和下面给出的网站说法是一样的,先将就着用吧。
参考网站:
https://github.com/winghc/hadoop2x-eclipse-plugin
http://kangfoo.u.qiniudn.com/article/2013/12/build-hadoop2x-eclipse-plugin/
http://blog.csdn.net/yueritian/article/details/23868175
http://www.linuxidc.com/Linux/2012-01/51994p3.htm
4.Mahout
4.0这里被坑了。。
终于来到了这一步,时间已经过去2天多了。其实回头看看操作并不繁琐,繁琐的是去网上查找需要的资料,以及调试错误。随带吐槽一句我昨天看到的hadoop在mac os下可以用mac ports一条语句就安装好了不过这个我没有试过。
到了这里我查阅资料发现一个问题,就是mahout针对的hadoop版本会出现部分api不兼容的问题。因此我之前安装的hadoop2.4.0就是个坑!!!!!!!
现在有个两个思路,1是继续使用2.4.0,重新编译适合2.4.0的,2是使用1.2.1,直接配合mahout0.9。
我现在决定采用第二个方法,因为第一个方法
虽然hadoop1.2.1和2.4.0文件结构不一样,但是很多东西相同的,一通百通。配置以及eclipse的插件都没什么问题,重新按照网上教程弄弄就行。
hadoop1.2.1 下载地址:http://apache.fayea.com/apache-mirror/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz
然后参考两篇文章,下面参考网站已经给出,需要注意的是设置好几个路径,方便自己以后控制:
hadoop.tmp.dir dfs.namenode.name.dir dfs.datanode.data.dir
然后还要在hadoop-env.sh中加入JAVA_HOME环境变量就行了。
如果不想ssh输入密码,执行下面即可
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
然后hadoop eclipse插件网上也有,可以去csdn上面下载。也就不用重新编译了。
接下来激动人心的时刻就要来了,开始安装mahout。
4.1 mahout0.9安装配置
官网下载mahout-distribution-0.9.tar.gz即可。下载好了,将几个目录加入环境变量,然后就可以使用。
在这里我贴出这篇文章所有环境变量的设置。下面这部分都是添加到~/.bash_profile里面去的。记住添加好之后要执行source ~/.bash_profile使之生效。
export MAVEN_HOME=/Users/ericxk/dev/maven/apache-maven-3.2.2
export HADOOP_HOME=/Users/ericxk/dev/hadoop/hadoop-1.2.1
export ANT_HOME=/Users/ericxk/dev/apache-ant-1.9.4
export HADOOP_CONF_DIR=${HADOOP_HOME}/conf
export MAHOUT_HOME=/Users/ericxk/dev/mahout-distribution-0.9
export MAHOUT_CONF_DIR=${MAHOUT_HOME}/conf
export PATH=${PATH}:${ANT_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_CONF_DIR}:${ANT_HOME}/bin:${MAVEN_HOME}/bin:${MAHOUT_CONF_DIR}
4.2运行mahout案例
去这个网站上面下载测试数据:
http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data
①启动hadoop集群
~/dev/hadoop/hadoop-1.2.1/bin/start-all.sh
②创建测试目录testdata
hadoop fs -mkdir testdata
③将测试数据导入testdata
hadoop fs -put ~/dev/synthetic_control.data.txt testdata
④运行k-means算法
hadoop jar ~/dev/mahout-distribution-0.9/mahout-examples-0.9-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
⑤查看运行结果
hadoop fs -ls output
参考网站:
http://blog.csdn.net/fansy1990/article/details/23261633
http://www.haogongju.net/art/2557638