最近在学hadoop,总结下到windwos的eclipse能正常运行word count所遇到的几个问题。
1.在配置完locations后,想远程连接到hadoop的ubuntu 服务器, eclipse的左边Project Explorer下的DFS Location里显示错误:
Call to 172.16.35.2/172.16.35.2:9001 failed on connection exception: java.net.ConnectException: Connection refused: no further information。
原因是没有在linux里配置具体的hadoop服务器的IP地址。
解决方法:
网上查了不少资料,有说防火墙,有说配置出错,都不行。最后把core-site.xml、mapred-site.xml中配置的localhost都改成ubuntu的IP:172.16.35.2,就OK了!
2.能连接到服务器后又碰到了 HDFS客户端的权限错误:Permission denied。
就是权限问题。
解决方法,有3种,我用了第一种,也是最简单的。
1、在系统的环境变量或java JVM变量里面添加HADOOP_USER_NAME,这个值具体等于多少看自己的情况,以后会运行HADOOP上的Linux的用户名。(修改完重启eclipse,不然可能不生效)
2、将当前系统的帐号修改为hadoop
3、使用HDFS的命令行接口修改相应目录的权限,hadoop fs -chmod 777 /user,后面的/user是要上传文件的路径,不同的情况可能不一样,比如要上传的文件路径为hdfs://namenode/user/xxx.doc,则这样的修改可以,如果要上传的文件路径为hdfs://namenode/java/xxx.doc,则要修改的为hadoop fs -chmod 777 /java或者hadoop fs -chmod 777 /,java的那个需要先在HDFS里面建立Java目录,后面的这个是为根目录调整权限。
参考:http://www.huqiwen.com/2013/07/18/hdfs-permission-denied/
3.解决了权限问题后,开始建hadoop的WordCountProject,运行时又报了
ERROR security.UserGroupInformation: PriviledgedActionException as:root cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\root1229134948\.staging to 0700
原因是在eclipse的hadoop location里设置的"Map/Reduce Location"其中的配置不是完全起作用,而是在本地的磁盘上建立了文件,并尝试运行,显然是不行的。我们要让Eclipse提交作业到Hadoop集群上,所以我们这里手动添加Job运行地址。
解决方法:
在main函数的Configuration conf = new Configuration();后面加上conf.set("mapred.job.tracker", "172.16.35.2:9001");这句代码,
4.接着运行时又报了
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.hadoop.examples.WordCount$TokenizerMapper
原因是没在windows里配置工程jar包的路径
解决方法:
在main函数的Configuration conf = new Configuration();后面加上conf.set("mapred.jar", "D:/DJ/大数据/Hadoop/jar/mywordcount.jar"); 这句代码,mywordcount.jar为你打包的这个hadoop工程
5.最后运行又碰到了一个问题,
java.io.FileNotFoundException: File file:/D:/DJ/Program/eclipse/workspace/WordCountProject/input/capacity-scheduler.xml does not exist.
原因是我的input和output都配置错了,我是参照一篇教程配的,他可以我却不行,不知道怎么回事
解决方法:
input从 “input” 改为 “hdfs://172.16.35.2:9000/home/hadoop/hadoop-1.2.1/input”
output从 “output” 改为 “hdfs://172.16.35.2:9000/home/hadoop/hadoop-1.2.1/output”
另外如果output文件夹存在的话会报错,需要删除再运行。
至此,我在eclipse就能顺利运行hadoop程序了
