在捣鼓hadoop的时候,觉得eclipse写Mapreduce程序很不爽。就配置了一个eclipse的hadoop插件。但是遇到了问题。
先说明下我的情况: 我集群有3台机器。都在虚拟机中。物理机也是linux,但并未安装hadoop加入集群。hadoop版本是1.2.1
此时,我在物理机上装eclipse,然后远程连接到虚拟机的hdfs。
根据教程一切都完成了。然而在操作hdfs的时候,出现了一个错误:
org.apache.hadoop.security.AccessControlException: Permission denied.
user=kai,access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x
初步估计,应该是权限问题(看到错误信息里有user=kai,而我hadoop集群里的用户名为hadoop,kai是我物理机的用户名)。在网上百度了一下解决的方法:
有人说在插件的Advanced Parameters选项卡中,将"hadoop.job.ugi" 修改一下。但我找半天没有找到。所以我推测,这应该是0.20.X以前的老版本的解决办法。
新版的解决办法是修改hdfs-site.xml文件。增加 如下项:
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
这个是把hdfs的权限检查给关掉。这个默认是true的。
有一步切记!那就是修改完毕后,把文件scp到各个Slave上,把原文件覆盖,当然如果你SecondaryNameNode是独立的节点,也要拷贝。
完成后重启集群。解决。
不过这样做可能会有安全性的问题。目前能想到的办法就是: 把eclipse安装到集群的任意节点上,并以hadoop专用用户来执行,如我专用用户名就是hadoop,那我在开机登录时,就使用它。