HDFS存储报错:org.apache.hadoop.security.AccessControlException: Permission denied: user=............

本文探讨在WSL环境下配置Hadoop时遇到的HDFS权限错误,提供了一种通过代码手动设置HDFS用户名的解决方案,避免了修改系统变量或创建Linux用户带来的风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在本地利用WSL配置Hadoop环境,windows下用Spark往HDFS中写入数据,报了没有权限的错误。

这个问题,网上答案有很多:

(1)就是修改系统变量。在hdfs.xml文件中,修改dfs.permissions为false。这样HDFS就不会进行权限检查。

(2)是在Linux中增加supergroup组用户,以本地(一般是idea)报错中的user=???的用户名,在linux中创建用户,并给予超级权限。 

这里贴一个连接上述两种方案的具体实现。

但是这两种方案的弊端也很明显,对于(1)让HDFS放弃权限检查是很危险的行为;对于(2)大家都知道,Ubutun创建用户名不支持大写,我在Windows下的用户名就是大写字母开头。

并且,上述两种方案,都要求用户对生产环境具有较高的控制权,其实并不实用。

因此,一个很好的办法就是,在代码中,手动告诉hdfs用户名:

System.setProperty("HADOOP_USER_NAME", "hadoop")

这里的hadoop,是在Linux环境中,拥有对hdfs读写权限的用户,需要根据自己的实际配置进行相应修改。

当然,后来发现,其实大佬们早就给了很好的解释和方法。我把自己找到的也一并贴出来。

从大数据研发的角度解决问题 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值