Windows下的eclipse(with Hadoop Plug-in)向Linux集群提交MapReduce任务

时间:2023-01-15 14:49:41

今天为了这个目标碰了不少的钉子,查了不少的资料。好在现在终于成功了,所以就再也不用忍受虚拟机下的linux卡的要死的eclipse了。


强烈推荐下面这个网址的文章,涵盖了我今天遇到的绝大部分的问题

http://www.cnblogs.com/xia520pi/archive/2012/05/20/2510723.html

hadoop插件用起来可是真不容易,容易遇到很多问题。

最常见的就是以下几个了:

1.windows下的用户名也要改的和linux下一样,否则会遇到写权限的问题

2.dfs的safemode一定要记得在启动集群后解除掉

3.相关的配置一定要按照上面网址的文章配好,不然会遇到奇奇怪怪的问题

配置完插件,一般如果集群hadoop开起来以后,就能查看hdfs的文件并进行各种操作了。

下面开始建工程,写代码,写好之后,选择run on hadoop,就会提交到设定的hadoop集群上。

然后遇到了第一个问题。上面文章的3.4节和Q&A的第三个都解释了这个问题。

如下错误

ERROR security.UserGroupInformation: PriviledgedActionException as: hadoop cause:java.io.IOException Failed to set permissions of path:\usr\hadoop\tmp\mapred\staging\hadoop753422487\.staging to 0700 

Exception in thread "main" java.io.IOException: Failed to set permissions of path: \usr\hadoop\tmp \mapred\staging\hadoop753422487\.staging to 0700

在网上查过之后,说是Hadoop 0.20.0之后引入了一个什么权限检查的机制。在网上搜索了一堆文章之后,提到的大部分解决方法都是把core中的相关检查权限抛出异常的代码注释掉,然后重新编译(汗!这方法太粗暴了)。纠结了半天,放弃了(主要是因为我水平太菜,不会重新编译)。只有上面那篇文章中提到了另一种解决方案,就是

Configuration conf = new Configuration();

conf.set("mapred.job.tracker", "[server]:9001");//[server]就是master节点 添加这么一句

他的解释请参考该文章。开始,我把这行代码添加到了driver中,结果无效,后来把这行代码移到了main函数中,就有效了。

ERROR:Unsupported major.minor version 51.0

这个错误到很常见,一搜就搜到,是因为我windows中使用的是1.7的jdk,linux中是默认的1.6jdk,两者不兼容。于是把windows的jdk换成了1.6

的,结果还是没有成功。后来发现搜索这个错误的解决方案都是面向所有的java程序,有没有在使用hadoop时遇到这个错误的呢?于是在搜索时在错误语句后面加了一个hadoop eclipse,于是搜到了下面这个网址

http://lovemitter.blog.163.com/blog/static/165798134201192852012745/

原来是插件的问题。把workspace\.metadata\.plugins\org.apache.hadoop.eclipse下面的所有jar包删掉以后,再跑就没问题了。


还有一些小问题,比如说找不到主机名啊什么的,只要修改一下windows下的hosts,添加相关主机名就好了。