解决“org.apache.hadoop.security.AccessControlException”
Permission denied: user=Administrator, access=WRITE, inode="/user":root:supergroup:drwxr-xr-x
解决方案有4种
1.关闭Hdfs的安全检查(permission checking):将hdfs-xml中 dfs.permissions 属性的值设置为 false 。但是这种方法的弊端是会导致Hdfs系统中所有的安全特性都被禁用,使Hdfs的安全性降低。
2.Hdfs的用户权限是与本地文件系统的用户权限绑定在一起的,根据错误中的
Permission denied: user=Administrator, access=WRITE, inode="/user":root:supergroup:drwxr-xr-x
我们可以发现,Hdfs中的/user目录是属于supergroup组里的root用户的,在hadoop中修改执行操作的用户为该目录所属的用户
3.添加操作用户到supergroup组
如果是Linux环境,将执行操作的用户添加到supergroup用户组。
groupadd supergroup
usermod -a -G supergroup spry
如果是Windows用户,在hdfs namenode所在机器添加新用户,用户名为执行操作的Windows用户名,然后将此用户添加到supergroup用户组。
adduser Administrator
groupadd supergroup
usermod -a -G supergroup Administrator
4.显示设定环境变量: 比较靠谱的方式:System.setProperty("HADOOP_USER_NAME", "root"); 当然还可以通过run configuration 的方式进行指定jvm环境功能变量‘-DHADOOP_USER_NAME=root’
参考文章:
https://www.2cto.com/net/201612/577705.html
https://blog.csdn.net/Camu7s/article/details/50231625