客户端调试hadoop报错:Permission denied: user=Lenovo, access=READ_EXECUTE, inode="/tmp/.

一、问题描述

使用hadoop的java api访问hdfs,读取hdfs上所有文件信息。但是因为没有访问权限,报错:

Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=Lenovo, access=READ_EXECUTE, inode="/tmp/.cloudera_health_monitoring_canary_files":hdfs:supergroup:d---------
	at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:279)
	at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:260)
	at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkPermission(DefaultAuthorizationProvider.java:168)
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:152)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:3885)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:3868)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPathAccess(FSDirectory.java:3839)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPathAccess(FSNamesystem.java:6793)

二、问题原因

HDFS文件系统的高级管理账户是hdfs,而对于客户端调试,默认使用账户名称是自己windows登陆账户的用户名。所以导致对hdfs上的文件目录没有访问权限。

三、解决方法

使客户端调试时,用户名命名为hdfs。解决办法,即为添加系统环境变量:HADOOP_USER_NAME=hdfs

1.添加系统环境变量

2.重启电脑,或者注销用户重新登录。这一步一定要做,否则配置不生效。

3.然后,重新调试程序,是可以以hdfs超级管理员权限访问hdfs上的所有文件夹!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值