最后一次:HDFS的permission denied

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

在使用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

几乎人人都知道这个报错是权限问题,发生这个错误的场景:

场景

  1. 在windows上,我通过IDEA使用Hadoop Client读取HDFS上的文件
  2. 在linux上,我使用非hdfs用户上传文件:hdfs dfs -put jimo.txt /usr/hdfs

显然,问题原因就是我们使用的用户对HDFS目录没有操作权限,我们使用的用户如果不指定,默认是系统用户:也就是当前登录用户,不论操作系统。

解决

那简单,切换成相应的hdfs用户吧。

linux完全ok,而windows要建一个用户就很麻烦了,所以,正确的方式Hadoop也考虑到了:手动指定用户!

通过设置 HADOOP_USER_NAME 这个环境变量来设置用户。

Java代码里

有的情况,你只需要设置一行代码即可,比如:

 System.setProperty
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值