准备工作:linux 下hadoop部署成功
win7上准备工作:
eclipse下载:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/kepler/SR2/eclipse-standard-kepler-SR2-win32-x86_64.zip
hadoop下载:http://archive.apache.org/dist/hadoop/core/hadoop-0.20.203.0/
hadoop插件下载:我的资源已上传
hadoop-eclipse-plugin-1.0.4.jar
LocationName:
这个不用在意,就是对这个MapReduce的标示,只要能帮你记忆即可
Map/ReduceMaster部分相关定义:
Host:搭建的集群中JobTracker所在的机器的IP地址
port:JobTracker的端口
两个参数就是 mapred-site.xml中mapred.job.tracker的ip和端口
DFSMaster部分:
Host:集群搭建中Namenode所在机器IP
Port:就是namenode的端口
这两个参数是在 core-site.xml里fs.default.name里面的ip和端口
User Name:
就是搭建Hadoop集群是所用的用户名,我这里用的是hduser
填写完以上信息以后,关闭Eclipse,然后重新启动。也需要启动虚拟机里的hadoop(bin/start-all.)
为什么这么做呢?因为如果不重新启动,Advanced Parameters里,有些重要的选项不能显示,重启后,来配制Advanced Parameters信息:
接下来设置advancedparameter,里面主要注意的是 hadoop.tmp.dir(要与配置文件中的临时目录一致,此配置在core-site.xml里面);
dfs.replication:
这个这里默认是3,但是要根据你的Datanode的个数来定,如果你仅有2个datanode,那么就写2,如果只有一个,就写1,大于或者等于3个,写3,我们是伪分布式写1
hadoop.tmp.dir:
这个要跟上节建立的Hadoop集群配置中core-site.xml中的hadoop.tmp.dir设置一样这些都配置好了之后重启eclipse。在左边会出现
一、 运行第一个程序
在 projectExplorer中右键->new ->mapreduce project然后点击 configure Hadoopinstall directory浏览到 hadoop0.20.2文件夹
,这样project就会自动把hadoop下的jar包导入到工程,然后把hadoop自带的wordcount源码复制到project src目录下(注意包名要一致)然后右键 Run As ->Run configuration,弹出配置窗口单击左边的javap Application 选择WordCount程序,然后在右侧的ArgumentsProgram arguments 中配置运行参数(hdfs://10.22.73.20:9000/user/grid/input hdfs://10.22.73.20:9000/user/grid/output分别对应程序输入目录和输出目录)点击apply,然后再在wordcount上右键 ->run onhadoop 程序就能运行并在eclipse中打印日志信息了。
如下图:
但此时可能会出现类似异常信息:
12/04/24 15:32:44WARN util.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable
12/04/24 15:32:44 ERROR security.UserGroupInformation:PriviledgedActionException as:Administrator cause:java.io.IOException: Failedto set permissions of path:\tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to0700
Exception in thread "main" java.io.IOException: Failed to setpermissions of path:\tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to0700
atorg.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:682)
atorg.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:655)
atorg.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509)
atorg.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344)
atorg.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189)
atorg.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:116)
atorg.apache.hadoop.mapred.JobClient$2.run(JobClient.java:856)
atorg.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850)
at java.security.AccessController.doPrivileged(NativeMethod)
at javax.security.auth.Subject.doAs(Subject.java:396)
atorg.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093)
atorg.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:500)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530)
atcom.hadoop.learn.test.WordCountTest.main(WordCountTest.java:85)
这是由于Windows下文件权限问题,在Linux下可以正常运行,不存在这样的问题。
参考:http://blog.csdn.net/keda8997110/article/details/8533633
解决方法是修改 \hadoop-0.20.203.0rc1\hadoop-0.20.203.0\src\core\org \apache\hadoop\fs\RawLocalFileSystem.java ,注释掉 checkReturnValue(有些粗暴,在Window下,可以不用检查)
1 | private void checkReturnValue( boolean rv, Path p, FsPermission permission) |
2 | throws IOException { |
3 | /*if (!rv) { |
4 | throw new IOException("Failed to set permissions of path: " + p + " to " + |
5 | String.format("%04o", permission.toShort())); |
6 | }*/ |
7 | } |
然后重新编译、打包 hadoop-core-0.20.203.0.jar ,再次运行即可成功。关于这个重新编译hadoop的方法我上面的压缩包里也有教程文档,为了方便起见,我把已经编译打包好的jar也上传了,你直接替换即可。见我上传的资源。
ok,到此你现在应该可以在windows7下远程调试你的hadoop代码了,如果没有成功,请仔细核对各个步骤、各个配置项,Good Luck~
http://www.lupaworld.com/article-223719-1.html