Mac os10.9.4下安装Hadoop2.4.0,Mahout的惨痛血泪史

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),然后解压,并将解压出来的文件夹放到环境变量里面。

   
   
   
   
  1. vi .bash_profile
   
   
   
   
  1. MAVEN_HOME=/Users/ericxk/dev/maven/apache-maven-3.2.2
  2. PATH=$PATH:$MAVEN_HOME/bin
  3. export MAVEN_HOME
  4. export PATH
   
   
   
   
  1. 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是临时目录,为了方便管理自己给他们都放在一个文件了。

   
   
   
   
  1. <property>
  2. <name>hadoop.tmp.dir</name>
  3. <value>/Users/ericxk/dev/hadoop/tmp/hadoop-${user.name}</value>
  4. <description>A base for other temporary directories.</description>
  5. </property>
  6. <property>
  7. <name>fs.default.name</name>
  8. <value>hdfs://localhost:9000</value>
  9. </property>

yarn-site.xml

   
   
   
   
  1. <property>
  2. <name>yarn.nodemanager.aux-services</name>
  3. <value>mapreduce_shuffle</value>
  4. </property>
  5. <property>
  6. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  7. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  8. </property>

创建和配置mapred-site.xml,可以利用mapred-site.xml.template,然后另存为mapred-site.xml。

   
   
   
   
  1. <property>
  2. <name>mapreduce.framework.name</name>
  3. <value>yarn</value>
  4. </property>

hdfs-site.xml,其中name.dir和data.dir单独建立了文件夹,方便管理。

   
   
   
   
  1. <property>
  2. <name>dfs.replication</name>
  3. <value>1</value>
  4. </property>
  5. <property>
  6. <name>dfs.namenode.name.dir</name>
  7. <value>file:/Users/ericxk/dev/hadoop/hdfs/name</value>
  8. </property>
  9. <property>
  10. <name>dfs.datanode.data.dir</name>
  11. <value>file:/Users/ericxk/dev/hadoop/hdfs/data</value>
  12. </property>

hadoop-env.sh,第一条语句是mac os下添加的,不添加容易出现“Unable to load realm info from SCDynamicStore”。这里的意思是设置启动hadoop时设定相关的JVM参数。

   
   
   
   
  1. export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk"
  2. export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
  3. export HADOOP_INSTALL=/Users/ericxk/dev/hadoop/hadoop-2.4.0
  4. export PATH=$PATH:$HADOOP_INSTALL/bin

3.3验证,运行wordcount

3.3.1. 首先格式化namenode

终端执行

   
   
   
   
  1. ~/dev/hadoop/hadoop-2.4.0/bin/hadoop namenode -format

注意问题:

  • 这个里面有个问题就是ssh连接不上,原来是host里面没有添加localhost 127.0.0.1。

3.3.2. 启动hadoop

终端执行

   
   
   
   
  1. ~/dev/hadoop/hadoop-2.4.0/sbin/start-dfs.sh
  2. ~/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目录
   
   
   
   
  1. ~/dev/hadoop/hadoop-2.4.0/bin/hadoop fs -mkdir -p input
  • 把hadoop目录下的README.txt拷贝到dfs新建的input里
   
   
   
   
  1. ~/dev/hadoop/hadoop-2.4.0/bin/hadoop fs -copyFromLocal ~/dev/hadoop/hadoop-2.4.0/README.txt input
  • 运行WordCount
   
   
   
   
  1. 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
  • 运行完毕后,查看单词统计结果
   
   
   
   
  1. ~/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 ,把解压出来的目录加入环境变量。

   
   
   
   
  1. export ANT_HOME=/usr/local/apache-ant-1.9.3
  2. export PATH=${PATH}:${ANT_HOME}/bin

3.4.2编译hadoop-eclipse-plugin-2.4.0

这个时候执行下面语句,前面是eclipse的路径,后面是hadoop的路径:

   
   
   
   
  1. $ 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里面添加:

   
   
   
   
  1. lib/commons-collections-${commons-collections.version}.jar,
  2. <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输入密码,执行下面即可

   
   
   
   
  1. ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  2. 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使之生效。

   
   
   
   
  1. export MAVEN_HOME=/Users/ericxk/dev/maven/apache-maven-3.2.2
  2. export HADOOP_HOME=/Users/ericxk/dev/hadoop/hadoop-1.2.1
  3. export ANT_HOME=/Users/ericxk/dev/apache-ant-1.9.4
  4. export HADOOP_CONF_DIR=${HADOOP_HOME}/conf
  5. export MAHOUT_HOME=/Users/ericxk/dev/mahout-distribution-0.9
  6. export MAHOUT_CONF_DIR=${MAHOUT_HOME}/conf
  7. 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集群

   
   
   
   
  1. ~/dev/hadoop/hadoop-1.2.1/bin/start-all.sh

②创建测试目录testdata

   
   
   
   
  1. hadoop fs -mkdir testdata

③将测试数据导入testdata

   
   
   
   
  1. hadoop fs -put ~/dev/synthetic_control.data.txt testdata

④运行k-means算法

   
   
   
   
  1. hadoop jar ~/dev/mahout-distribution-0.9/mahout-examples-0.9-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

⑤查看运行结果

   
   
   
   
  1. hadoop fs -ls output

参考网站:

http://blog.csdn.net/fansy1990/article/details/23261633

http://www.haogongju.net/art/2557638

http://www.cnblogs.com/yjmyzz/p/3380627.html

http://wojiaolongyinong.iteye.com/blog/1946817

你可能感兴趣的:(hadoop,Mahout)