使用Hadoop MapReduce执行WordCount遇Permission denied报错求解决
解决Hadoop WordCount权限拒绝(Permission denied)问题
以下是几个可行的排查和解决步骤:
1. 核查HDFS路径权限
首先确认HDFS上输入输出路径的权限是否允许当前用户操作:
- 查看路径权限:
hdfs dfs -ls /tests/wordcount - 如果当前用户没有读
input1或写output1的权限(注意:output1目录不存在时,其父目录/tests/wordcount需要有写权限),调整权限:# 给父目录添加读写执行权限(按需调整,避免过度开放) hdfs dfs -chmod 755 /tests/wordcount # 或者将路径所有权转移到当前用户(替换your_username为实际用户名,hadoop为Hadoop用户组) hdfs dfs -chown -R your_username:hadoop /tests/wordcount
2. 切换超级用户执行任务
如果普通用户权限受限,切换到Hadoop超级用户(如hdfs或hadoop)执行命令:
su hdfs # 执行WordCount命令 ${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /tests/wordcount/input1 /tests/wordcount/output1
切换用户后需确保HADOOP_HOME环境变量正确,若未配置可直接使用jar包的绝对路径。
3. 确认路径是否指向HDFS
避免混淆本地文件系统和HDFS路径:
- 若输入文件在本地,先上传到HDFS:
hdfs dfs -put /本地输入文件路径 /tests/wordcount/input1 - WordCount默认处理HDFS路径,若要使用本地路径需添加
file://前缀,但不推荐,优先确保输入输出都在HDFS上。
4. 检查HDFS权限配置(测试环境慎用)
若之前修改hdfs-site.xml未生效,可确认配置参数:
- 打开
hdfs-site.xml,检查是否添加了正确的权限开关:<property> <name>dfs.permissions.enabled</name> <value>false</value> </property> - 修改后重启HDFS服务:
stop-dfs.sh start-dfs.sh
注意:关闭权限检查仅适用于测试环境,生产环境必须保持权限开启,通过合理的权限分配解决问题。
5. 排查YARN队列权限
部分权限问题来自YARN资源队列的限制:
- 检查
yarn-site.xml中的yarn.acl.enable参数,若开启了ACL控制,需确保当前用户有提交任务到默认队列的权限; - 测试环境可临时关闭ACL(生产环境禁用):
<property> <name>yarn.acl.enable</name> <value>false</value> </property> - 修改后重启YARN服务:
stop-yarn.sh start-yarn.sh
内容的提问来源于stack exchange,提问作者jeff witcker
相关产品推荐
相关产品推荐

