EMR集群执行Hadoop DistCP失败:缺失YARN日志目录
解决DistCP执行时YARN容器日志目录不存在的问题
我之前在EMR集群上执行DistCP时碰到过完全一样的错误,核心原因是YARN NodeManager的日志目录要么不存在,要么权限配置不对,导致容器启动时无法创建stdout日志文件。给你几个实用的排查和解决步骤:
1. 检查YARN日志根目录的存在性与权限
首先登录到错误提示中/mnt/yarn/logs所在的集群节点,执行以下命令确认目录状态:
ls -ld /mnt/yarn/logs
- 如果返回"No such file or directory",说明根目录不存在,手动创建并设置正确权限:
sudo mkdir -p /mnt/yarn/logs sudo chown yarn:yarn /mnt/yarn/logs sudo chmod 755 /mnt/yarn/logs - 如果目录存在但权限不对(比如owner不是yarn用户),直接执行上面的
chown和chmod命令修正权限。
2. 验证YARN配置中的日志路径
打开YARN的核心配置文件yarn-site.xml(通常在/etc/hadoop/conf目录下),检查yarn.nodemanager.log-dirs参数是否指向正确的路径:
<property> <name>yarn.nodemanager.log-dirs</name> <value>/mnt/yarn/logs</value> </property>
如果配置的路径和实际目录不一致,修改后重启NodeManager服务:
sudo stop yarn-nodemanager sudo start yarn-nodemanager
3. 临时应急:手动创建缺失的容器日志目录
如果需要快速验证任务是否能执行,可以先手动创建错误中指定的具体容器日志目录:
sudo mkdir -p /mnt/yarn/logs/application_1524773139099_0003/container_1524773139099_0003_02_000001 sudo chown yarn:yarn /mnt/yarn/logs/application_1524773139099_0003/container_1524773139099_0003_02_000001
之后重新执行你的DistCP命令:
hadoop distcp s3a://your-source-path hdfs://host/data/your-target-path
不过这只是临时方案,建议还是从前面两步彻底解决日志目录的配置问题。
4. 额外检查:S3A访问配置
虽然这个错误是日志路径导致的,但如果S3A的配置不正确(比如未设置AWS密钥),也可能间接导致容器启动异常。可以检查core-site.xml中的相关配置:
<property> <name>fs.s3a.access.key</name> <value>your-aws-access-key</value> </property> <property> <name>fs.s3a.secret.key</name> <value>your-aws-secret-key</value> </property>
内容的提问来源于stack exchange,提问作者Sam Lee
相关产品推荐
相关产品推荐

