在使用Hadoop HDFS时,几乎初学者都会遇到下面的权限问题,有的人草草搜索解决了,却不知道为什么,下次换一种场景依然解决不了。只有了解其本质原因,才能举一反三。
异常信息:
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=administrator, access=WRITE, inode="/user/hdfs/xxx":hdfs:supergroup:drwxr-xr-x
几乎人人都知道这个报错是权限问题,发生这个错误的场景:
场景
- 在windows上,我通过IDEA使用Hadoop Client读取HDFS上的文件
- 在linux上,我使用非hdfs用户上传文件:
hdfs dfs -put jimo.txt /usr/hdfs
显然,问题原因就是我们使用的用户对HDFS目录没有操作权限,我们使用的用户如果不指定,默认是系统用户:也就是当前登录用户,不论操作系统。
解决
那简单,切换成相应的hdfs用户吧。
linux完全ok,而windows要建一个用户就很麻烦了,所以,正确的方式Hadoop也考虑到了:手动指定用户!
通过设置 HADOOP_USER_NAME 这个环境变量来设置用户。
Java代码里
有的情况,你只需要设置一行代码即可,比如:
System.setProperty

本文详细探讨了在使用Hadoop HDFS时遇到的权限问题,包括Windows和Linux环境下用户权限不足导致的异常。核心问题在于默认用户对HDFS目录无权限。解决方法是通过设置HADOOP_USER_NAME环境变量指定用户,如在Java代码中设置或在启动Spark前配置环境变量。然而,直接修改HDFS目录权限虽能临时解决问题,但会破坏权限控制。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



