我在本地利用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读写权限的用户,需要根据自己的实际配置进行相应修改。
当然,后来发现,其实大佬们早就给了很好的解释和方法。我把自己找到的也一并贴出来。