You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HDFS临时目录权限问题与YARN MapReduce框架配置异常排查

Hadoop 3.3.4双节点集群多用户场景配置问题解决

问题1:/tmp/hadoop-yarn权限拦截普通用户作业

启动JobHistory Server后,它以mapred用户身份创建的/tmp/hadoop-yarn目录权限为drwxrwx---,普通用户(比如joe)没有执行权限,导致提交YARN作业时抛出AccessControlException。

解决思路:配置多用户隔离的临时目录

不要直接修改默认目录权限(安全性差),通过配置文件指定用户专属的临时路径:

  1. 编辑mapred-site.xml,设置MapReduce AM的staging目录为用户专属路径:
<property>
    <name>yarn.app.mapreduce.am.staging.dir</name>
    <value>/tmp/hadoop-${user.name}/staging</value>
    <description>MapReduce Application Master的临时 staging 目录,按用户隔离</description>
</property>
  1. 编辑yarn-site.xml,调整YARN节点管理器的本地存储和日志目录,避免权限冲突:
<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/tmp/hadoop-yarn/nm-local-${user.name}</value>
</property>
<property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/tmp/hadoop-yarn/nm-log-${user.name}</value>
</property>

如果不需要严格的用户隔离,也可以把默认的yarn.nodemanager.local-dirs目录权限改成777,但隔离方式更适合多用户场景。


问题2:配置staging目录后出现log4j警告导致AM启动失败

改完staging目录后,作业失败并弹出log4j警告,原因是MapReduce AM容器启动时找不到log4j.properties配置文件——默认情况下,AM的classpath没包含Hadoop的配置目录,所以加载不到配置。

解决方法:让AM容器能加载log4j配置

推荐用以下两种方式中的一种:

方式一:修改mapred-site.xml添加classpath配置

在mapred-site.xml里添加AM的classpath配置,把Hadoop配置目录包含进去:

<property>
    <name>mapreduce.application.classpath</name>
    <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*,$HADOOP_CONF_DIR</value>
</property>

这样AM启动时就能加载到$HADOOP_CONF_DIR下的log4j.properties了。

方式二:手动上传log4j.properties到staging目录(不推荐)

提交作业前,把$HADOOP_HOME/etc/hadoop/log4j.properties上传到用户的staging目录,但每次提交都要操作,太麻烦,不如方式一省心。


完整修正后的操作流程

  1. 先停掉所有Hadoop服务:
[hdfs] $ $HADOOP_HOME/sbin/stop-all.sh
  1. 修改mapred-site.xml和yarn-site.xml中的上述配置,注意同步到集群所有节点
  2. 重启服务:
[hdfs] $ $HADOOP_HOME/sbin/start-dfs.sh
[yarn] $ $HADOOP_HOME/sbin/start-yarn.sh
[mapred] $ mapred --daemon start historyserver
  1. 确保用户HDFS目录存在(之前已经做过的话可以跳过):
[hdfs] $ hdfs dfs -mkdir -p /user/joe
[hdfs] $ hdfs dfs -chown joe:joe /user/joe
  1. 提交测试作业:
[joe] $ yarn jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar pi 1 10

额外提醒

  • 所有配置修改后必须同步到集群的所有节点,不然会出现节点间配置不一致的问题
  • Hadoop会自动创建用户专属的/tmp/hadoop-${user.name}目录,权限默认是700,不用手动创建;如果手动创建,记得设置正确权限
  • 如果JobHistory Server的日志也存在权限问题,可以在mapred-site.xml里配置mapreduce.jobhistory.done-dir和mapreduce.jobhistory.intermediate-done-dir为用户隔离路径,比如/tmp/hadoop-${user.name}/history

内容的提问来源于stack exchange,提问作者mkvakic-srce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:07:55