win7平台上使用eclipse(luna)将mapred任务上传到集群上运行
本地环境:
- jdk版本 1.7.0_51
- hadoop版本:2.4.1和2.7.2
- hadoop eclipse插件:hadoop-eclipse-plugin-2.4.1.jar
hadoop集群环境:
- jdk版本 1.7.0_79
- hadoop版本:2.7.2
- 一台master,两台slaver,使用YARN做资源管理器
步骤:
配置windows上的hadoop环境
官网上下载hadoop压缩包hadoop-2.7.2.tar.gz 然后解压。在windows上使用hadoop需要下面一些文件:hadoop.dll、hadoop.exp、hadoop.lib、hadoop.pdb、libwinutils.lib、winutils.exe、winutils.pdb。这些文件网上有说是怎么生成的,我是直接在网上搜现成的。貌似不同版本的这些文件好像差别不是很大。然后还需要将hadoop.dll放在system32文件夹下。具体原理也不是很清楚。配置eclipse上的hadoop环境
这一步主要是使用hadoop-eclipse-plugin-2.4.1.jar这个插件。这个插件网上也有生成的方法,使用https://github.com/winghc/hadoop2x-eclipse-plugin 提供的方法,使用ant编译,ant jar -Dversion=2.7.2 -Dhadoop.version=2.7.2 -Declipse.home=/opt/eclipse -Dhadoop.home=/usr/local/hadoop
最后卡在那一晚上都没成功,最后还是放弃了,在网上下载了一个2.4.1版本的。然后就是一般的配置方法了,重启eclipse,配置hadoop路径,这个地方是可以切换版本的,我的2.4.1和2.7.2切换没有问题,然后就是编辑mapreduce配置。- 配置mapred项目
将集群上的core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml四个配置文件放在项目中,注意一定要复制到src文件夹中,否则是不会起作用的。当然如果要看日志,也需要新建一个log4j.properties文件,文件内容网上随便搜。
在mapred-site.xml文件中添加如下配置:
<property>
<name>mapred.remote.os</name>
<value>Linux</value>
<description>Remote MapReduce framework's OS, can be either Linux or Windows</description>
</property>
<property>
<name>mapreduce.app-submission.cross-platform</name>
<value>true</value>
</property>
然后点run on hadoop,就能够运行了。
问题
- 集群中的mapred-site.xml文件中一定要配置mapreduce.framework.name为yarn,否则总是在本地运行,而不能在集群中运行。
- 如果报你的mapred程序的类不存在错误,那么恭喜你,前面都设置成功了,接下来只要把你项目导出jar包,然后上传到集群中的hadoop安装目录share/hadoop/mapred/lib下就可以了。当然集群中每台机器都需要这样上传的。本来以为eclipse提交任务,这些jar包可以自动传到集群上,但是细想一下,万一jar包很大呢,而且应该是需要手动传上去的。
- 如果不设置上节3中的 mapred.remote.os和mapreduce.app-submission.cross-platform,那么就会报:org.apache.hadoop.util.Shell.runCommand(Shell.java:545),并且提示返回值是0这样的错误。具体原理也不是很清楚。
- 之前一直报错,在mapred web页面发现提交的用户是hadoop而我又没有新建hadoop用户,新建了hadoop用户之后还是一样的错误,说明不是hadoop用户的问题,使用hadoop集群运行任务好像和用户没有关系。
弄了好久的使用eclipse直接运行集群上的mapred任务终于成功了,虽然了解一些hadoop的原理,但是发现是远远不够的,以后有时间,需要好好看看hadoop的源代码。下载的hadoop包中也包括了各个jar包的源码。可以好好研究研究!